概要
今ではPHPの開発に欠かせないツールとなった Composer ですがパッケージのダウンロードを含む動作が遅いので改善する方法をまとめました。
対策1 Composerのバージョンを1.3.0以上に更新する
※この対策はxdebugがインストールされた環境下でないと効果はありません。
xdebugをインストールしたphpで Composer を使うとパフォーマンスが低下して以下の警告が出ます。
You are running composer with xdebug enabled. This has a major impact on runtime performance.
もし今使っている Composer のバージョンが1.2.X系であれば1.3.X系にバージョンアップする事をオススメします。
Composer 1.3.0 - https://github.com/composer/composer/blob/1.3.0/CHANGELOG.md
Fixed ext-xdebug not being require-able anymore due to automatic xdebug disabling
こちらにあるように1.3.0以降のバージョンは Composer 実行時に自動的にxdebugを無効化しパフォーマンスの低下を防いでくれます。
※1.2.X系の時はComposer 利用時にxdebugを無効化する事でパフォーマンスの低下を防いでいました。
ちなみにcomposer自体の更新は下記のコマンドで実行出来ます。
composer self-update
対策2 packagistのミラーサーバを日本国内のサーバに変更する
@Hiraku さんが作成された スライド によると遅い原因は主に下記の3つです。
- packagist.orgが日本から遠い
- composerのアーキテクチャ的に、小さなjsonファイルを少しずつダウンロードするため、ネットワークの遅延がもろに影響する
- composerがfile_get_contentsでjsonをダウンロードしていて、どうやらKeep-Aliveを使っていないし、並列ダウンロードもしていない
そこでミラーサーバを @Hiraku さんが作成された日本国内のサーバに変更する事でダウンロードの高速化を図ります。
$ composer config -g repos.packagist composer https://packagist.jp
もし元に戻したい時は、下記のコマンドを実行します。
$ composer config -g --unset repos.packagist
対策3 Composerプラグインによる高速化
こちら で紹介されている、prestissimoというcomposerプラグインを利用する方法です。
これは対策2のところで原因に記載した下記の問題を解消する為のプラグインのようです。
composerがfile_get_contentsでjsonをダウンロードしていて、どうやらKeep-Aliveを使っていないし、並列ダウンロードもしていない
インストール方法に関しては hirak/prestissimo に記載してあります。
ちなみにこのプラグインも@Hiraku さんが作者のようです。
素晴らしいツールを作成して頂き、ありがとうございます。
まとめ
対策1〜3を実施する事によってComposerを高速化する事が出来ました。
特に対策2, 3の効果は非常に大きいと感じています。
Composerの実行速度で悩んでいる方は試してみる事をオススメします。