Edited at

GitHubのリポジトリを一覧化する(public/private両対応)


目的・概要

リポジトリがたくさんある組織・ユーザーで、リポジトリの一覧を作るためにリポジトリ名だけの出力をしたいときに使える方法です。

ぐぐってみるとワンライナーなどが結構引っかかりますが、publicのみだったり100件以内を前提としていたりしました。本記事では、手順ふたつに分かれてしまいますが、以下の場合でも対応できます。


  • リポジトリの数が100以上存在する

  • privateリポジトリを含む

リポジトリをリストアップしたい動機はそんなに定期的にあるものではないので、事前準備少なく実行できる手順としています。


手順


  1. GitHub APIからリポジトリ情報一式を取得

  2. レスポンスデータの整形・抽出


1. GitHub APIからリポジトリ情報一式を取得

[username]には、GitHubのアカウント名を入れてください。そうすれば、取得前にパスワード入力を求められ、その後Privateリポジトリも含め情報を取得できます。

以下では組織(Organization)単位で書いていますが、ユーザーに紐づくリポジトリ一覧を取得したいときは、orgs/[organizationname]users/[username]としてください。これらの[organiationname][username]は実際に取得する対象の名前に置き換えてください。

$ curl -u [username] "https://api.github.com/orgs/[organizationname]/repos?per_page=100&page=1" > repos1

保存するファイル名はrepos1としています。なんでもいいのですが、手順2で整形・抽出するときにファイル名を指定しやすいようにしてもらえればOKです。

私が抽出した対象のリポジトリは100以上ありましたので、一度実行したあと、URL内のpage=1page=2にし、ファイル名をrepos2にしてもう一度実行します。


2. レスポンスデータの整形・抽出

(2019/5/10追記)

コメントにて、jqを利用した方がスクリプトを書かなくてよい分楽だということを教えていただきましたので、本章を書き直します。

コメントではパイプを使ってワンライナー化する方法で書かれていますが、GitHub APIの仕様上、一度に取得できるリポジトリ数が100なので、repos1, repos2を保存済みの状態という前提で以下記載します。

レスポンスデータ(JSON)を整形・抽出するには、jqコマンドを使うとお手軽です。

以下では、リポジトリ名のみを抽出して列挙する例です。

cat repos1 repos2 | jq -r .[].name


参考リンク