Help us understand the problem. What is going on with this article?

Composerの実行速度を高速化する方法

More than 3 years have passed since last update.

概要

今では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自体の更新
composer self-update

対策2 packagistのミラーサーバを日本国内のサーバに変更する

@Hiraku さんが作成された スライド によると遅い原因は主に下記の3つです。

  • packagist.orgが日本から遠い
  • composerのアーキテクチャ的に、小さなjsonファイルを少しずつダウンロードするため、ネットワークの遅延がもろに影響する
  • composerがfile_get_contentsでjsonをダウンロードしていて、どうやらKeep-Aliveを使っていないし、並列ダウンロードもしていない

そこでミラーサーバを @Hiraku さんが作成された日本国内のサーバに変更する事でダウンロードの高速化を図ります。

ミラーサーバをpackagist.jpに変更
$ composer config -g repos.packagist composer https://packagist.jp

もし元に戻したい時は、下記のコマンドを実行します。

ミラーサーバ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の実行速度で悩んでいる方は試してみる事をオススメします。

keitakn
フリーランスのWebエンジニア、 フロントエンド、バックエンド両方やります。🐱好きです🐱
https://github.com/keitakn/cv
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした