what-is-composer-bin-plugin

 what-is-composer-bin-plugin

composer-bin-pluginが便利だったので触ってみました

C90bac78c0fb61105cfd8239767f903d?s=128

hideki kinjyo

April 24, 2019
Tweet

Transcript

  1. composer-bin-plugin
 を触ってみた話 ୈ137ճ PHPษڧձˏ౦ژ Hideki Kinjyo twitter: @o0h_ / github:

    o0h
  2. ࣗݾ঺հ • ίωώτגࣜձࣾ • αʔόʔαΠυΤϯδχΞ • ओʹCakePHPͳͲ

  3. (本題に⼊る前に)お約束

  4. Oyakusoku phperkaigiのLTでは
 ドラを鳴らしてしまったので、
 今⽇は時間を守るぞ!!
 (ご迷惑をおかけしました)

  5. 今⽇のお話

  6. composer-bin-plugin

  7. おしながき - [ ] みなさんComposer使っていますか - [ ] Composerを使っていて、
 こんな「困った!」ありませんか

    - [ ] composer-bin-pluginが
 そんな悩みを解決してくれるかもしれません
  8. §1
 みなさんComposer使っていま すか

  9. この中で、
 Composer使っているよ〜
 という⽅は
 どのくらいいますか?

  10. \は〜い/

  11. たくさん
 いらっしゃいますね〜

  12. - [x]みなさんComposer使っていますか 〜FIN〜

  13. §2
 Composerを使っていて、
 こんな「困った!」ありませ んか

  14. ⾒覚えありませんか

  15. 依存パッケージの
 ver.のコンフリクト⾟い

  16. composer利⽤時に
 (稀に)困るやつ • (⼤体において) semantic versioningに則り
 “緩め”に指定されているので、
 利⽤可能なバージョンが決定できるのだけど • たま〜にぶつかったりしますよね

  17. vendor BBBYZ[dͩ͘ ͍͞ BBBYZ[?͍ͩ͘͞ つまり・・? package-a ͑ʔɺࠔΔʙკ package-b

  18. vendor BBBYZ[dͩ͘ ͍͞ BBBYZ[?͍ͩ͘͞ つまり・・? package-a ͑ʔɺࠔΔʙკ package-b 名前解決可能な形に
 ファイルを配置・共存できない

  19. vendor BBBYZ[dͩ͘ ͍͞ BBBYZ[?͍ͩ͘͞ つまり・・? package-a ͑ʔɺࠔΔʙკ package-b composerがタジタジしちゃう!

  20. せめて・・・ • (アプリケーション本体から利⽤されない)
 CLI利⽤想定のツールについては • php-cs-fixerとか rectorとか • もっとストレスフリーに利⽤したい・・!

  21. という時に、
 composer-bin-plugin


  22. - [x]Composerを使っていて、
 こんな「困った!」ありませんか 〜FIN〜

  23. §3
 composer-bin-pluginが
 そんな悩みを解決してくれる かもしれません

  24. composer-bin-plugin • • `vendor`ディレクトリを
 複数扱えるようにしてくれるユーティリティ • virtualenv的な • 例えば「phpcs⽤のvendor」「phpmd⽤の vendor」などが組める

  25. vendor 0,ʂ vendor BBBYZ[dͩ͘ ͍͞ つまり・・? BBBYZ[?͍ͩ͘͞ package-b package-a vendor

    0, BBBYZ[͍ͩ͘͞ package-c 0,ʂ
  26. vendor 0,ʂ vendor BBBYZ[dͩ͘ ͍͞ つまり・・? 0,ʂ BBBYZ[?͍ͩ͘͞ package-b package-a

    vendor 0, BBBYZ[͍ͩ͘͞ package-c ⽤途ごとに
 「vendor dir」「composer.lock」を
 掘ってしまえ、という発想
  27. 使い⽅ • Install (global) • composer global require bamarni/composer-bin-plugin •

    Install (in-project) • composer require --dev bamarni/composer-bin-plugin
  28. 使い⽅ • Usage • `Composer [global] bin $任意の名前空間名 command `

    • composer global bin cs require friendsofphp/php- cs-fixer rector/rector
  29. 使い⽅ • Usage • `Composer [global] bin $任意の名前空間名 command `

    • composer global bin cs require friendsofphp/php- cs-fixer rector/rector • これで「cs」という隔離された名前空間に
 php-cs-fixerとrectorが設置される
  30. 実際の様⼦ ~/.composer $ tree -L 2 vendor-bin vendor-bin └── cs

    ├── composer.json ├── composer.lock └── vendor • `vendor-bin` の下に `cs` ディレクトリが掘られている
  31. 実際の様⼦ $ 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
  32. 実際の様⼦ • 実⾏ファイルは(defaultだと)
 vendorディレクトリ下にsymlinkが貼られる
 =「いつもみたいな感じ☆」で使える!! $ ls vendor/bin pdepend php-parse

    phpcs phpmetrics psysh php-cs-fixer phpcbf phpmd phpstan rector
  33. こんなとこも
 気が利いていました • 特殊な名前 `all`
 => vendor-binに⼊っているものを⼀括操作 • composer bin

    all install • composer bin all update • `bin/` 下のsymlinkが衝突したら
 ⾃動で作成を省略してくれるみたい
  34. どうやって動いているの? • https://github.com/bamarni/composer-bin- plugin/blob/v1.3.0/src/BinCommand.php#L104 をざっくり⾒た感じだと • 名前空間に対応したディレクトリに移動して • 「普通にComposer.json(lock)を読みとる (`Factory

    ::getComposerFile()`)」ように振る舞う
  35. - [x]composer-bin-pluginが
 そんな悩みを解決してくれるかもしれません 〜FIN〜

  36. まとめ! • あくまで`bin-plugin`なので、
 局所的な⽤途想定になるかなーという所感
 (vendorにおくもの、vendor-binに置くものを分ける) • 逆に⾔うと
 「アプリケーションコード」が「CLI⽤のコマンド」の依存に
 煩わされなくなる・・! •

    初めて知った時の「便利そう!!」と
 中⾝を⾒た時の「単純!!!」というギャップが⾯⽩かった
  37. ͓෇͖߹͍͍͖ͨͩ
 ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

  38. 参考リンク • Packagist
 https://packagist.org/packages/bamarni/ composer-bin-plugin • 私が知ったキッカケの記事
 https://www.dereuromark.de/2018/03/14/ cakephp-3-6-is-coming/