GitHub API v3 でプライベートリポジトリの情報が取れない問題の解決方法

GitHub API v3 を使っているときに、プライベートリポジトリの情報が取得できない問題の解決方法についてです。

問題

Personal access token を取得して GitHub API v3 (REST API) でリポジトリの情報を取得しようとすると、プライベートなリポジトリの情報が返ってきません。 パブリックなリポジトリの情報は問題なく取得できるので、トークンそのものが invalid というわけではありません。

原因

API アクセストークンのアクセススコープの設定の問題です。 デフォルトではプライベートリポジトリへのアクセスが無いようになっていたりするので、適切に変更する必要があります。

解決方法

API アクセストークンのアクセススコープの設定を変更すれば OK です。

API アクセストークンのスコープは Developer settings の Personal access tokens で変更することができます。 対象の Personal access token の設定ページを開き、 repo: Full control of private repositories の項目にチェックを入れて保存しましょう。

GitHub Personal access token repo scope setting

保存後は無事プライベートリポジトリの情報にもアクセスできるようになります。

1 つ注意点があって、この項目にチェックを入れると所属組織のリポジトリ情報なども返ってくるようになるので、必要の無いリポジトリ情報についてはデータをフェッチした後にプログラムの側で除外するなどの対応をする必要があります。 また、安全面を考えると、下層のスコープのうち利用しないものについてはチェックを外すなどして、万が一の際のリスクを小さくする工夫もしておくのがよいものと思います。

ちなみに、私の手元で確認はしていませんが、新しい GitHub API v4 (GraphQL) の方でも v3 と同じ形になるものと思います。