Composer並列化プラグイン #phpblt

19,982 views
31,825 views

Published on

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

Published in: Software
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
19,982
On SlideShare
0
From Embeds
0
Number of Embeds
15,045
Actions
Shares
0
Downloads
2
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

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

×