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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
hideki kinjyo
PRO
April 24, 2019
Programming
3
1.7k
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
#phperbiglt のLT
o0h
PRO
0
58
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
210
symfony/mcp-bundleで、既存アプリケーションもお手軽にMCPサーバー化
o0h
PRO
1
92
組織もソフトウェアも難しく考えない、もっとシンプルな考え方で設計する #phpconfuk
o0h
PRO
10
5.4k
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
660
Composerの依存解決 #phpstudy
o0h
PRO
0
160
「影響が少ない」を自分の目でみてみる
o0h
PRO
4
2.3k
PHPによる"非"構造化プログラミング入門 -本当に熱いスパゲティコードを求めて- #phperkaigi
o0h
PRO
0
1.8k
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
23
5.4k
Other Decks in Programming
See All in Programming
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
370
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
690
Fragmented Architectures
denyspoltorak
0
150
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
170
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
230
「ブロックテーマでは再現できない」は本当か?
inc2734
0
970
Patterns of Patterns
denyspoltorak
0
1.4k
CSC307 Lecture 01
javiergs
PRO
0
690
CSC307 Lecture 04
javiergs
PRO
0
660
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
560
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
100
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
200
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Test your architecture with Archunit
thirion
1
2.2k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
180
RailsConf 2023
tenderlove
30
1.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
380
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Everyday Curiosity
cassininazir
0
130
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
How to Think Like a Performance Engineer
csswizardry
28
2.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/