Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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をコミット...
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/compos...
黒歴史
composer本体改善の壁
• 通信周りの 機能が多い上、分割されていなくて再実装するしか
ない
• proxy, github, gitlabの認証対応
• ダウンロード進 の表示
• ユーザー名パスワードを入力させてリトライ
• degr...
と思ってたらこんな話が
composerプラグインで

curl化できるらしい…
プラグインなら本体に

マージされなくても

試してもらえる

実績も積める
どうせなら

並列ダウンロードも

できるんじゃね?
(できた)
hirak/prestissimo
インストール簡単
• composer global require hirak/prestissimo

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

って打つとアンインストー...
prestissimoとは
• composerプラグイン。globalインストールすることで以下の機能を付与する
• curl_multiでの並列zipダウンロード。並列数はカスタマイズ可能

プラグイン側で先に並列ダウンロードしてキャッシュ...
デモ
人柱募集
• 認証の再実装部分が不安
• 使ってバグ出ししてくれ!!
• プラグインで実績積んで、安定性が認められ
たら本体にマージを提案する計画です
• https://github.com/hirak/prestissimo
参考文献
• http://qiita.com/ngyuki/items/
03f9c6ce0f0db18ace94
• https://github.com/ngyuki/composer-curl-
plugin
• https://get...
Composer並列化プラグイン #phpblt
Upcoming SlideShare
Loading in …5
×

Composer並列化プラグイン #phpblt

28,988 views

Published on

composerのzipダウンロードを並列化するプラグインを作りました。

Published in: Software
  • Be the first to comment

Composer並列化プラグイン #phpblt

  1. 1. composer並列化
 プラグイン @Hiraku
  2. 2. 自己紹介 • 中野 拓 (@Hiraku) • 口癖「composerが遅い」
 packagistのミラー作った https://packagist.jp • 2015/12からメルカリで働いています。
  3. 3. 俺 俺
  4. 4. 使ってね!
  5. 5. composerは どこが遅いのか?
  6. 6. composer update で
 実行される処理 1. パッケージ情報取得 2. 依存関係の解析 3. zipダウンロード
  7. 7. 1. パッケージ情報取得が遅い • packagist.orgが日本から遠いことが原因 • 解決策: • ミラーを作る (https://packagist.jp )
 本家に許可取ったので合法になった • composer.lockをコミットしておき、
 composer installだけ行う
  8. 8. 2. 依存解決が遅い • (実はそれほど遅くない) • 解決策: • PHPを速くする(PHP7、HHVMを使う) • 良いCPUを使う
  9. 9. 3. zipダウンロードが遅い • github.com からzipをダウンロードする作業 • github.comが遠いのと、file_get_contentsが アホの子(コネクション毎回捨てる) • zipごとミラーするのは大変、良い解決策がな かった
  10. 10. packagist遅い 依存解決 ダウンロードが
 遅い composer update ミラーを参照する PHP7を使う 遅い composer.lock
 + composer install (処理スキップ) (処理スキップ) 遅い
  11. 11. 本体にパッチを当てるか… • curlを使えってP-Rは何個か出てる • https://github.com/composer/composer/issues/ 704 • https://github.com/composer/composer/pull/3636 • https://github.com/composer/composer/pull/2696 • 後方互換性の担保でいつも頓挫する
  12. 12. 黒歴史
  13. 13. composer本体改善の壁 • 通信周りの 機能が多い上、分割されていなくて再実装するしか ない • proxy, github, gitlabの認証対応 • ダウンロード進 の表示 • ユーザー名パスワードを入力させてリトライ • degradedMode (IPv4強制?) • これで互換性保つのは確かに面倒くさい
  14. 14. と思ってたらこんな話が
  15. 15. composerプラグインで
 curl化できるらしい…
  16. 16. プラグインなら本体に
 マージされなくても
 試してもらえる
 実績も積める
  17. 17. どうせなら
 並列ダウンロードも
 できるんじゃね?
  18. 18. (できた)
  19. 19. hirak/prestissimo
  20. 20. インストール簡単 • composer global require hirak/prestissimo
 って打つと組み込まれる • composer global remove hirak/prestissimo
 って打つとアンインストールできる • 有効になってればcomposer update, composer installなどで勝手に効力を発揮する
  21. 21. prestissimoとは • composerプラグイン。globalインストールすることで以下の機能を付与する • curl_multiでの並列zipダウンロード。並列数はカスタマイズ可能
 プラグイン側で先に並列ダウンロードしてキャッシュを暖める • GitHub API制限緩和(api.github.comを極力叩かない) • Keep-Alive有効化(HTTPSでも遅くならないよ) • 互換性担保、速くなること以外はcomposerの動作に影響を与えない • 「超速く演奏しろ」の意味でプレスティッシモと命名
  22. 22. デモ
  23. 23. 人柱募集 • 認証の再実装部分が不安 • 使ってバグ出ししてくれ!! • プラグインで実績積んで、安定性が認められ たら本体にマージを提案する計画です • https://github.com/hirak/prestissimo
  24. 24. 参考文献 • http://qiita.com/ngyuki/items/ 03f9c6ce0f0db18ace94 • https://github.com/ngyuki/composer-curl- plugin • https://getcomposer.org/doc/articles/ plugins.md#event-handler

×