GitHubを使うときはWebから操作するという方は結構いると思いますが、エディタやWebブラウザを行ったり来たりするのは大変ですよね。私は普段の作業を概ねターミナルで済ませてしまっているので、GitHubを操作するためにブラウザを起動するのが億劫でたまりません。そこで私は普段からGitHub CLIをよく使います。GitHub CLIをどのように使っているのか、いくつか紹介します。
GitHub CLI ??
GitHubのあらゆる操作をCLIから行えるオープンソースツールです。
インストール方法はこちらを参考にしてください。
https://github.com/cli/cli#installation
操作方法
gh <command> <subcommand> [flags]
どんな<command>
があるのかgh help
を実行すると確認できます。
$ gh help Work seamlessly with GitHub from the command line. USAGE gh <command> <subcommand> [flags] CORE COMMANDS auth: Authenticate gh and git with GitHub browse: Open the repository in the browser codespace: Connect to and manage codespaces gist: Manage gists issue: Manage issues org: Manage organizations pr: Manage pull requests project: Work with GitHub Projects. release: Manage releases repo: Manage repositories ...
helpコマンドは引数に<command>
や<command> <subcommand>
を渡すことで、そのコマンド・サブコマンドのヘルプを表示できます。
例えば、issueコマンドで何かできるのか確認したいとしましょう。gh help issue
を実行することでissueコマンドの使い方を表示できます。
$ gh help issue Work with GitHub issues. USAGE gh issue <command> [flags] GENERAL COMMANDS create: Create a new issue list: List issues in a repository status: Show status of relevant issues ... $ gh help issue list List issues in a GitHub repository. The search query syntax is documented here: <https://docs.github.com/en/search-github/searching-on-github/searching-issues-and-pull-requests> For more information about output formatting flags, see `gh help formatting`. USAGE gh issue list [flags] ...
helpコマンドを使いこなせばどのコマンドもそれほど難しくないので積極的にhelpコマンドを使うようにしましょう。
初期設定
GitHub CLIからGitHubを操作するには、まずGitHubと接続する必要があります。gh auth login
を実行しましょう。対話形式でいくつか質問されます。
? What account do you want to log into? [Use arrows to move, type to filter] > GitHub.com GitHub Enterprise Server
どのアカウントにログインしますか?GitHub or GitHub Enterprise
使ってる方を選択します。
? What is your preferred protocol for Git operations on this host? [Use arrows to move, type to filter] > HTTPS SSH
このホストでGitを操作するプロトコルは? SSH or HTTPS
こちらも先ほどと同様、使ってる方を選択します。
? Authenticate Git with your GitHub credentials? (Y/n)
GitHubの認証情報でGitを認証するか
y
でいいでしょう。
? How would you like to authenticate GitHub CLI? [Use arrows to move, type to filter] > Login with a web browser Paste an authentication token
GitHub CLIをどのように認証するか
Login with a web brower
を選択すると、次の手順でWebブラウザが起動し、GitHubにログインし認証することになります。Paste an authentication token
を選択するとPersonal Access Token(PAT)の入力を求められます。
今回は操作が簡単な1.を選択します。
! First copy your one-time code: 1234-5678 Press Enter to open github.com in your browser...
! First copy your one-time code:
の行に出力されている4文字-4文字
のコードをブラウザ上から入力します。
接続が完了したらプロンプトに戻ってきてgh auth login
コマンドが終了します。
これでGitHub CLIからGitHubの操作が行えるようになりました。
よく使う操作
オーガナイゼーション
自分がアサインされているOrgの一覧を表示します。
gh org list
リポジトリ
アカウントがホストしているリポジトリの一覧を表示します。
gh repo list
Orgを指定して、そのOrgがホストしているリポジトリの一覧も表示できます。
gh repo list <owner>
パブリックリポジトリもプライベートリポジトリもごちゃ混ぜで出力されるのでプライベートリポジトリのみ表示してみます。
gh repo list <owner> --visibility private
プライベートリポジトリを作成してカレントディレクトリにCloneします。
gh repo create my-project --private --clone
Issue
Issueを作成します。操作対象のリポジトリに移動してから実行します。
gh issue create
作成時にアサイニーを追加します。
gh issue create -assignee <github-account-name>
自分を追加する場合は--assignee @me
です。
一覧を取得します。
gh issue list
コメントします。
gh issue comment <issue-number>
Pull Request
Pull Requestを作成します。リポジトリに適当な変更を加えgit commit
しておきます。pushは不要です。
gh pr create
作成時にアサイニーを追加します。
gh pr create --assignnee <github-account-name>
自分を追加する場合は--assignee @me
です。
レビュアーも追加してみます。
gh pr create --assignee @me --reviewer <github-account-name>
一覧を取得します。
gh pr list
マージします。
gh pr merge <pull-request-number>
API
APIを叩いて直接データを取れます。Shellのプロンプトをほげほげするのにたまに使います。
ユーザー情報
gh api /user
-q
オプションでjqコマンドのクエリを使用できます。
gh api user -q [.login, .name]'
APIのドキュメントはこちらです。
左側メニューから取得したいデータをクリックするとGitHub CLIではどう書けばいいかまでドキュメントに載っていますので参考にしてみてください。
Extension
GitHub CLIはエクステンションをインストールすることで拡張することができます。
こちらはGitHubで公開されているエクステンション一覧です。
gh-extension · GitHub Topics · GitHub
gh extension browse
コマンドを使用すると、ターミナル上からエクステンションの一覧、インストール、アンインストールなどが行えます。
個人的によく使ってるのはエクステンションです。
GitHub - gabe565/gh-profile: :octocat: Use multiple GitHub accounts with the gh cli.
このようにインストールすることができます。
gh extension install gabe565/gh-profile
まとめ
GitHub CLIがあればほとんどの操作をターミナルで行うことができます。また、APIを駆使すればWebからでは取れない、取りづらいデータまで取れてしまったりするので強力なツールといえます。エクステンションの種類も豊富ですので、自分なりにカスタムして使ってみてはいかがでしょうか。