SlideShare a Scribd company logo
1 of 25
Download to read offline
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

More Related Content

What's hot

PHPデプロイツールの世界
PHPデプロイツールの世界PHPデプロイツールの世界
PHPデプロイツールの世界Yuuki Takezawa
 
今日から始めるLaravel
今日から始めるLaravel今日から始めるLaravel
今日から始めるLaravelMasaru Matsuo
 
Laravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るLaravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るinfinite_loop
 
Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみたJaeseop Jeong
 
LaravelとMVCの先へ
LaravelとMVCの先へLaravelとMVCの先へ
LaravelとMVCの先へYuuki Takezawa
 
vimプラグインでよりよい(ry
vimプラグインでよりよい(ryvimプラグインでよりよい(ry
vimプラグインでよりよい(rysoh335
 
〜laravel で学ぶ MVC
 〜laravel で学ぶ MVC 〜laravel で学ぶ MVC
〜laravel で学ぶ MVCmikakane
 
php開発で使うタスクランナー gulp
php開発で使うタスクランナー gulpphp開発で使うタスクランナー gulp
php開発で使うタスクランナー gulpYuuki Takezawa
 
PHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろうPHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろうTaiji INOUE
 
最近のPerlバイナリマネージャー Perl 編
最近のPerlバイナリマネージャー Perl 編最近のPerlバイナリマネージャー Perl 編
最近のPerlバイナリマネージャー Perl 編Tokuhiro Matsuno
 
Symfony勉強会#9 form
Symfony勉強会#9 formSymfony勉強会#9 form
Symfony勉強会#9 formYuichi Okada
 
V6 Interpreter (Nagoya Geek Bar 2011-05-02)
V6 Interpreter (Nagoya Geek Bar 2011-05-02)V6 Interpreter (Nagoya Geek Bar 2011-05-02)
V6 Interpreter (Nagoya Geek Bar 2011-05-02)7shi
 
HLSについて知っていることを話します
HLSについて知っていることを話しますHLSについて知っていることを話します
HLSについて知っていることを話しますMoriyoshi Koizumi
 
UnofficialCookingの紹介とRedmine本家への貢献
UnofficialCookingの紹介とRedmine本家への貢献UnofficialCookingの紹介とRedmine本家への貢献
UnofficialCookingの紹介とRedmine本家への貢献Yuuki Nara
 
Make
MakeMake
Makelnial
 
GitHubで見つかるFileMaker関連ソフトウェア
GitHubで見つかるFileMaker関連ソフトウェアGitHubで見つかるFileMaker関連ソフトウェア
GitHubで見つかるFileMaker関連ソフトウェアAtsushi Matsuo
 
Real World PHP in pixiv
Real World PHP in pixivReal World PHP in pixiv
Real World PHP in pixivKenta USAMI
 
Rails解説セミナー: Railsのアップグレード編
Rails解説セミナー: Railsのアップグレード編Rails解説セミナー: Railsのアップグレード編
Rails解説セミナー: Railsのアップグレード編Yohei Yasukawa
 
ライブストリーミングの基礎知識
ライブストリーミングの基礎知識ライブストリーミングの基礎知識
ライブストリーミングの基礎知識kumaryu
 
Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編Yohei Yasukawa
 

What's hot (20)

PHPデプロイツールの世界
PHPデプロイツールの世界PHPデプロイツールの世界
PHPデプロイツールの世界
 
今日から始めるLaravel
今日から始めるLaravel今日から始めるLaravel
今日から始めるLaravel
 
Laravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るLaravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作る
 
Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみた
 
LaravelとMVCの先へ
LaravelとMVCの先へLaravelとMVCの先へ
LaravelとMVCの先へ
 
vimプラグインでよりよい(ry
vimプラグインでよりよい(ryvimプラグインでよりよい(ry
vimプラグインでよりよい(ry
 
〜laravel で学ぶ MVC
 〜laravel で学ぶ MVC 〜laravel で学ぶ MVC
〜laravel で学ぶ MVC
 
php開発で使うタスクランナー gulp
php開発で使うタスクランナー gulpphp開発で使うタスクランナー gulp
php開発で使うタスクランナー gulp
 
PHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろうPHP x AWS でスケーラブルなシステムをつくろう
PHP x AWS でスケーラブルなシステムをつくろう
 
最近のPerlバイナリマネージャー Perl 編
最近のPerlバイナリマネージャー Perl 編最近のPerlバイナリマネージャー Perl 編
最近のPerlバイナリマネージャー Perl 編
 
Symfony勉強会#9 form
Symfony勉強会#9 formSymfony勉強会#9 form
Symfony勉強会#9 form
 
V6 Interpreter (Nagoya Geek Bar 2011-05-02)
V6 Interpreter (Nagoya Geek Bar 2011-05-02)V6 Interpreter (Nagoya Geek Bar 2011-05-02)
V6 Interpreter (Nagoya Geek Bar 2011-05-02)
 
HLSについて知っていることを話します
HLSについて知っていることを話しますHLSについて知っていることを話します
HLSについて知っていることを話します
 
UnofficialCookingの紹介とRedmine本家への貢献
UnofficialCookingの紹介とRedmine本家への貢献UnofficialCookingの紹介とRedmine本家への貢献
UnofficialCookingの紹介とRedmine本家への貢献
 
Make
MakeMake
Make
 
GitHubで見つかるFileMaker関連ソフトウェア
GitHubで見つかるFileMaker関連ソフトウェアGitHubで見つかるFileMaker関連ソフトウェア
GitHubで見つかるFileMaker関連ソフトウェア
 
Real World PHP in pixiv
Real World PHP in pixivReal World PHP in pixiv
Real World PHP in pixiv
 
Rails解説セミナー: Railsのアップグレード編
Rails解説セミナー: Railsのアップグレード編Rails解説セミナー: Railsのアップグレード編
Rails解説セミナー: Railsのアップグレード編
 
ライブストリーミングの基礎知識
ライブストリーミングの基礎知識ライブストリーミングの基礎知識
ライブストリーミングの基礎知識
 
Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編
 

Similar to Composer並列化プラグイン #phpblt

Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!Sotaro Omura
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3mganeko
 
20150317 firefox os勉強会
20150317 firefox os勉強会20150317 firefox os勉強会
20150317 firefox os勉強会Naoki Sekiguchi
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜Takashi Uemura
 
第8回 HoloLens 参考書 読書会
第8回 HoloLens 参考書 読書会第8回 HoloLens 参考書 読書会
第8回 HoloLens 参考書 読書会Masashi Eguchi
 

Similar to Composer並列化プラグイン #phpblt (7)

Composer
 Composer Composer
Composer
 
Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
 
20150317 firefox os勉強会
20150317 firefox os勉強会20150317 firefox os勉強会
20150317 firefox os勉強会
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
 
今さら聞けない人のためのGit超入門 OSC2018広島版
今さら聞けない人のためのGit超入門 OSC2018広島版今さら聞けない人のためのGit超入門 OSC2018広島版
今さら聞けない人のためのGit超入門 OSC2018広島版
 
第8回 HoloLens 参考書 読書会
第8回 HoloLens 参考書 読書会第8回 HoloLens 参考書 読書会
第8回 HoloLens 参考書 読書会
 

More from Hiraku Nakano

Scrutinizer CIでPHPも静的解析 #phpstudy
Scrutinizer CIでPHPも静的解析 #phpstudyScrutinizer CIでPHPも静的解析 #phpstudy
Scrutinizer CIでPHPも静的解析 #phpstudyHiraku Nakano
 
こわくない同時実行制御
こわくない同時実行制御こわくない同時実行制御
こわくない同時実行制御Hiraku Nakano
 
Xml builderの紹介
Xml builderの紹介Xml builderの紹介
Xml builderの紹介Hiraku Nakano
 

More from Hiraku Nakano (6)

Scrutinizer CIでPHPも静的解析 #phpstudy
Scrutinizer CIでPHPも静的解析 #phpstudyScrutinizer CIでPHPも静的解析 #phpstudy
Scrutinizer CIでPHPも静的解析 #phpstudy
 
JSON SchemaとPHP
JSON SchemaとPHPJSON SchemaとPHP
JSON SchemaとPHP
 
こわくない同時実行制御
こわくない同時実行制御こわくない同時実行制御
こわくない同時実行制御
 
pecl-AOPの紹介
pecl-AOPの紹介pecl-AOPの紹介
pecl-AOPの紹介
 
URLで遊ぼう
URLで遊ぼうURLで遊ぼう
URLで遊ぼう
 
Xml builderの紹介
Xml builderの紹介Xml builderの紹介
Xml builderの紹介
 

Composer並列化プラグイン #phpblt