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.5k
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
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
17
4.1k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
8
2.5k
色んなオートローダーを覗き見る #phpcon_okinawa
o0h
PRO
5
570
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
3
290
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
4
570
SPLから始める「データ構造」入門
o0h
PRO
7
1.9k
PHPUnit11の新しい仲間たち
o0h
PRO
3
430
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
62
21k
パンフ記事 「初めてのリファクタリング!」 の裏側 #phperkaigi
o0h
PRO
2
180
Other Decks in Programming
See All in Programming
LINE messaging APIを使ってGoogleカレンダーと連携した予約ツールを作ってみた
takumakoike
0
120
仕様変更に耐えるための"今の"DRY原則を考える
mkmk884
9
3.2k
バッチを作らなきゃとなったときに考えること
irof
2
530
Go 1.24でジェネリックになった型エイリアスの紹介
syumai
2
290
color-scheme: light dark; を完全に理解する
uhyo
7
490
CDK開発におけるコーディング規約の運用
yamanashi_ren01
2
260
未経験でSRE、はじめました! 組織を支える役割と軌跡
curekoshimizu
1
160
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.5k
データの整合性を保つ非同期処理アーキテクチャパターン / Async Architecture Patterns
mokuo
55
19k
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
240
Honoのおもしろいミドルウェアをみてみよう
yusukebe
1
230
DRFを少しずつ オニオンアーキテクチャに寄せていく DjangoCongress JP 2025
nealle
2
270
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.3k
Bootstrapping a Software Product
garrettdimon
PRO
306
110k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Making Projects Easy
brettharned
116
6k
Git: the NoSQL Database
bkeepers
PRO
427
65k
Practical Orchestrator
shlominoach
186
10k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
It's Worth the Effort
3n
184
28k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
How to Think Like a Performance Engineer
csswizardry
22
1.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
Building an army of robots
kneath
303
45k
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/