CUBE SUGAR CONTAINER

技術系のこと書きます。

Homebrew の GitHub API rate limit exceeded ... を回避する

ある日、Homebrew を使っていると以下のようなエラーに見舞われた。 なるほど組織などでプロキシを使ってインターネットにアクセスしていると、送信元 IP アドレスが同一になるため GitHub API の利用制限に引っかかりやすいようだ。

$ brew search direnv
direnv
Error: GitHub API rate limit exceeded for XXX.XXX.XXX.XXX. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)
Try again in 40 minutes 36 seconds, or create an personal access token:
  https://github.com/settings/tokens
and then set the token as: HOMEBREW_GITHUB_API_TOKEN

API の残り利用可能回数は以下のようにして調べることができる。 確かに、もう使うことができないようだ。 ちなみに、この利用回数の確認でも呼び出し回数を一回分消費する。

$ curl -sS -i https://api.github.com/users/whatever | grep X-RateLimit-Remaining:
X-RateLimit-Remaining: 0

GitHub API Token を作る

この問題を回避するには、エラーメッセージにもあるようにユーザで個別に専用の API Token を使ってやれば良い。

GitHub のユーザは既に作成済みであると仮定しておく。 まずは Settings 画面から Personal access tokens を選択して、Generate new token ボタンを押す。 f:id:momijiame:20151005023453p:plain

Token に適当な名前を付けて Generate token ボタンを押す。 f:id:momijiame:20151005023142p:plain

作成されたトークンをコピーする。 f:id:momijiame:20151005023151p:plain

トークンを環境変数に設定する

先ほどコピーしたトークンを、環境変数 HOMEBREW_GITHUB_API_TOKEN に設定する。 シェルの設定ファイル (.zshrc など) に入れておくと良い。

$ export HOMEBREW_GITHUB_API_TOKEN=XXX

トークンの残り API 利用回数は以下のようにして調べることができる。

$ curl -sS -i -H "Authorization: token XXX" https://api.github.com/users/whatever | grep X-RateLimit-Remaining:
X-RateLimit-Remaining: 4999

これで Homebrew コマンドの API 利用制限に引っかかることはもうないだろう。

$ brew search direnv
direnv

めでたしめでたし。