$30 off During Our Annual Pro Sale. View Details »
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
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
170
symfony/mcp-bundleで、既存アプリケーションもお手軽にMCPサーバー化
o0h
PRO
1
46
組織もソフトウェアも難しく考えない、もっとシンプルな考え方で設計する #phpconfuk
o0h
PRO
10
4.9k
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
600
Composerの依存解決 #phpstudy
o0h
PRO
0
150
「影響が少ない」を自分の目でみてみる
o0h
PRO
3
1.9k
PHPによる"非"構造化プログラミング入門 -本当に熱いスパゲティコードを求めて- #phperkaigi
o0h
PRO
0
1.8k
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
23
5.3k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
9
4.2k
Other Decks in Programming
See All in Programming
AIコーディングエージェント(Gemini)
kondai24
0
200
堅牢なフロントエンドテスト基盤を構築するために行った取り組み
shogo4131
8
2.3k
ゲームの物理 剛体編
fadis
0
320
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.5k
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
120
認証・認可の基本を学ぼう後編
kouyuume
0
180
Microservices rules: What good looks like
cer
PRO
0
1.1k
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
230
SwiftUIで本格音ゲー実装してみた
hypebeans
0
110
Integrating WordPress and Symfony
alexandresalome
0
140
関数実行の裏側では何が起きているのか?
minop1205
1
680
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
140
Featured
See All Featured
Speed Design
sergeychernyshev
33
1.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.8k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Site-Speed That Sticks
csswizardry
13
990
Building Adaptive Systems
keathley
44
2.9k
What's in a price? How to price your products and services
michaelherold
246
12k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Become a Pro
speakerdeck
PRO
31
5.7k
Context Engineering - Making Every Token Count
addyosmani
9
490
Measuring & Analyzing Core Web Vitals
bluesmoon
9
700
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/