このページ内容は2021年1月21日以降、再調査・再検証してません。実際に扱う際は最新の情報にアクセスしてください。
GitHub CLIはGitHub上での操作をCLIで実行するためのGitHub公式ツールですgithub_cli。ローカルで新規にリポジトリを作成、PRの一覧・切り替えやGitHub APIの実行などができます。
近いものでhubというCLIツールがありますが、それをGoで再実装し、GitHubで公式になったものがGitHub CLIです。また、元々hubをメンテナンスしていた方がGitHub CLIの方をメンテナンスするようになったので、hubを使ってる方も移行を考えた方が良さそうです。
GitHub CLIは2, 3年前からありますが、よく知らない人のために、GitHub CLIで使う機会が多い (自分比) コマンドについて紹介します。より詳しい説明やその他のコマンドはgithub_cli_manualで確認できます。
gh repo create
コマンドを使うと、リポジトリを新規作成できます。リポジトリ名や公開範囲はどうするか、.gitignoreは作成するか、ライセンスを追加するかなどが聞かれます。意外と便利です。
1$ gh repo create2? What would you like to do? [Use arrows to move, type to filter]3> Create a new repository on GitHub from scratch4Push an existing local repository to GitHub5? Repository name <repository_name>6? Repository description7? Visibility [Use arrows to move, type to filter]8> Public9Private10Internal11? Would you like to add a .gitignore? Yes/No12? Would you like to add a license? Yes/No13? This will create "<repository_name>" as a private repository on GitHub. Continue? Yes14✓ Created repository <user>/<repository_name> on GitHub15? Clone the new repository locally? Yes/No
gh pr list
を使うとリポジトリのPR一覧を確認できます。
1$ gh pr list2Showing 1 of 1 open pull request in <user_name>/<repo_name>3#2 <pr_title> <branch_name>4#3 <pr_title> <branch_name>5#5 <pr_title> <branch_name>6//}
PRの一覧を確認するだけでなく、チェックアウトしたいPR番号を指定することで、そのリポジトリにチェックアウトできます。gitでいうとgit fetch; git checkout origin/remote_branch -b remote_branch
を簡単にできます。
1$ gh pr checkout 5
pecoと組み合わせることで、PR一覧を見ながらワンライナーで切り替えできるようになります。
1$ gh pr checkout $(gh pr list | peco | cut -f 1)2QUERY> IgnoreCase [1 (1/1)]32 <pr_title> <branch_name> OPEN43 <pr_title> <branch_name> OPEN55 <pr_title> <branch_name> OPEN
GitHubのAPI v3 (REST API) やv4 (GraphQL) も使うことができます。例えば、リポジトリに存在するブランチ名一覧を取得したい場合は、以下のように書くことで取得できます。ここでは、--template
オプションをつけることで出力を整形し、nameごとに改行してます。このようなGitHub APIをそのまま叩くのは不便ですが、GitHub Extensionsと組み合わせることで、効果的にGitHub APIを使うことができます。
1$ gh api graphql -f2query='{3repository(owner: "<user>", name: "<repository_name>") {4refs(first: 50, refPrefix:"refs/heads/") {5nodes {6name7}8}9}10}'11--template '{{- range .data.repository.refs.nodes -}}{{- .name | printf "%s\\n" -}}{{- end -}}'1213<branch_name1>14<branch_name2>
2021年にリリースされたGitHub CLI v2.0からGitHub Extensionという機能が使えるようになりました。これはShellやバイナリコードをghの拡張コマンドに組み込める機能です。gh extension create
コマンドで雛形を作成できます。作成後はgh-<コマンド名>
のブランチを作成し、gh extension install <username>/<branch>
でインストールできます。
例えば、gh-branchという名前で以下のようなExtensionを書くと、GitHub APIを手打ちする代わりにgh branch
コマンドとして、リポジトリに存在するブランチ一覧と各ブランチの最新のコミットメッセージを表示し、インクリメンタルにブランチ切り替えができます。ちなみに、ownerやrepoなどの引数はコマンド実行時に入ります。
1#!/bin/bash2set -e34remote_branch=$(gh api graphql -F owner='{owner}' -F repo='{repo}' -f query='5query ($owner: String!, $repo: String!) {6repository(owner: $owner, name: $repo) {7refs(first: 50, refPrefix: "refs/heads/") {8nodes {9name10target {11... on Commit {12history(first: 1) {13edges {14node {15message16}17}18}19}20}21}22}23}24}' --template '25{{- range .data.repository.refs.nodes -}}26{{- .name | printf "%-30s\t" -}}27{{- range .target.history.edges -}}28{{- .node.message | printf "%-50s\n" -}}29{{- end -}}30{{- end -}}31' | peco | cut -f 1)3233git checkout origin/$remote_branch