コマンドでGitHubリポジトリ一覧を取得する

リポジトリ一覧取得のコマンドが[GitHub CLI](https://cli.github.com)に追加されていることに気づき、便利そうと思ったので使い方を共有しておきます。
GitHub CLIをご存知ない方は、以下の記事が参考になると思います。

https://qiita.com/ryo2132/items/2a29dd7b1627af064d7b

GitHub CLIのインストールやアップデート方法の詳細は以下参照。
https://github.com/cli/cli#installation

また、GitHub CLIは先月末(2021/8末)にメジャーアップして[v2.0.0](https://github.com/cli/cli/releases/tag/v2.0.0)になっているので、他にも探してみると便利機能が追加されているかもしれません。

# リポジトリ一覧取得の方法

```
$ gh repo list
```

以下のように、リポジトリ名、説明、private/public/fork、最終更新日時、が一覧されます。
デフォルトでは認証しているアカウントのリポジトリ一覧が30個まで表示されます。
リポジトリ名がわかれば`gh repo clone <repository>`でコマンドだけでcloneできますね。

```
Showing 30 of 51 repositories in @inayuky

inayuky/ruby-sampler                    Ruby sample programs                                                   private       2m
inayuky/js-sampler                      JavaScript sample programs                                             private       29m
inayuky/terraform-qiita-search          Terraform template for QiitaSearch                                     public        23h
inayuky/circleci-sampler-awscli-001                                                                            private       5d
inayuky/webstorm-react-work                                                                                    private       7d
inayuky/sample_app                                                                                             private       7d
inayuky/terraform-fess-sample           Terraform template to start Fess on EC2                                public        12d
inayuky/toy-app                                                                                                private       19d
inayuky/hello_app                                                                                              private       21d
inayuky/terraform-sampler               Terraform sample programs                                              private       Aug  8, 2021
inayuky/docker-fess                     Docker files for Fess                                                  public, fork  May 29, 2021
・
・
・
```

引数を指定すれば、他アカウントのpublicリポジトリ一覧も取得できます。

```
$ gh repo list increments

Showing 30 of 69 repositories in @increments

increments/graphql-kaminari_connection           Kaminari based GraphQL pagination                             public                  1d
increments/textcomplete                          Autocomplete for HTMLTextAreaElement and more.                public, fork            10d
increments/qiita-markdown                        Qiita-specified markdown processor.                           public                  15d
increments/greenmat                              The Markdown parser for Qiita, based on Redcarpet.            public, fork            15d
increments/qiitan-rb                             A template to create and deploy your ruboty on slack.         public, fork            May 17, 2021
increments/increments-schedule                   Everything about Increments' schedule                         public                  May 17, 2021
increments/chef-td-agent                         Chef Cookbook for td-agent (Treasure Agent or Fluentd)        public, fork            Mar 23, 2021
increments/circleci-coverage_reporter                                                                          public                  Oct  8, 2020
increments/js_rails_routes                       Generate a ES6 module that contains Rails routes              public                  Mar  9, 2020
increments/mastodon                              Mastodon for Qiita users                                      public, fork            Mar  4, 2020
・
・
・
```

# オプション

```
USAGE
  gh repo list [<owner>] [flags]

FLAGS
      --archived          Show only archived repositories
      --fork              Show only forks
  -q, --jq expression     Filter JSON output using a jq expression
      --json fields       Output JSON with the specified fields
  -l, --language string   Filter by primary coding language
  -L, --limit int         Maximum number of repositories to list (default 30)
      --no-archived       Omit archived repositories
      --private           Show only private repositories
      --public            Show only public repositories
      --source            Show only non-forks
  -t, --template string   Format JSON output using a Go template
      --topic string      Filter by topic
```

よく使いそうなオプションの使用例を列挙しておきます。

## publicリポジトリのみ
```
$ gh repo list --public
```

## privateリポジトリのみ
```
$ gh repo list --private
```

## 最大表示数変更(デフォルトは30個まで表示)
```
$ gh repo list -L 1000
```

## リポジトリ名のみをJSONで出力する
```
$ gh repo list --json name
```

## リポジトリ名のみを出力する
```
$ gh repo list --json name --jq '.[].name'
```

--jqオプションがあるので、別途jqコマンドは不要なようです。
なお、--jqは--jsonとの併用が必須。

## リポジトリ名のみを名前順にソートして出力する
```
$ gh repo list --json name --jq '.[].name' | sort
```

デフォルトだと最終更新日順に並ぶようなので、アルファベット順に並べる。

# 参考

- GitHub CLI Manual
  - https://cli.github.com/manual/

- 該当のissueとプルリク
  - https://github.com/cli/cli/issues/642
  - https://github.com/cli/cli/pull/2953