Slide 1

Slide 1 text

Composerを便利に使うために 私がやっていること PHPerKaigi 2024 / LT Hideki Kinjyo GitHub: o0h / X: @o0h_ [公開用] v1.1.1

Slide 2

Slide 2 text

自己紹介 • 金城秀樹 / きんじょうひでき • GitHub:@o0h / Twitter:@o0h_ • 好きなFWはCakePHP • アイコンは 美味しい鮭親子丼の写真です • パンフレット記事も寄稿しています! ありがとうございます!

Slide 3

Slide 3 text

今日のお話 • よく使う道具だから、少しでも便利に使えると良いですね! • 個人的にやっている、 「手を抜いたり安心して使う」ためによく使いがちな方法を 共有しに来ました!!! • パッパとtipsを話していきます

Slide 4

Slide 4 text

composer-bin-plugin

Slide 5

Slide 5 text

composer-bin-plugin • ざっくりいうと「vendorディレクトリを増やせる」ようなもの • そうすると、 「依存パッケージが指定しているバージョンがコンフリクトする」 みたいな状況を避けられる!ヤッター • 開発系のツールなどに利用するといい感じになりそう • 「別のパッケージのせいで」とか「プロダクトコードのために」を理由に、 新しくて便利な開発ツールを入れられない・・・・とサヨウナラ!

Slide 6

Slide 6 text

まずはプラグインをrequire composer require —dev bamarni/composer-bin-plugin

Slide 7

Slide 7 text

で、パッケージ「***」を設置 ※ $名前空間 = 任意の名前。これが設置されるディレクトリ名になる composer bin $໊લۭؒ require ***

Slide 8

Slide 8 text

`vendor-bin`ディレクトリと、 その下に$名前空間ごとのディレクトリが掘られている様子

Slide 9

Slide 9 text

で、その名前空間の下でComposerが叩ける!! comoser bin $໊લۭؒ $αϒίϚϯυ

Slide 10

Slide 10 text

composer.json>configに 書いておきたい設定

Slide 11

Slide 11 text

PJの設定 • `composer.json`内の`config`、意識して設定していますか? • diffが出にくくなったりCIで便利になる設定もあるので、オススメ!

Slide 12

Slide 12 text

私の好きな設定項目たち • `sort-packages`: require/require-devの項目を名前順に揃える • デフォルト(false)だと末尾追記。見やすくなってノリも揃って気持ち良い〜

Slide 13

Slide 13 text

私の好きな設定項目たち • `sort-packages`: require/require-devの項目を名前順に揃える • `platform`: PHPのランタイムや拡張の情報を上書きする • 例えば「`require` に `php:8.2.3` が指定されている」状態の時に、 「PHPStanを実行するCIは、最新のバージョンのPHPを使っている」 • config.platformを書くことで、 「特定のPHP環境で動いているとみなして、install等をしてOK」になる! • ؔ࿈: `--ignore-platform-req=ext-foo` ͰͷґଘνΣοΫແࢹ

Slide 14

Slide 14 text

私の好きな設定項目たち • `sort-packages`: require/require-devの項目を名前順に揃える • `platform`: PHPのランタイムや拡張の情報を上書きする • `cache-dir`: Composerのキャッシュ格納先を指定する • デフォルトだと `$HOME/.composer/cache` など • 「キャッシュをDockerコンテナに突っ込みたいな〜」という時にいじったり

Slide 15

Slide 15 text

私の好きな設定項目たち • `sort-packages`: require/require-devの項目を名前順に揃える • `platform`: PHPのランタイムや拡張の情報を上書きする • `cache-dir`: Composerのキャッシュ格納先を指定する • `optimize-autoloader`/`apcu-autoloader`: autoloadを速くする • オートロード用の静的なクラスマップを作る /キャッシュをAPCuに乗せる。 • optimize〜〜は、`—o` オプションと同等。 dumpが遅くなるので開発時には外したい・・・は、オプションを使った方が◎

Slide 16

Slide 16 text

config.jsonに書いておきたい設定

Slide 17

Slide 17 text

globalなデフォルト設定値を記憶 • 自分の環境におけるデフォルト設定を保持するのが、 `$COMPOSER_HOME/config.json` • ここで俺俺カスタマイズを入れるすぎるのも微妙ですが・・ • PJで他のメンバーと共有するために `$PJ/composer.json` に書いた方が 便利な事の方が多い • モノによっては、設定しておくことで 「何度も同じことを聞かれる〜〜」とかの煩わしさが軽減します

Slide 18

Slide 18 text

例えば・・・ • `github-oauth`: GItHubのAPIを利用するためのトークンを保持

Slide 19

Slide 19 text

例えば・・・ • `github-oauth`: GItHubのAPIを利用するためのトークンを保持 • `use-parent-dir`: サブディレクトリでComposerコマンドを打ったと きに `No composer.json in current directory, do you want to use the one at ***?` と聞かれなく出来る • 自分はfalseにしてる

Slide 20

Slide 20 text

例えば・・・ • `github-oauth`: GItHubのAPIを利用するためのトークンを保持 • `use-parent-dir`: サブディレクトリでComposerコマンドを打ったと きに `No composer.json in current directory, do you want to use the one at ***?` と聞かれなく出来る • 自分はfalseにしてる • 他の項目に関しては https://getcomposer.org/doc/06-config.mdを参照!

Slide 21

Slide 21 text

嬉しいコマンド: show depends prohibits

Slide 22

Slide 22 text

show • `composer show`もしくは `composer info` • パッケージ自体や依存パッケージ情報の表示

Slide 23

Slide 23 text

show / show —locked • オプション無しだと インストール済みパッケージ • = `vendor`にあるパッケージ • `--locked` で composer.lockを見に行く

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

show -s • `-s` で、そのPJ自身の情報 • sはselfのs

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

show -t • `-t` で依存をツリー表示

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

show $package • パッケージ名を渡すと そのパッケージの情報

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

show $package • ワイルドカードの利用もOK • PSR何使ってるの〜〜!? とか出来る

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

depends / why • 指定したパッケージに依存をしているパッケージの表示 • `why`はエイリアスとして設定されている

Slide 34

Slide 34 text

depends $package • `show` と合わせて使ったり • 「間接依存なら、エイッて上 げちゃって良いか!!」って 勇気をもらったり • `-t` で、 ツリー表示もできるぞ!

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

prohibits / why-not • 「なぜ、指定したバージョンを使えないのか」を調べる • いつもスペルとか忘れてエイリアスの `why-not` 使いがち

Slide 37

Slide 37 text

prohibits / why-not • 「このパッケージの、この バージョンが入らん。何 で??」を尋ねるように • `conflicts` と出たら 解決してあげる(か諦める) • `-t` オプションもある • 色がついて見やすい

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

皆さんの好きなコマンドも、 SNSなどでつぶやいてみてくださいね! #phperkaigi

Slide 40

Slide 40 text

バージョン指定: @stable

Slide 41

Slide 41 text

@stable / @dev • 「雑に最新版をいれる」という時に、 semverの代わりに `@stable` を指定することができる • かなり使い道が限られそう・リスクもあるけれど • 公式のFAQで警告される程度にはリスキー(BAD IDEA) https://getcomposer.org/doc/faqs/why-are-unbound-version-constraints-a-bad-idea.md • バージョンが無軌道に上がったりするし、他に巻き込まれて下がったりもする • それを承知できる(?)人なら • comoposer.lockで細かいバージョン管理をしっかり行う前提で • require-devやglobalにいれるツールくらいでなら、 使っても良いんじゃない??という気も

Slide 42

Slide 42 text

Packagist Semver Checker

Slide 43

Slide 43 text

Packagist Semver Checker • https://semver.madewithlove.com/ • 「このパッケージにこういうバージョン指定をしたら、何が入る?」 をチェックできるサイト

Slide 44

Slide 44 text

Packagist Semver Checker • Packagistに登録されている パッケージ&バージョンで 該当範囲を試せる • ʙ とʈの違いとか一目瞭然 • パッチバージョンの記述の 違いとか

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

まとめ

Slide 47

Slide 47 text

Composer、上手く使って 嬉しいな • 公式ドキュメントの、CLI・configのところは一読をオススメします! • 詳しい情報があるので! • 色々なプラグインも探ってみましょう! • Packagistでタグ検索とかすると良いかも? • バージョンアップで良い機能もたくさん入ってくるので、 リリース情報をチェックしましょう! • 2.7で入った `--minimal-changes` オプションとか、私は好きですよ

Slide 48

Slide 48 text

おしまい! お付き合いいただき ありがとうございました!!