$30 off During Our Annual Pro Sale. View Details »

what-is-composer-bin-plugin

 what-is-composer-bin-plugin

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

hideki kinjyo
PRO

April 24, 2019
Tweet

More Decks by hideki kinjyo

Other Decks in Programming

Transcript

  1. composer-bin-plugin

    を触ってみた話
    ୈ137ճ PHPษڧձˏ౦ژ
    Hideki Kinjyo
    twitter: @o0h_ / github: o0h

    View Slide

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

    View Slide

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

    View Slide

  4. Oyakusoku
    phperkaigiのLTでは

    ドラを鳴らしてしまったので、

    今⽇は時間を守るぞ!!

    (ご迷惑をおかけしました)

    View Slide

  5. 今⽇のお話

    View Slide

  6. composer-bin-plugin

    View Slide

  7. おしながき
    - [ ] みなさんComposer使っていますか
    - [ ] Composerを使っていて、

    こんな「困った!」ありませんか
    - [ ] composer-bin-pluginが

    そんな悩みを解決してくれるかもしれません

    View Slide

  8. §1

    みなさんComposer使っていま
    すか

    View Slide

  9. この中で、

    Composer使っているよ〜

    という⽅は

    どのくらいいますか?

    View Slide

  10. \は〜い/

    View Slide

  11. たくさん

    いらっしゃいますね〜

    View Slide

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

    View Slide

  13. §2

    Composerを使っていて、

    こんな「困った!」ありませ
    んか

    View Slide

  14. ⾒覚えありませんか

    View Slide

  15. 依存パッケージの

    ver.のコンフリクト⾟い

    View Slide

  16. composer利⽤時に

    (稀に)困るやつ
    • (⼤体において) semantic versioningに則り

    “緩め”に指定されているので、

    利⽤可能なバージョンが決定できるのだけど
    • たま〜にぶつかったりしますよね

    View Slide

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

    View Slide

  18. vendor
    BBBYZ[dͩ͘
    ͍͞
    BBBYZ[?͍ͩ͘͞
    つまり・・?
    package-a
    ͑ʔɺࠔΔʙკ
    package-b
    名前解決可能な形に

    ファイルを配置・共存できない

    View Slide

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

    View Slide

  20. せめて・・・
    • (アプリケーション本体から利⽤されない)

    CLI利⽤想定のツールについては
    • php-cs-fixerとか rectorとか
    • もっとストレスフリーに利⽤したい・・!

    View Slide

  21. という時に、

    composer-bin-plugin


    View Slide

  22. - [x]Composerを使っていて、

    こんな「困った!」ありませんか
    〜FIN〜

    View Slide

  23. §3

    composer-bin-pluginが

    そんな悩みを解決してくれる
    かもしれません

    View Slide

  24. composer-bin-plugin

    • `vendor`ディレクトリを

    複数扱えるようにしてくれるユーティリティ
    • virtualenv的な
    • 例えば「phpcs⽤のvendor」「phpmd⽤の
    vendor」などが組める

    View Slide

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

    View Slide

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

    「vendor dir」「composer.lock」を

    掘ってしまえ、という発想

    View Slide

  27. 使い⽅
    • Install (global)
    • composer global require bamarni/composer-bin-plugin
    • Install (in-project)
    • composer require --dev bamarni/composer-bin-plugin

    View Slide

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

    View Slide

  29. 使い⽅
    • Usage
    • `Composer [global] bin $任意の名前空間名
    command `
    • composer global bin cs require friendsofphp/php-
    cs-fixer rector/rector
    • これで「cs」という隔離された名前空間に

    php-cs-fixerとrectorが設置される

    View Slide

  30. 実際の様⼦
    ~/.composer $ tree -L 2 vendor-bin
    vendor-bin
    └── cs
    ├── composer.json
    ├── composer.lock
    └── vendor
    • `vendor-bin` の下に `cs` ディレクトリが掘られている

    View Slide

  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

    View Slide

  32. 実際の様⼦
    • 実⾏ファイルは(defaultだと)

    vendorディレクトリ下にsymlinkが貼られる

    =「いつもみたいな感じ☆」で使える!!
    $ ls vendor/bin
    pdepend php-parse phpcs phpmetrics psysh
    php-cs-fixer phpcbf phpmd phpstan rector

    View Slide

  33. こんなとこも

    気が利いていました
    • 特殊な名前 `all`

    => vendor-binに⼊っているものを⼀括操作
    • composer bin all install
    • composer bin all update
    • `bin/` 下のsymlinkが衝突したら

    ⾃動で作成を省略してくれるみたい

    View Slide

  34. どうやって動いているの?
    • https://github.com/bamarni/composer-bin-
    plugin/blob/v1.3.0/src/BinCommand.php#L104
    をざっくり⾒た感じだと
    • 名前空間に対応したディレクトリに移動して
    • 「普通にComposer.json(lock)を読みとる
    (`Factory ::getComposerFile()`)」ように振る舞う

    View Slide

  35. - [x]composer-bin-pluginが

    そんな悩みを解決してくれるかもしれません
    〜FIN〜

    View Slide

  36. まとめ!
    • あくまで`bin-plugin`なので、

    局所的な⽤途想定になるかなーという所感

    (vendorにおくもの、vendor-binに置くものを分ける)
    • 逆に⾔うと

    「アプリケーションコード」が「CLI⽤のコマンド」の依存に

    煩わされなくなる・・!
    • 初めて知った時の「便利そう!!」と

    中⾝を⾒た時の「単純!!!」というギャップが⾯⽩かった

    View Slide

  37. ͓෇͖߹͍͍͖ͨͩ

    ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

    View Slide

  38. 参考リンク
    • Packagist

    https://packagist.org/packages/bamarni/
    composer-bin-plugin
    • 私が知ったキッカケの記事

    https://www.dereuromark.de/2018/03/14/
    cakephp-3-6-is-coming/

    View Slide