Composer並列化プラグイン #phpblt

25
composer並列化 プラグイン @Hiraku

Transcript of Composer並列化プラグイン #phpblt

composer並列化 プラグイン@Hiraku

自己紹介

• 中野 拓 (@Hiraku)

• 口癖「composerが遅い」packagistのミラー作った https://packagist.jp

• 2015/12からメルカリで働いています。

使ってね!

composerは どこが遅いのか?

composer update で実行される処理1. パッケージ情報取得

2. 依存関係の解析

3. zipダウンロード

1. パッケージ情報取得が遅い

• packagist.orgが日本から遠いことが原因

• 解決策:

• ミラーを作る (https://packagist.jp ) 本家に許可取ったので合法になった

• composer.lockをコミットしておき、composer installだけ行う

2. 依存解決が遅い

• (実はそれほど遅くない)

• 解決策:

• PHPを速くする(PHP7、HHVMを使う)

• 良いCPUを使う

3. zipダウンロードが遅い

• github.com からzipをダウンロードする作業

• github.comが遠いのと、file_get_contentsがアホの子(コネクション毎回捨てる)

• zipごとミラーするのは大変、良い解決策がなかった

packagist遅い 依存解決 ダウンロードが遅い

composer update ミラーを参照する PHP7を使う 遅い

composer.lock+

composer install

(処理スキップ) (処理スキップ) 遅い

本体にパッチを当てるか…

• curlを使えってP-Rは何個か出てる

• https://github.com/composer/composer/issues/704

• https://github.com/composer/composer/pull/3636

• https://github.com/composer/composer/pull/2696

• 後方互換性の担保でいつも頓挫する

黒歴史

composer本体改善の壁

• 通信周りの謎機能が多い上、分割されていなくて再実装するしかない

• proxy, github, gitlabの認証対応

• ダウンロード進捗の表示

• ユーザー名パスワードを入力させてリトライ

• degradedMode (IPv4強制?)

• これで互換性保つのは確かに面倒くさい

と思ってたらこんな話が

composerプラグインでcurl化できるらしい…

プラグインなら本体にマージされなくても試してもらえる実績も積める

どうせなら並列ダウンロードもできるんじゃね?

(できた)

hirak/prestissimo

インストール簡単

• composer global require hirak/prestissimo って打つと組み込まれる

• composer global remove hirak/prestissimo って打つとアンインストールできる

• 有効になってればcomposer update,

composer installなどで勝手に効力を発揮する

prestissimoとは

• composerプラグイン。globalインストールすることで以下の機能を付与する

• curl_multiでの並列zipダウンロード。並列数はカスタマイズ可能プラグイン側で先に並列ダウンロードしてキャッシュを暖める

• GitHub API制限緩和(api.github.comを極力叩かない)

• Keep-Alive有効化(HTTPSでも遅くならないよ)

• 互換性担保、速くなること以外はcomposerの動作に影響を与えない

• 「超速く演奏しろ」の意味でプレスティッシモと命名

デモ

人柱募集

• 認証の再実装部分が不安

• 使ってバグ出ししてくれ!!

• プラグインで実績積んで、安定性が認められたら本体にマージを提案する計画です

• https://github.com/hirak/prestissimo

参考文献

• http://qiita.com/ngyuki/items/03f9c6ce0f0db18ace94

• https://github.com/ngyuki/composer-curl-plugin

• https://getcomposer.org/doc/articles/plugins.md#event-handler