とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど

開催予定の勉強会

読者登録と各種SNSのフォローもよろしくお願いいたします。

GitHub CLIを使ってターミナルに引きこもる

GitHubを使うときはWebから操作するという方は結構いると思いますが、エディタやWebブラウザを行ったり来たりするのは大変ですよね。私は普段の作業を概ねターミナルで済ませてしまっているので、GitHubを操作するためにブラウザを起動するのが億劫でたまりません。そこで私は普段からGitHub CLIをよく使います。GitHub CLIをどのように使っているのか、いくつか紹介します。

GitHub CLI ??

docs.github.com

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をどのように認証するか

  1. Login with a web browerを選択すると、次の手順でWebブラウザが起動し、GitHubにログインし認証することになります。
  2. 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のドキュメントはこちらです。

docs.github.com

左側メニューから取得したいデータをクリックするとGitHub CLIではどう書けばいいかまでドキュメントに載っていますので参考にしてみてください。

Extension

GitHub CLIはエクステンションをインストールすることで拡張することができます。

こちらはGitHubで公開されているエクステンション一覧です。

gh-extension · GitHub Topics · GitHub

gh extension browseコマンドを使用すると、ターミナル上からエクステンションの一覧、インストール、アンインストールなどが行えます。

個人的によく使ってるのはエクステンションです。

github.com

GitHub - gabe565/gh-profile: :octocat: Use multiple GitHub accounts with the gh cli.

このようにインストールすることができます。

gh extension install gabe565/gh-profile

まとめ

GitHub CLIがあればほとんどの操作をターミナルで行うことができます。また、APIを駆使すればWebからでは取れない、取りづらいデータまで取れてしまったりするので強力なツールといえます。エクステンションの種類も豊富ですので、自分なりにカスタムして使ってみてはいかがでしょうか。