what-is-composer-bin-plugin
by
hideki kinjyo
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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/