こんにちは!@riaf です。 今日は PHP BLT #1 ですね! (LTネタの仕込みもせずにこんな記事を書いていて良いのでしょうか)
弊社では、サービスの CI / デプロイ等に CircleCI を利用しています。
最近の PHP 開発では、Composer を使うことが多いと思うのですが、Symfony Components とかを使い始めると、依存するパッケージが多くなってしまって、CI 時の composer install
に思いの外時間がかかってしまうこと、ありますよね。
特に、頻繁にテストが行われるようになると、Composer が GitHub の API リミットに引っかかってしまい、アーカイブではなくソースコードを clone してリミットを回避するので、より時間がかかるようになってしまいます。
「どうにかしたいですよねー」という声が上がってきたので、「よーし、いっちょやってやろうじゃないですか」と、ちょっと工夫することで遅い時は 1 分程度かかってしまっていた composer install
がちょっと手を加えることで 5 秒程度で終わるようになりました。
ソースコード取得を回避する
まずは何より、GitHub からのパッケージ取得をアーカイブで行うようにします。 API リミットは、認証すれば格段に緩和されるので、これだけでも非常に効果があるかと思います。
GitHub の OAuth トークンを作って、CircleCI の Environment Variables ($GITHUB_OAUTH_TOKEN
) に設定しました。
circle.yml
には次のように記述しています。
dependencies: pre: - composer config -g github-oauth.github.com $GITHUB_OAUTH_TOKEN
composer ディレクトリをキャッシュに加える
さらに、日常的な CI では composer.lock
によってバージョンが確定している状態なので、これをキャッシュすることで、ネットワークアクセスをほぼ行わないようにすることができます。
dependencies: cache_directories: - ~/.composer/cache
どちらも、circle.yml
に少し変更を加えるだけですので、composer install
が遅くて困っている方は、ぜひ試してみてください ;p