カテゴリー
Debian LinuxとAlpine Dockerコンテナでもgh(Github CLI)コマンドを導入する
※ 当ページには【広告/PR】を含む場合があります。
2021/01/05
2022/01/27

直近の話題でベータ公開されていた
手元のDebian Linuxでも
Gh(GitHub CLI)コマンドのインストール方法
OSごとの全ての手順はとても取り上げられませんが、ここではDebian系のaptパッケージマネージャと、Alpine系のapkパッケージマネージャの2つに絞ってGhコマンドの導入手順をご紹介します。
【Debian Linux】Linuxbrewからインストール
Debianに限らずLinuxbrewがインストール済みであれば以下のコマンドからgithub cliが即時導入できます。
$ brew update
$ brew install gh
Updating Homebrew...
==> Downloading https://linuxbrew.bintray.com/bottles/patchelf-0.11.x86_64_linux
==> Downloading from https://akamai.bintray.com/73/7396e6cf5dbe62fae0e7fcba57f88
########################################################################100.0%
#...中略
Pruned 1 symbolic links from /home/linuxbrew/.linuxbrew
==> Caveats
==> gh
Bash completion has been installed to:
/home/linuxbrew/.linuxbrew/etc/bash_completion.d
たったこれだけでGithub CLIの導入完了です。 Homebrewはとても便利。
バージョン確認をしてみると、
$ gh --version
gh version 1.1.0 (2020-10-06)
https://github.com/cli/cli/releases/latest
と確かに最新版がインストールされているようです。
【Alpine Linux】apkパッケージマネージャから直にインストール
別記事の
公式にはAlpineへのGhコマンドのインストール方法の説明はありませんが、Alpine公式には既に
FROM alpine:3.15
RUN apk update && apk upgrade && \
apk add --no-cache bash git openssh expect
#👇GitHub CLIコマンドを追加
RUN apk add --no-cache github-cli
CMD ["bash"]
先程のLinuxbrewより更に簡単な使えるのが有り難いところです。
GitHub CLIでユーザーアカウントを認証する(初回)
初回はアカウントの情報を設定しなければならないので、以下のようにユーザーログイン作業を行います。
$ gh auth login
? What account do you want to log into? GitHub.com
- Logging into github.com
? How would you like to authenticate? Login with a web browser
! First copy your one-time code: ****-****
#👇Enterキーを押すとブラウザから認証作業ができます(下の図参照)。
- Press Enter to open github.com in your browser...
#👇ブラウザでの作業完了後に表示されます。
✓ Authentication complete. Press Enter to continue...
? Choose default git protocol HTTPS
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as ***********

認証後ログインできるようになっていると、ステータスが正常に跳ね返ってきます。
$ gh auth status
github.com
✓ Logged in to github.com as *********** (~/.config/gh/hosts.yml)
✓ Git operations for github.com configured to use https protocol.
レポジトリの情報をみる
gh repo view
my_hoge_project
$ gh repo view my_hoge_project
***********/my_hoge_project
Private Hoge Project
#...Readme.mdの内容がズラーッと出力
#...中略
View this repository on GitHub: https://github.com/***********/my_hoge_project
とするとブラウザでページにアクセスせずとも、Readmeをコマンド一発で参照できます。
GitHub CLIで出来る基本操作〜プルリクエストからマージまで
雰囲気だけを味わうためプルリクエストしてそのままマージをやってみます。
通常ではチームで開発業務を行っている方々は、プルリクした後に色々とレビューやissueなどの過程を経ると思います。
今回は趣味程度のお一人さまレポジトリでghコマンドの動作確認程度しか解説していないので、詳しくは
プルリク
まず開発中のブランチ
dev
$ git push origin dev
Enumerating objects: 17, done.
Counting objects: 100% (17/17), done.
#...中略
To https://github.com/********/my_hoge_project.git
9a10e74..bdf5311 dev -> dev
としておいてブラウザでレポジトリを見ると、下のような状態です。

ここからプルリクエストを作成します。 コマンドは
gh pr create
すると対話的にプルリクエストのオプションが聞かれるので、適当に入力してみます。
$ gh pr create
Creating pull request for dev into main in ********/my_hoge_project
#👇プルリクのタイトルを入力
? Title Remove cupper area from LED pattern
#👇コメントのBodyは省略可
? Body <Received>
#👇Submitを選択
? What's next? Submit
https://github.com/********/my_hoge_project/pull/15
すると先程開発ブランチからプッシュした変更点からプルリクエストが作成されています。

ちなみにプルリクエストを作成するオプションを利用すると、逐一コマンドラインから設定を聞かれなくなるので、シェルスクリプトによる自動化の際にはオプションは付けておきたいところです。
gh pr create --help
主なオプションとして、
-B, --base <branch>:
マージ先のブランチを指定
-b, --body <content>:
プルリクの内容の指定
-d, --draft:
ドラフトプルリクエストを作成
-t, --title <title>:
タイトルを指定
-w, --web:
ブラウザを開いてプルリクエストを作成
毎回対話型でオプションの確認を聞いて来られるのは正直うるさいなぁ...となったら、
--fill(-f)
このオプションを指定していると、
--title
--body
$ gh pr create --fill
#OR
$ gh pr create -f
少数人数で開発チームで行っている場合にはこちらの方が使い勝手いいように思います。
プルリクの履歴確認
現在のプルリクエストの履歴を
gh pr list
$ gh pr list -s all
Showing 15 of 15 pull requests in ********/my_hoge_project that match your search
#15 Remove cupper area from LED pattern dev
#14 Added cnc file fot pcb-coil dev
#...中略
#1 Added resources dev
プルリク中のステータスの確認には
gh pr status
$ gh pr status
Relevant pull requests in ********/my_hoge_project
Current branch
#15 Remove cupper area from LED pattern [dev]
Created by you
#15 Remove cupper area from LED pattern [dev]
Requesting a code review from you
You have no pull requests to review
マージ
では(個人用のレポジトリなので)いきなりレビューもせずにワイルドに先程のプルリクの内容をマージしてみましょう。 ブラウザでは以下のようになっています。

ではこれを早速マージしてみます。
マージするコマンドは
gh pr merge
$ gh pr merge
? What merge method would you like to use? [Use arrows to move, type to filter]
> Create a merge commit
Rebase and merge
Squash and merge
? Delete the branch locally and on GitHub? (y/N)
✔ Merged pull request #15 (Remove cupper area from LED pattern)
これでmainブランチにマージできました。

なお、
gh pr merge
-d, --delete-branch:
マージ後のローカルとリモートの現在のブランチを削除
(デフォルトではTrue)
-m, --merge:
ベースのブランチにコミットをマージ
-r, --rebase:
ベースのブランチにコミットをリベース
-s, --squash:
複数のコミットを一つのコミットにまとめた後で
ベースのブランチにマージ
デフォルトでは、マージした後のリモート&ローカルの開発ブランチは消去されます。
対話型にしないで作業ブランチを残したままマージする利用例を以下に挙げると、
$ gh pr merge --merge --delete-branch=false
#OR
$ gh pr merge -m -d=false
という感じに使えます。
なお、プルリクとマージの間には若干の時間を空けないといけませんので、以下のような連続のコマンドは失敗します。
$ gh pr create --fill && gh pr merge -m
#サーバー側からプルリク作業が終わっていないので
#マージまで時間を空けるような警告
まとめ
ghコマンドはこれまでブラウザ上で操作していた煩わしいマウス操作から解放してくれる素晴らしいツールだと思います。
効果的に使うことで、コードの開発効率も飛躍的に高まりますので、気になったらこれを機会に思い切って導入してみましょう。
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー