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/