[PHP]Composerのパフォーマンス向上のために行うべき6つの事

カテゴリ: composer

PHPのパッケージ管理はComposerの登場によって劇的に改善されましたが、Composerは依存関係を解決するのに非常に時間がかかり、パッケージインストール時にパフォーマンスの問題を引き起こすことが有ります。

Composerの性能向上に関するTIpsがhax0r(http://blog.hax0r.info/856)に紹介されていたので、日本語に訳してみました。


Composerは、時に、処理速度が遅いという評価を多く受けています。
これ以上速度のせいで苦しむ事にならないよう、以下の方法を通して速度を向上させると良いでしょう。

1点目:Composerの自己診断を利用する

composerにはdiagnoseというコマンドが存在します。diagnoseに関する説明は以下の通りです。

  • 誤動作が発生する場合、当該コマンド(diagnose)を使用して、問題の一般的な自動検査を行う。
  • 検査の後、その結果に基づいて改善が必要な部分を確認し、改善することができる。

参考: Composer使用時にエラーが発生したとき、最初に確認すること

2点目: 並列ダウンロードを助けてくれるprestissimoを使う

私たちのようにComposerの速度に苦しむ日本の開発者が、prestissimoというComposerプラグインを製作してくれています。このプラグインを使うことで、依存性パッケージのインストール時に、並列処理をサポートして速度を大幅に改善してくれます。

プラグインは、以下のコマンドを使用して、簡単にインストールすることができます。

composer global require hirak/prestissimo

以下のコマンドでBenchmarkしてみると、288秒->26秒と満足のいく結果を出してくれました。

composer create-project laravel/ laravel laravel1--no-progress--profile--prefer-dist

上記のパッケージを追加したのちに、installかupdateコマンドを実行すると、下記のように並列処理されていることを確認することができます。

$ composer update
    1/4:    http://packagist.org/p/provider-latest$fee645e58453403d5212d70302204c9f9b606d847ea55817c76d1117179c7e3c.json
    2/4:    http://packagist.org/p/provider-2017-07$d8b448d6582f0ee302c1aada4e0af1fbf8d5a6e8e93e8fd5d841f31eeaaeb8d4.json
    3/4:    http://packagist.org/p/provider-2016$a929eb9b103e9c74924c2816a3a8517709f19ef53b288fd781411f753ce858c6.json
    4/4:    http://packagist.org/p/provider-2017-10$239c045ffd99b94a264287b5994f24f7c8b965591552532b203126f21d3ef0a1.json
    Finished: success: 4, skipped: 0, failure: 0, total: 4

Loading composer repositories with package information

Updating dependencies (including require-dev)

3点目:最新のPHPとComposerを利用する

diagnoseコマンドを使って診断を行うと、最新バージョンのcomposerを使用するよう推奨されます。この場合、最新のComposerにアップデートしてみてください。

また、PHPについては、"本当に"最新のバージョンをするようにして下さい。PHPの7.xは5.xを比較して、非常に多くの改善が行われています。
より良いPHPの開発環境が必要な場合、必ず、最新バージョンのPHPを使用するよう推奨します。

ComposerもPHPで作成されているプログラムであるため、実行しているPHPバージョンによるパフォーマンス上の影響を受けます。

また、あえてPHP7を使わないという選択も良いです。Facebookにて作成されたPHP仮想マシンであるHHVMもお勧めです。
HHVMを使用する場合は、実行環境がPrebuild Packageをサポートするプラットフォームでは無いと、HHVM自体のビルドする必要が有るので非常に煩雑な作業となります。

4点目:Composerのオプションを活用する

Composerコマンドの--prefer-distオプションを使用することで性能を向上させる事ができます。

このオプションの説明について、Stackoverflowより抜粋したものを、以下に掲載します。

--prefer-dist and --prefer-source are the two options of composer which included in various documentations with a lack of proper explanation.
--prefer-dist would try to download and unzip archives of the dependencies using GitHub or another API when available. This is used for faster downloading of dependencies in most cases. It doesn't download the whole VCS history of the dependencies and it should be better cached. Also archives on GitHub could exclude some files you don't need for just using the dependency with .gitattributes exclude directive.

5点目:Packagistの場所を変更する

Composerが使用するpackagistのリポジトリを http://packagist.jp に設定することでパフォーマンスの向上が期待されます。

変更は下記のコマンドで行えます。

composer config -g repositories.packagist composer http://packagist.jp

(現在作業しているプロジェクトだけでなく)PC全体のグローバル設定を変更したい場合は、下記のコマンドを使用すればよいです。

composer config -g --unset repositories.packagist

6点目:Xdebugを無効化する

ComposerはXdebugの影響を大きく受けます。

もしXdebugを有効化している場合、下記のようなメッセージが出力されます。

$ composer update
You are running composer with xdebug enabled. 
This has a major impact on runtime performance. 
See https://getcomposer.org/xdebug

Composerのパフォーマンスのせいで、並々ならないイライラを募らせているかもしれません。

上記の6点の対処の中で、最も効果が高かったものは、当然ながら並列ダウンロードのプラグインの使用です。

Composerのremote repositoryを見ると、多くのパフォーマンス問題に苦労している姿を確認することができます。Composerは100パーセントPHPによって作成されたライブラリなので、PHPエンジンの性能が勝負になると思われます。上記の方法を通して、あなたのcomposer対する問題が解決することを望みます。

[CC BY-NC-ND 4.0]

こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。

PhpStormなど、JetBrainsの他IDEユーザにもおススメ!! 「IntelliJ IDEAハンズオン」