tokenを聞かれFuelPHP 1.7.3がうまくインストールできない場合

(2016-03-02 追記) 「2016年FuelPHP 1.xのインストール方法のベストプラクティス」を書きました。

FuelPHP 1.7.3をインストールしようとすると以下のようにトークンを聞かれることがあります。

Could not fetch https://api.github.com/repos/fuel/auth/git/refs/heads?per_page=100, please create a GitHub OAuth token to go over the API rate limit
Head to https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+<servername>+2015-06-26+0933
to retrieve a token. It will be stored in "/home/<username>/.composer/auth.json" for future use by Composer.
Token (hidden): 

はじめてこのようなメッセージを見ると、なんでインストールするのにトークンが必要なの?と疑問に思うことでしょう。

この理由は、GitHub APIのレート制限に引っかかり、GitHub APIに匿名でアクセスできなくなったためです。

つまり、FuelPHPがどうのという問題ではなく、GitHubの問題です。

GitHub APIのレート制限?

GitHub APIなんか知らないよ。俺はだたFuelPHPをインストールしたいだけなんだ、と思う人もいることと思います。

これは、ComposerがダウンロードのためにGitHub APIを使っているということです。

Composerのドキュメントにもこのことについて記述されています。

つまり、FuelPHPだからこうなるというものではなく、GitHub APIのレート制限なのでいつでもどんなパッケージでも起こりうることです。

匿名でのアクセスは現在1時間に60回です。これはIPアドレス単位で制限されます。

レート制限の状態は以下のようにGitHub APIにリクエストを送ればわかります。

$ curl -i https://api.github.com/users/whatever

例えば、以下のような結果が返ります。

HTTP/1.1 403 Forbidden
Server: GitHub.com
Date: Fri, 26 Jun 2015 00:34:18 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 257
Status: 403 Forbidden
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1435281388
X-GitHub-Media-Type: github.v3
X-XSS-Protection: 1; mode=block
X-Frame-Options: deny
Content-Security-Policy: default-src 'none'
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
Access-Control-Allow-Origin: *
X-GitHub-Request-Id: DB5EF43C:6D1D:E6F2EE8:558C9E0A
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
X-Content-Type-Options: nosniff

{
  "message": "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.)",
  "documentation_url": "https://developer.github.com/v3/#rate-limiting"
}

ここで、以下のヘッダから制限は、1時間に60回で残り0回、この制限がリセットされる時間はUnix時間で1435281388であることがわかります。

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1435281388

対処方法

対処方法は、メッセージに書かれているのですが、GitHubのOAuthトークンを作成しComposerに設定することです。

please create a GitHub OAuth token to go over the API rate limit

つまり、匿名アクセスをやめてGitHubに身元を明らかにするということです。

トークンの作成はメッセージに表示されるURLにアクセスすればすぐにできます。

https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+<servername>+2015-06-26+0933

GitHubアカウント持ってないんだけど?

しかし、トークンを作成するにはGitHubアカウントが必要です。GitHubアカウントを持っていない場合は、GitHubアカウントを作成するか、レート制限がリセットされるまで待つしかありません。

制限がリセットされるまで待つのはあんまりなので、Zipファイルからインストールするという方法もあるのですが、あいにく現在の公式のZipファイルはcomposer updateするとエラーになるという問題があります(それ以外の動作に問題は生じませんが)。

そこで、修正したZipファイルを作成しました。

(16:25 追記) 公式のZipファイルが更新され、上記の問題は修正されましたので、以下のZipを使う必要はなくなりました。

  • http://fuelphp1st.com/downloads/fuelphp-1.7.3-fixed.zip

関連

Date: 2015/06/26

Tags: fuelphp, composer