GitHub API を触ってみた

GitHub のアカウント名を変更したので、各リポジトリ内で持っていた旧アカウント名の情報を新アカウント名に変更しようと思った。

しかし、GitHub リポジトリのページをイチイチ開いて、git clone する URL をコピーして…といった操作を全リポジトリでやらないといけないのは面倒だった。

そこで少し調べてみると、GitHub API というモノで GitHub 上の色々な情報が取得できるようだと判明。早速試してみる。

目次

基本的な使い方・curl について

まずはトップページの「Overview」より、基本的な叩き方を見てみる。

$ curl https://api.github.com

ターミナルで curl コマンドを利用し、api.github.com を叩くと、JSON データが取得できるはずだ。curl コマンドは「Client for URLs」の略で、「cURL」プロジェクトで作成されているコマンドだ。「see URL」とかけて「シー・ユーアルエル」と呼んでも良いようだが、公式では「カール」と呼んでいるそうだ。

リポジトリ一覧を取得してみる

今回は自分のリポジトリの全量を取得できれば良いかなーと思ったので、「List user repositories」を見てみた。

これによると、以下のような URL を作れば良いようだ。

$ curl https://api.github.com/users/Neos21/repos

コレで何やらリポジトリ情報が配列で取れたので、git clone で使える URL を探して、grep で拾ってみた。

$ curl -sS https://api.github.com/users/Neos21/repos | grep 'clone_url'
    "clone_url": "https://github.com/Neos21/about.git",
    # 以下略…
    "clone_url": "https://github.com/Neos21/practice-node-js.git",

-sS というオプションは、プログレスメーターの表示を切り (-s) つつ、エラーは出力する (-S) ようにするモノ。

全件取れていない…ページネーションの仕組み

コレで全量取れたか?と思いきや、これだとどうも30件分しかリポジトリ情報が返ってきていない。僕のアカウントは40リポジトリくらいは持っているので、明らかに少ない。

そこで GitHub API のページを読み直していると、「Pagination」なる項目があることに気付いた。

これによると、GitHub API は、こうした一覧系の情報を返す時に「ページャ」の概念を持っていて、何もオプションを指定しないと最初の30件分しか返してくれないようなのだ。

全量取得するには、

いずれかを選べば良い。

今回は一気に取得したかったので、以下のように per_page パラメータを付けることにした。

$ curl -sS https://api.github.com/users/Neos21/repos?per_page=100 | grep 'clone_url'
    "clone_url": "https://github.com/Neos21/about.git",
    # 以下略…
    "clone_url": "https://github.com/Neos21/windows-batch-scripts.git",

コレで OK。全リポジトリのデータが取れた。

あとはこの URL 群を適当に整形して利用するだけ。


curl 面白いなぁ〜、GitHub API 楽ちんだなぁ〜、と思いました、まる。