what-is-composer-bin-plugin
by
hideki kinjyo
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
composer-bin-plugin を触ってみた話 ୈ137ճ PHPษڧձˏ౦ژ Hideki Kinjyo twitter: @o0h_ / github: o0h
Slide 2
Slide 2 text
ࣗݾհ • ίωώτגࣜձࣾ • αʔόʔαΠυΤϯδχΞ • ओʹCakePHPͳͲ
Slide 3
Slide 3 text
(本題に⼊る前に)お約束
Slide 4
Slide 4 text
Oyakusoku phperkaigiのLTでは ドラを鳴らしてしまったので、 今⽇は時間を守るぞ!! (ご迷惑をおかけしました)
Slide 5
Slide 5 text
今⽇のお話
Slide 6
Slide 6 text
composer-bin-plugin
Slide 7
Slide 7 text
おしながき - [ ] みなさんComposer使っていますか - [ ] Composerを使っていて、 こんな「困った!」ありませんか - [ ] composer-bin-pluginが そんな悩みを解決してくれるかもしれません
Slide 8
Slide 8 text
§1 みなさんComposer使っていま すか
Slide 9
Slide 9 text
この中で、 Composer使っているよ〜 という⽅は どのくらいいますか?
Slide 10
Slide 10 text
\は〜い/
Slide 11
Slide 11 text
たくさん いらっしゃいますね〜
Slide 12
Slide 12 text
- [x]みなさんComposer使っていますか 〜FIN〜
Slide 13
Slide 13 text
§2 Composerを使っていて、 こんな「困った!」ありませ んか
Slide 14
Slide 14 text
⾒覚えありませんか
Slide 15
Slide 15 text
依存パッケージの ver.のコンフリクト⾟い
Slide 16
Slide 16 text
composer利⽤時に (稀に)困るやつ • (⼤体において) semantic versioningに則り “緩め”に指定されているので、 利⽤可能なバージョンが決定できるのだけど • たま〜にぶつかったりしますよね
Slide 17
Slide 17 text
vendor BBBYZ[dͩ͘ ͍͞ BBBYZ[?͍ͩ͘͞ つまり・・? package-a ͑ʔɺࠔΔʙკ package-b
Slide 18
Slide 18 text
vendor BBBYZ[dͩ͘ ͍͞ BBBYZ[?͍ͩ͘͞ つまり・・? package-a ͑ʔɺࠔΔʙკ package-b 名前解決可能な形に ファイルを配置・共存できない
Slide 19
Slide 19 text
vendor BBBYZ[dͩ͘ ͍͞ BBBYZ[?͍ͩ͘͞ つまり・・? package-a ͑ʔɺࠔΔʙკ package-b composerがタジタジしちゃう!
Slide 20
Slide 20 text
せめて・・・ • (アプリケーション本体から利⽤されない) CLI利⽤想定のツールについては • php-cs-fixerとか rectorとか • もっとストレスフリーに利⽤したい・・!
Slide 21
Slide 21 text
という時に、 composer-bin-plugin
Slide 22
Slide 22 text
- [x]Composerを使っていて、 こんな「困った!」ありませんか 〜FIN〜
Slide 23
Slide 23 text
§3 composer-bin-pluginが そんな悩みを解決してくれる かもしれません
Slide 24
Slide 24 text
composer-bin-plugin • • `vendor`ディレクトリを 複数扱えるようにしてくれるユーティリティ • virtualenv的な • 例えば「phpcs⽤のvendor」「phpmd⽤の vendor」などが組める
Slide 25
Slide 25 text
vendor 0,ʂ vendor BBBYZ[dͩ͘ ͍͞ つまり・・? BBBYZ[?͍ͩ͘͞ package-b package-a vendor 0, BBBYZ[͍ͩ͘͞ package-c 0,ʂ
Slide 26
Slide 26 text
vendor 0,ʂ vendor BBBYZ[dͩ͘ ͍͞ つまり・・? 0,ʂ BBBYZ[?͍ͩ͘͞ package-b package-a vendor 0, BBBYZ[͍ͩ͘͞ package-c ⽤途ごとに 「vendor dir」「composer.lock」を 掘ってしまえ、という発想
Slide 27
Slide 27 text
使い⽅ • Install (global) • composer global require bamarni/composer-bin-plugin • Install (in-project) • composer require --dev bamarni/composer-bin-plugin
Slide 28
Slide 28 text
使い⽅ • Usage • `Composer [global] bin $任意の名前空間名 command ` • composer global bin cs require friendsofphp/php- cs-fixer rector/rector
Slide 29
Slide 29 text
使い⽅ • Usage • `Composer [global] bin $任意の名前空間名 command ` • composer global bin cs require friendsofphp/php- cs-fixer rector/rector • これで「cs」という隔離された名前空間に php-cs-fixerとrectorが設置される
Slide 30
Slide 30 text
実際の様⼦ ~/.composer $ tree -L 2 vendor-bin vendor-bin └── cs ├── composer.json ├── composer.lock └── vendor • `vendor-bin` の下に `cs` ディレクトリが掘られている
Slide 31
Slide 31 text
実際の様⼦ $ tree -L 2 vendor-bin vendor-bin ├── cs │ ├── composer.json │ ├── composer.lock │ └── vendor └── metrics ├── composer.json ├── composer.lock └── vendor • 別に`metrics` 空間を掘ってみると・・? • composer global bin metrics require phpmetrics/phpmetrics
Slide 32
Slide 32 text
実際の様⼦ • 実⾏ファイルは(defaultだと) vendorディレクトリ下にsymlinkが貼られる =「いつもみたいな感じ☆」で使える!! $ ls vendor/bin pdepend php-parse phpcs phpmetrics psysh php-cs-fixer phpcbf phpmd phpstan rector
Slide 33
Slide 33 text
こんなとこも 気が利いていました • 特殊な名前 `all` => vendor-binに⼊っているものを⼀括操作 • composer bin all install • composer bin all update • `bin/` 下のsymlinkが衝突したら ⾃動で作成を省略してくれるみたい
Slide 34
Slide 34 text
どうやって動いているの? • https://github.com/bamarni/composer-bin- plugin/blob/v1.3.0/src/BinCommand.php#L104 をざっくり⾒た感じだと • 名前空間に対応したディレクトリに移動して • 「普通にComposer.json(lock)を読みとる (`Factory ::getComposerFile()`)」ように振る舞う
Slide 35
Slide 35 text
- [x]composer-bin-pluginが そんな悩みを解決してくれるかもしれません 〜FIN〜
Slide 36
Slide 36 text
まとめ! • あくまで`bin-plugin`なので、 局所的な⽤途想定になるかなーという所感 (vendorにおくもの、vendor-binに置くものを分ける) • 逆に⾔うと 「アプリケーションコード」が「CLI⽤のコマンド」の依存に 煩わされなくなる・・! • 初めて知った時の「便利そう!!」と 中⾝を⾒た時の「単純!!!」というギャップが⾯⽩かった
Slide 37
Slide 37 text
͓͖߹͍͍͖ͨͩ ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ
Slide 38
Slide 38 text
参考リンク • Packagist https://packagist.org/packages/bamarni/ composer-bin-plugin • 私が知ったキッカケの記事 https://www.dereuromark.de/2018/03/14/ cakephp-3-6-is-coming/