2020年9月についにGitHub CLI 1.0が登場しましたね。
ソースコード、ドキュメントはこちらから
GitHub CLIは、go言語製のGitHub公式のCLIツールです。(既存のGitHubのCLIツールとして有名なのはhubらしいですね)
従来はcommitなどの作業はターミナルで行うが、PRの作成などはブラウザを開いて行う必要がありました。
ターミナル→ブラウザ→ターミナル...みたいに頻繁にアプリを切り替える必要があり、個人的にはこのタイミングでコンテキストスイッチによって集中力が途切れがちでした。
GitHubを開くためにブラウザ開いたのに、YouTubeのタブが開いていてそのまま...なんてことはよくありますよね...?GitHub CLIを利用すればこの切り替えの手間がなくなり、快適なGitHubライフを送ることができるというわけなんですね。
2020年2月頃にβ版がリリースされていたのですが、2020年9月にβ版が終了してGitHub CLI 1.0としてリリースされました。 β版では対応していなかったGitHub Enterprise Serverも利用できるようになったみたいです。
ちょうど業務でEnterpriseを使っているので利用してみようと思い、休み期間中にGitHubCLI(ghコマンド)をいろいろ触ってみたので、学んだことを何回かに分けて共有していきたいと思います。
今回は、ghコマンドのできることと、GitHubおよびGitHubEnterprise用の環境を構築する手順を紹介します。
ghコマンド 何ができるの
ghコマンドは、基本的にgh <command> <subcommand> [flags]
で実行します。
commandとして利用上記できるのは、CORE COMMANDS
とADDITIONAL COMMANDS
です。 おそらく、このCORE COMMANDS
を使うことがghコマンドを使う目的であると思います。
できることは、基本的に以下の通りです。
- repoコマンド
- リポジトリの作成、clone、fork、など
- prコマンド
- PRの閲覧、作成、一覧表示、レビューなど
- issueコマンド
- issueの作成、閲覧、一覧表示、closeなど
- releaseコマンド
- releaseの作成、削除など 新しいタグを作成するなど。
- gistコマンド
- gistを作成、削除、一覧表示など
ちなみにADDITIONAL COMMANDS
には以下の6種類があります。
ADDITIONAL COMMANDS
alias: Create command shortcuts
api: Make an authenticated GitHub API request
auth: Login, logout, and refresh your authentication
completion: Generate shell completion scripts
config: Manage configuration for gh
help: Help about any command
検証環境
Mac OS X
現在MacOS, Windows, Linuxに対応しています。
まずはinstall
macOSなのでbrewでinstallします。
$ brew install gh
versionを確認
$ gh --version
gh version 1.0.0 (2020-09-16)
https://github.com/cli/cli/releases/tag/v1.0.0
これでインストールは完了です。
認証
まずはGitHubアカウントの設定を行います。認証にはブラウザで行う方法と、GitHubで発行したアクセストークンを利用する方法があります。 設定方法は対話形式とコマンド一発で行う方法などがあります。
今回は一番簡単な「ブラウザで対話形式」と、今後楽になる「アクセストークンで一発」の組み合わせの2通り紹介します。
ブラウザで対話形式
gh authコマンドのうち、loginコマンドを利用します。
$ gh auth login
まずはGitHub.com
を利用するかGitHub Enterprise Server
を利用するか選択します。今回はGithub.com
を利用してみます。
? What account do you want to log into? [Use arrows to move, type to filter]
> GitHub.com
GitHub Enterprise Server
ログインの方法を選択します。今回はブラウザを利用しました。
? How would you like to authenticate? [Use arrows to move, type to filter]
> Login with a web browser
Paste an authentication token
enterを押すとone-time codeが出力されると同時にブラウザが開きます。
one-time codeが求められるので入力します。
デフォルトでは以下の権限が与えられていることがわかります。
Existing access
- Create gists
- Read org and team membership, read org projects
- Full control of private repositories
指示に従ってぽちぽちしていくと認証が完了します。
次にプロトコルを選択します。HTTPS
かSSH
を選択します。
✓ Authentication complete. Press Enter to continue...
? Choose default git protocol [Use arrows to move, type to filter]
HTTPS
> SSH
以上で終了です。
アクセストークンで、コマンド一発パターン
まずはGitHubでアクセストークンを発行します。以下の通りブラウザで操作します。
-
AccountのSettingsを開く
-
タブにある
Developers setting
を選択 -
タブにある
Personal access tokens
を選択 -
Generate new tokenを選択
ここから、必要な権限をチェックし、Generate token
を押します。
無事に発行されました。(一応隠してあるけど個人用アカウントでなんの権限もないゴミで、さらにすでに削除済みなのでご安心を)
これをどこか安全な場所にテキストファイルとして保管しておきます。
以下のコマンドで実行すると、一発で認証できます。
$ gh auth login --hostname (GHEならhost指定) --with-token < /path/to/enterprise_account
もしくは
$ gh auth login --with-token < /path/to/github_account
ちなみに、--hostname
でhostを指定しない場合はgithub.com
が指定されます。 https://github.com/cli/cli/blob/929e082c13909044e2585af292ae952c9ca6f25c/internal/ghinstance/host.go#L8
これで認証は完了です。
ちなみにghのaliasコマンドを利用することで、loginをもっと簡略化することもできます。 (github.comアカウントとenterpriseアカウントが同時にログインできるので、ログアウトをする機会もおそらくほとんどないはずなので、ログインを簡略化する必要はあまりないかもですが参考までに。)
l
というaliasコマンドをghコマンドに追加してみます。
$ gh alias set --shell l 'gh auth login --with-token < /path/to/github_account'
これ以降、これでログインできます。
$ gh l
loginしているアカウントを確認
以下のコマンドで確認することができます。
$ gh auth status
logout
ログアウトは以下の通りです。
$ gh auth logout
エディタの設定
PRやissueを書く時などのエディタを設定します。今回はvimを設定しました。
$ gh config set editor vim
ちなみに公式ドキュメントによれば現状Windowsでは常にメモ帳らしい。
On Windows, the editor will currently always be Notepad.
さいごに
ghコマンドいろいろ触ってみたけど、かなり便利なので、次回以降は主要コマンドの解説の記事を書きたいと思います。