Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
what-is-composer-bin-plugin
Search
hideki kinjyo
PRO
April 24, 2019
Programming
3
1.6k
what-is-composer-bin-plugin
composer-bin-pluginが便利だったので触ってみました
hideki kinjyo
PRO
April 24, 2019
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
250
Composerの依存解決 #phpstudy
o0h
PRO
0
100
「影響が少ない」を自分の目でみてみる
o0h
PRO
3
1.6k
PHPによる"非"構造化プログラミング入門 -本当に熱いスパゲティコードを求めて- #phperkaigi
o0h
PRO
0
1.5k
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
23
5.1k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
10
3.6k
色んなオートローダーを覗き見る #phpcon_okinawa
o0h
PRO
5
650
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
3
340
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
4
650
Other Decks in Programming
See All in Programming
Webの外へ飛び出せ NativePHPが切り拓くPHPの未来
takuyakatsusa
2
530
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
200
Flutterで備える!Accessibility Nutrition Labels完全ガイド
yuukiw00w
0
160
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
3
450
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
600
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
700
PHPでWebSocketサーバーを実装しよう2025
kubotak
0
270
プロダクト志向ってなんなんだろうね
righttouch
PRO
0
180
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
21
3.9k
Goで作る、開発・CI環境
sin392
0
220
効率的な開発手段として VRTを活用する
ishkawa
0
110
AIともっと楽するE2Eテスト
myohei
0
170
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
Bash Introduction
62gerente
614
210k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
260
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Transcript
composer-bin-plugin を触ってみた話 ୈ137ճ PHPษڧձˏ౦ژ Hideki Kinjyo twitter: @o0h_ / github:
o0h
ࣗݾհ • ίωώτגࣜձࣾ • αʔόʔαΠυΤϯδχΞ • ओʹCakePHPͳͲ
(本題に⼊る前に)お約束
Oyakusoku phperkaigiのLTでは ドラを鳴らしてしまったので、 今⽇は時間を守るぞ!! (ご迷惑をおかけしました)
今⽇のお話
composer-bin-plugin
おしながき - [ ] みなさんComposer使っていますか - [ ] Composerを使っていて、 こんな「困った!」ありませんか
- [ ] composer-bin-pluginが そんな悩みを解決してくれるかもしれません
§1 みなさんComposer使っていま すか
この中で、 Composer使っているよ〜 という⽅は どのくらいいますか?
\は〜い/
たくさん いらっしゃいますね〜
- [x]みなさんComposer使っていますか 〜FIN〜
§2 Composerを使っていて、 こんな「困った!」ありませ んか
⾒覚えありませんか
依存パッケージの ver.のコンフリクト⾟い
composer利⽤時に (稀に)困るやつ • (⼤体において) semantic versioningに則り “緩め”に指定されているので、 利⽤可能なバージョンが決定できるのだけど • たま〜にぶつかったりしますよね
vendor BBBYZ[dͩ͘ ͍͞ BBBYZ[?͍ͩ͘͞ つまり・・? package-a ͑ʔɺࠔΔʙკ package-b
vendor BBBYZ[dͩ͘ ͍͞ BBBYZ[?͍ͩ͘͞ つまり・・? package-a ͑ʔɺࠔΔʙკ package-b 名前解決可能な形に ファイルを配置・共存できない
vendor BBBYZ[dͩ͘ ͍͞ BBBYZ[?͍ͩ͘͞ つまり・・? package-a ͑ʔɺࠔΔʙკ package-b composerがタジタジしちゃう!
せめて・・・ • (アプリケーション本体から利⽤されない) CLI利⽤想定のツールについては • php-cs-fixerとか rectorとか • もっとストレスフリーに利⽤したい・・!
という時に、 composer-bin-plugin
- [x]Composerを使っていて、 こんな「困った!」ありませんか 〜FIN〜
§3 composer-bin-pluginが そんな悩みを解決してくれる かもしれません
composer-bin-plugin • • `vendor`ディレクトリを 複数扱えるようにしてくれるユーティリティ • virtualenv的な • 例えば「phpcs⽤のvendor」「phpmd⽤の vendor」などが組める
vendor 0,ʂ vendor BBBYZ[dͩ͘ ͍͞ つまり・・? BBBYZ[?͍ͩ͘͞ package-b package-a vendor
0, BBBYZ[͍ͩ͘͞ package-c 0,ʂ
vendor 0,ʂ vendor BBBYZ[dͩ͘ ͍͞ つまり・・? 0,ʂ BBBYZ[?͍ͩ͘͞ package-b package-a
vendor 0, BBBYZ[͍ͩ͘͞ package-c ⽤途ごとに 「vendor dir」「composer.lock」を 掘ってしまえ、という発想
使い⽅ • Install (global) • composer global require bamarni/composer-bin-plugin •
Install (in-project) • composer require --dev bamarni/composer-bin-plugin
使い⽅ • Usage • `Composer [global] bin $任意の名前空間名 command `
• composer global bin cs require friendsofphp/php- cs-fixer rector/rector
使い⽅ • Usage • `Composer [global] bin $任意の名前空間名 command `
• composer global bin cs require friendsofphp/php- cs-fixer rector/rector • これで「cs」という隔離された名前空間に php-cs-fixerとrectorが設置される
実際の様⼦ ~/.composer $ tree -L 2 vendor-bin vendor-bin └── cs
├── composer.json ├── composer.lock └── vendor • `vendor-bin` の下に `cs` ディレクトリが掘られている
実際の様⼦ $ 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
実際の様⼦ • 実⾏ファイルは(defaultだと) vendorディレクトリ下にsymlinkが貼られる =「いつもみたいな感じ☆」で使える!! $ ls vendor/bin pdepend php-parse
phpcs phpmetrics psysh php-cs-fixer phpcbf phpmd phpstan rector
こんなとこも 気が利いていました • 特殊な名前 `all` => vendor-binに⼊っているものを⼀括操作 • composer bin
all install • composer bin all update • `bin/` 下のsymlinkが衝突したら ⾃動で作成を省略してくれるみたい
どうやって動いているの? • https://github.com/bamarni/composer-bin- plugin/blob/v1.3.0/src/BinCommand.php#L104 をざっくり⾒た感じだと • 名前空間に対応したディレクトリに移動して • 「普通にComposer.json(lock)を読みとる (`Factory
::getComposerFile()`)」ように振る舞う
- [x]composer-bin-pluginが そんな悩みを解決してくれるかもしれません 〜FIN〜
まとめ! • あくまで`bin-plugin`なので、 局所的な⽤途想定になるかなーという所感 (vendorにおくもの、vendor-binに置くものを分ける) • 逆に⾔うと 「アプリケーションコード」が「CLI⽤のコマンド」の依存に 煩わされなくなる・・! •
初めて知った時の「便利そう!!」と 中⾝を⾒た時の「単純!!!」というギャップが⾯⽩かった
͓͖߹͍͍͖ͨͩ ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ
参考リンク • Packagist https://packagist.org/packages/bamarni/ composer-bin-plugin • 私が知ったキッカケの記事 https://www.dereuromark.de/2018/03/14/ cakephp-3-6-is-coming/