Github CLIを使ってコマンドラインからイシュー、プルリクを検索、表示してみる

Bash,Github,Zsh

はじめに

今年の2月に公開されたばかりの Github CLI というコマンドラインツールについて使ってみたので紹介してみます。

今までは hubコマンド を使っていましたが、話題になっているぐらいなので比較して有用性が高いはず、と思って使ってみました。

EC-CUBEのGithubリポジトリのイシューを覗き見することが最近何度かあったため、イシューを検索、表示してみたいと思います。

検証環境

$ uname -moi
x86_64 MacBookPro11,4 Darwin

$ zsh --version
zsh 5.8 (x86_64-apple-darwin18.7.0)

インストール

Macはかんたんですね。

今日現在、公式ページには以下のコマンドでインストールできるとありました。

$ brew install github/gh/gh

セットアップ

$ gh issue list

初めてコマンドを実行する場合は、 Github CLI がGithubAPIを呼び出すための権限を付与する必要があるようです。
以下のメッセージが表示されます。

Notice: authentication required
Press Enter to open github.com in your browser...

Enter キーを押すとブラウザが起動し、以下のようなページが表示されます。

Github CLI のアクセスを許可します。

実行結果はというと、自分用のプライベートリポジトリに対して実行したため、そもそも issude が存在せず何も表示されませんでした。

There are no open issues in genzouw/bin

改めて別のリポジトリで実行してみることにします。

$ git clone git://github.com/EC-CUBE/ec-cube.git
Cloning into 'ec-cube'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 273474 (delta 3), reused 5 (delta 0), pack-reused 273461
Receiving objects: 100% (273474/273474), 130.05 MiB | 1.51 MiB/s, done.
Resolving deltas: 100% (194894/194894), done.
hub clone git://github.com/EC-CUBE/ec-cube.git  8.80s user 3.79s system 13% cpu 1:30.63 total

# 移動
$ cd ec-cube

イシューの一覧表示

$ gh issue list

Showing 30 of 288 issues in EC-CUBE/ec-cube

#4498  eccube_max_total_feeを超える価格のもの...  (bug:Low)                                  about 2 days ago
#4497  Customizeディレクトリ配下にも Doctrine...  (Status: discussion, enhancement)          about 10 days ago
#4494  WhereCustomizer にて WhereClause で AN...  (affected:plugin)                          about 11 days ago
#4493  docker環境使用時 画像処理時にErrorになる                                              about 11 days ago
#4492  管理画面のテンプレートのアップロードペ...  (affected:admin_template)                  about 11 days ago
#4491  プラグインからのPurchaseFlowカスタマイ...  (question)                                 about 11 days ago
#4488  [API] GraphQLでDateTimeを取得するとエ...                                              about 17 days ago
#4487  商品購入/ご注文確認に「閉じspan」だけ...   (affected:template, bug:Low)               about 18 days ago
#4486  購入時の在庫数処理を改善したい             (Status: discussion)                       about 18 days ago
#4484  受注CSV、配送CSVにおいて「お届け時間ID...  (affected:外部仕様, bug:Low)               about 18 days ago
#4480  商品一覧とお気に入り一覧のデザインが違う   (css)                                      about 18 days ago
#4478  ご注文履歴詳細で注文概要ボックスがスク...  (bug:Low)                                  about 29 days ago
#4476  dtb_product_stockとdtb_product_classの...  (Status: discussion)                       about 1 month ago
#4475  税率設定の適用日時エラーメッセージが設...  (bug:Low)                                  about 1 month ago
#4473  管理画面の各ページで「登録」ボタンが何...                                             about 1 month ago
#4470  Docker環境でxdebugを簡単に使用できるよ...                                             about 1 month ago
#4469  商品CSV出力時の区切り文字を変更                                                       about 1 month ago
#4467  規格2まである商品をカートに追加後、ブ...  (bug:Low)                                  about 1 month ago
#4466  カートに追加できなくてもブラウザバック...  (bug:Low)                                  about 1 month ago
#4458  【EC-CUBE4】リンク型決済において、購入...  (bug:Middle)                               about 1 month ago
#4457  Chrome80のSameSiteの影響で3Dセキュア等...  (bug:Critical)                             about 1 month ago
#4456  デザインテンプレートのインストール時の...  (improvement)                              about 1 month ago
#4447  Web API仕様                                (Status: discussion, affected:外部仕様...  about 1 month ago
#4445  dtb_customer の排他制御                    (bug:Middle)                               about 1 month ago
#4435  大量データによりCSVのダウンロードメモ...   (bug:Low)                                  about 1 month ago
#4428  【EC-CUBE4】コンテンツ管理>ページ管理...  (improvement)                              about 2 months ago
#4427  Oracle Database対応について                (Status: discussion, enhancement)          about 3 months ago
#4426  売上状況が9時間ずれる問題                  (bug:Low)                                  about 2 months ago
#4420  定休日管理・カレンダーを4.0系に移植        (Status: discussion, enhancement)          about 3 months ago
#4416  Safariで管理画面から認証キーを発行でき...  (bug)                                      about 3 months ago

ちなみに出力される内容は以下のようにカラーリングされていて見やすいです。

デフォルトで30件表示されます。

表示件数を変更

デフォルトの30件から変更してみます。

5件 表示してみます。

$ gh issue list --limit 5

Showing 5 of 288 issues in EC-CUBE/ec-cube

#4498  eccube_max_total_feeを超える価格のもの...   (bug:Low)                          about 2 days ago
#4497  Customizeディレクトリ配下にも DoctrineM...  (Status: discussion, enhancement)  about 10 days ago
#4494  WhereCustomizer にて WhereClause で AND...  (affected:plugin)                  about 11 days ago
#4493  docker環境使用時 画像処理時にErrorになる                                       about 11 days ago
#4492  管理画面のテンプレートのアップロードペ...   (affected:admin_template)          about 11 days ago

今度は 35件 表示してみます。

$ gh issue list --limit 35

Showing 35 of 288 issues in EC-CUBE/ec-cube

#4498  eccube_max_total_feeを超える価格のもの...  (bug:Low)                                  about 2 days ago
#4497  Customizeディレクトリ配下にも Doctrine...  (Status: discussion, enhancement)          about 10 days ago
#4494  WhereCustomizer にて WhereClause で AN...  (affected:plugin)                          about 11 days ago
#4493  docker環境使用時 画像処理時にErrorになる                                              about 11 days ago
#4492  管理画面のテンプレートのアップロードペ...  (affected:admin_template)                  about 11 days ago
#4491  プラグインからのPurchaseFlowカスタマイ...  (question)                                 about 11 days ago
#4488  [API] GraphQLでDateTimeを取得するとエ...                                              about 17 days ago
#4487  商品購入/ご注文確認に「閉じspan」だけ...   (affected:template, bug:Low)               about 18 days ago
#4486  購入時の在庫数処理を改善したい             (Status: discussion)                       about 18 days ago
#4484  受注CSV、配送CSVにおいて「お届け時間ID...  (affected:外部仕様, bug:Low)               about 18 days ago
#4480  商品一覧とお気に入り一覧のデザインが違う   (css)                                      about 18 days ago
#4478  ご注文履歴詳細で注文概要ボックスがスク...  (bug:Low)                                  about 29 days ago
#4476  dtb_product_stockとdtb_product_classの...  (Status: discussion)                       about 1 month ago
#4475  税率設定の適用日時エラーメッセージが設...  (bug:Low)                                  about 1 month ago
#4473  管理画面の各ページで「登録」ボタンが何...                                             about 1 month ago
#4470  Docker環境でxdebugを簡単に使用できるよ...                                             about 1 month ago
#4469  商品CSV出力時の区切り文字を変更                                                       about 1 month ago
#4467  規格2まである商品をカートに追加後、ブ...  (bug:Low)                                  about 1 month ago
#4466  カートに追加できなくてもブラウザバック...  (bug:Low)                                  about 1 month ago
#4458  【EC-CUBE4】リンク型決済において、購入...  (bug:Middle)                               about 1 month ago
#4457  Chrome80のSameSiteの影響で3Dセキュア等...  (bug:Critical)                             about 1 month ago
#4456  デザインテンプレートのインストール時の...  (improvement)                              about 1 month ago
#4447  Web API仕様                                (Status: discussion, affected:外部仕様...  about 1 month ago
#4445  dtb_customer の排他制御                    (bug:Middle)                               about 1 month ago
#4435  大量データによりCSVのダウンロードメモ...   (bug:Low)                                  about 1 month ago
#4428  【EC-CUBE4】コンテンツ管理>ページ管理...  (improvement)                              about 2 months ago
#4427  Oracle Database対応について                (Status: discussion, enhancement)          about 3 months ago
#4426  売上状況が9時間ずれる問題                  (bug:Low)                                  about 2 months ago
#4420  定休日管理・カレンダーを4.0系に移植        (Status: discussion, enhancement)          about 3 months ago
#4416  Safariで管理画面から認証キーを発行でき...  (bug)                                      about 3 months ago
#4413  商品規格登録画面での規格選択時の選択肢...  (improvement)                              about 3 months ago
#4411  URLからuser_data消す                                                                  about 3 months ago
#4408  アップデートでcustomize.js/customize.c...  (affected:template, css, improvement)      about 3 months ago
#4402  dtb_cart に該当会員のカート情報が存在...   (Status: discussion, Status: needs-rev...  about 3 months ago
#4399  Symfony 4.4 への対応                       (enhancement)                              about 3 months ago

どこまで表示できるかと思って試してみたところ、どうやらすべてのイシューまで表示できそうです。

$ gh issue list --limit 500 | wc -l

Showing 288 of 288 issues in EC-CUBE/ec-cube

288

「作成者」で絞り込み

僕( Githubアカウントは genzouw)が上げたイシューがあったかな?と思い検索してみました。

--author genzouw で、 genzouw さんがあげたイシューを検索できます。

$ gh issue list --author genzouw

Showing 1 of 1 issue in EC-CUBE/ec-cube that matches your search

#4390  masterブランチを作成し、defaultブランチとして設定してほしい。  (improvement)  about 3 months ago

3ヶ月前にイシューを上げていたみたいですね。そんな記憶もあるような無いような。

ちなみに、自分が作成したイシュー、あるいは自分がアサインされているイシューは git issue status コマンドでも検索できます。(というかこっちのほうが見やすい。)

$ gh issue status

Relevant issues in EC-CUBE/ec-cube

Issues assigned to you
  #4390  masterブランチを作成し、defaultブランチとして設定してほしい。  (improvement)  about 3 months ago

Issues mentioning you
  There are no issues mentioning you

Issues opened by you
  #4390  masterブランチを作成し、defaultブランチとして設定してほしい。  (improvement)  about 3 months ago

「ステータス」で絞り込み

イシューのステータスで絞り込むこともできます。

--state closed とすると、クローズしたイシューが表示されます。
ステータスには open / closed / all の3つが指定できます。デフォルトは open のみなので、全て表示させたい場合は明示的に --state all オプションを付与するひつようがあります。

$ gh issue list --limit 5 --state closed

Showing 5 of 1101 issues in EC-CUBE/ec-cube that match your search

#4463  4.0.2から4.0.3にアップデートするとシステムエラーになる                            (bug:High)     about 1 month ago
#4461  `Doctrine\DBAL\Types` を拡張している Symfony bundle を利用するとエラーが発生する  (bug:Low)      about 10 days ago
#4450  管理画面受注一覧 入金日(終了)のラベル間違い                                       (bug:Low)      about 1 month ago
#4448  管理画面商品一覧の件数を変更すると受注一覧の件数も変更される                      (bug:Low)      about 1 month ago
#4443  不要な?FormTypeクラスが存在しているため、見直し検討してもらいたい                (bug:Low)      about 1 month ago

「ラベル」で絞り込み

イシューに割り当てられている「ラベル」で絞り込みできます。

$ gh issue list --limit 10 --label 'bug:Low'

Showing 10 of 39 issues in EC-CUBE/ec-cube that match your search

#4498  eccube_max_total_feeを超える価格のものを...   (bug:Low)                     about 2 days ago
#4487  商品購入/ご注文確認に「閉じspan」だけ残っ...  (affected:template, bug:Low)  about 18 days ago
#4484  受注CSV、配送CSVにおいて「お届け時間ID」...   (affected:外部仕様, bug:Low)  about 18 days ago
#4478  ご注文履歴詳細で注文概要ボックスがスクロ...   (bug:Low)                     about 29 days ago
#4475  税率設定の適用日時エラーメッセージが設定...   (bug:Low)                     about 1 month ago
#4467  規格2まである商品をカートに追加後、ブラ...   (bug:Low)                     about 1 month ago
#4466  カートに追加できなくてもブラウザバック時...   (bug:Low)                     about 1 month ago
#4435  大量データによりCSVのダウンロードメモリオ...  (bug:Low)                     about 1 month ago
#4426  売上状況が9時間ずれる問題                     (bug:Low)                     about 2 months ago
#4369  ルート以下のディレクトリにインストールし...   (bug:Low)                     about 5 months ago

利用されているラベルを把握しておかないと検索できないので素人にはおすすめできないかもしれません。

使われている頻度の高いラベルを確認するコマンドも掲載しておきます。

# 使われている頻度の高いラベルを確認
$ gh issue list --state all --limit 1000 \
  | cut -f3 \
  | grep -o '[^ ,]\+' \
  | sort \
  | uniq -c \
  | sort -nr

Showing 1000 of 1389 issues in EC-CUBE/ec-cube that match your search

    455 enhancement
    324 bug
     51 bug:Low
     50 bug:Middle
     49 Status:
     48 discussion
     40 question
     40 documentation
     29 experimental
     27 duplicate
     17 軽減税率対応
     14 bug:High
      7 worksforme
      6 wontfix
      6 improvement
      5 affected:plugin
      5 Easy
      2 …
      2 affected:admin_template
      1 needs-review
      1 affected:外部仕様

たまに日本語が混じっています。

イシューの詳細表示

gh issue list を使って確認したイシューの一覧について、詳細を確認してみます。

$ gh issue list --limit 3

Showing 3 of 288 issues in EC-CUBE/ec-cube

#4498  eccube_max_total_feeを超える価格のもの...   (bug:Low)                          about 2 days ago
#4497  Customizeディレクトリ配下にも DoctrineM...  (Status: discussion, enhancement)  about 10 days ago
#4494  WhereCustomizer にて WhereClause で AND...  (affected:plugin)                  about 11 days ago

1件目の #4498 について詳細表示してみます。

gh issue view <ISSUE_NO> コマンドを使います。

$ gh issue view 4498
eccube_max_total_feeを超える価格のものをカートに入れるとInvalidArgumentExceptionが発生する
opened by yoshiaki-natsume. 0 comments. (bug:Low)

  ## 概要(Overview)

  カートに金額が大きい商品を入れると500エラーが発生します

  stacktraceは以下の内容になります

    InvalidArgumentException:
    Entity has to be managed or scheduled for removal for single computation
  Eccube\Entity\CartItem@00000000711c8f360000000061f5e310

  ...省略

やはり外コマンド同様、カラーリングされていて見やすいです。

イシューの内容は大概長いので、 less コマンドで繋がてやるのが良いでしょう。カラーリングも保持されたままで見やすいです。

$ gh issue view 4498 | less

ブラウザで表示する

やっぱり詳細内容はブラウザで開いてみたいよね、という場合には、 先のコマンドに --web オプションを付与します。

$ gh issue view 4498 --web
Opening https://github.com/EC-CUBE/ec-cube/issues/4498 in your browser.

面倒くさかったのでコマンドラインの実行履歴から前回のコマンドを呼び出して、後ろに --web をつけましたが問題なく動作しました。

そもそも git clone 必要なの?

はじめに git clone して、イシュー検索の対象リポジトリをクローンしてきました。
実はこちら、不要です。

--repo オプションを付与すれば対象リポジトリを指定できます。
--repo オプションがない場合には、カレントプロジェクトを対象リポジトリとして利用するということですね。

$ pwd
/Users/genzouw

$ gh issue list --limit 3
fatal: not a git repository (or any of the parent directories): .git
git: exit status 128

$ gh issue list --repo EC-CUBE/ec-cube --limit 3

Showing 3 of 288 issues in EC-CUBE/ec-cube

#4498  eccube_max_total_feeを超える価格のもの...   (bug:Low)                          about 2 days ago
#4497  Customizeディレクトリ配下にも DoctrineM...  (Status: discussion, enhancement)  about 10 days ago
#4494  WhereCustomizer にて WhereClause で AND...  (affected:plugin)                  about 11 days ago

プルリクエストの一覧表示、詳細表示もイシューとほぼ同様

プルリクエストの一覧表示、詳細表示も今まで見てきたものと同様です。
issuepr になっただけです。)

# 一覧表示
$ gh pr list

Showing 17 of 17 pull requests in EC-CUBE/ec-cube

#4496  Customizeディレクトリでもservices.yamlが定義できるように機能拡張                                              okazy:feat/load-customize-config
#4495  TemplateEventからTwigのコードが取れない不具合を修正                                                           kiy0taka:fix/get_code_in_template_event
#4490  【fix】受注登録画面の利用ポイント(use_point)フォームのバリデーションをrequire=trueに修正                      huwamoko6210:use_point_validation_fix
#4485  管理画面ダッシュボードの売り上げ状況をイベントでのカスタマイズした際の、数値とグラフの集計ロジックを合わせる  okazy:fix-admin_index_sales_event
#4483  eccube:composer:require-already-installedコマンドで404エラーが発生するのを修正                                kiy0taka:fix/require-already-installed-404
#4479  インストール直後の税率を8から10に変更。                                                                       genzouw:hotfix/change_default_tax_rule
#4472  fix save and close btn in admin/shipping, /admin/product/product/new,…                                       kifr:fix_save_and_close_btn
#4468  fix #4466 「カートに追加しました」とメッセージが表示される不具合を修正                                        U-Mebius:fix/modal
#4465  管理画面トップ 売上状況が9時間ずれる問題修正                                                                  U-Mebius:fix/admin/sales
#4455  ログイン失敗するとお気に入り登録できない問題の修正                                                            U-Mebius:fix/login/_target_path
#4452  注文手続き中に税率が変更された場合の反映                                                                      U-Mebius:fix/shopping/product_tax
#4440  メールテンプレートを新規登録/削除できるようにする                                                             oywc410:4398
#4433  ページ管理の編集対象に会員登録(確認ページ)を加える #4428                                                      oywc410:4428
#4412  URLからuser_data消す                                                                                          tao-s:delete-user_data
#4409  [WIP] Symfony4.4 対応                                                                                         nanasess:improve/symfony4.4
#4349  商品画像アップロード時のリサイズ処理                                                                          Rights1995:4.0_rs
#4199  商品CSVに削除済みの商品規格が含まれる #4190                                                                   yusukeito58:issue4190

# 3件のみ表示
$ gh pr list --limit 3

Showing 3 of 17 pull requests in EC-CUBE/ec-cube

#4496  Customizeディレクトリでもservices.yamlが定義できるように機能拡張                          okazy:feat/load-customize-config
#4495  TemplateEventからTwigのコードが取れない不具合を修正                                       kiy0taka:fix/get_code_in_template_event
#4490  【fix】受注登録画面の利用ポイント(use_point)フォームのバリデーションをrequire=trueに修正  huwamoko6210:use_point_validation_fix

# マージ済みのプルリクエストを3件表示
$ gh pr list --limit 3 --state merged

Showing 3 of 2633 pull requests in EC-CUBE/ec-cube that match your search

#4489  互換性のためにEccube\Twig\Environmentクラスは残す                    kiy0taka:dev/revert_twig_env
#4482  CustomerTypeTestのテストの判定が間違っていたので修正                 okazy:fix_customer-type-test
#4481  管理画面のデフォルトのID/Passwordの設定例を.env.distに追加           okazy:add-admin-info-to-env

# #4489のプルリクエストを詳細表示
$ gh pr view 4489
互換性のためにEccube\Twig\Environmentクラスは残す
kiy0taka wants to merge 1 commit into 4.0 from dev/revert_twig_env

  ## 概要(Overview・Refs Issue)

  https://github.com/EC-CUBE/ec-cube/pull/4362 の修正で  Eccube\Twig\Environment
  は不要になったが、プラグインやカスタマイズで使われていので、互換性保持のためにクラスは残す。

  ## 方針(Policy)

  今後利用する場合は、 Twig\Environment  を推奨。

  ## 実装に関する補足(Appendix)

  ## テスト(Test)

  ## 相談(Discussion)

  ## マイナーバージョン互換性保持のための制限事項チェックリスト

  [✓] 既存機能の仕様変更
  [✓] フックポイントの呼び出しタイミングの変更
  [✓] フックポイントのパラメータの削除・データ型の変更
  [✓] twigファイルに渡しているパラメータの削除・データ型の変更
  [✓] Serviceクラスの公開関数の、引数の削除・データ型の変更
  [✓] 入出力ファイル(CSVなど)のフォーマット変更

  ## レビュワー確認項目

  [✓] 動作確認
  [✓] コードレビュー
  [✓] E2E/Unit テスト確認(テストの追加・変更が必要かどうか)
  [✓] 互換性が保持されているか
  [✓] セキュリティ上の問題がないか

View this pull request on GitHub: https://github.com/EC-CUBE/ec-cube/pull/4489

やはりこちらもカラーリング表示されるため見やすい。

Github上のリポジトリページをブラウザで開く

地味に便利です。
やはりブラウザのほうが見やすかったり、開発に明るくないメンバと話をするときにGithubページを開いて一緒に見ながら話をしたりしたい場合もあります。

# カレントディレクトリのGithubリポジトリをブラウザで開く
$ gh repo view -w

ひとこと

今回は取り上げていませんが、リポジトリの作成、クローン、フォークもできます。
プライベートリポジトリ作成も無料化されてから、僕はBitbucketからGithubに完全移行しました。

Bash,Github,Zsh