Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Composer 2.0 新機能概論 / New feature introduction o...
Search
02
October 03, 2021
Programming
1
2.5k
Composer 2.0 新機能概論 / New feature introduction of Composer 2.0
2021/10/03 PHPカンファレンス 2021のトークで使用したスライドです
02
October 03, 2021
Tweet
Share
More Decks by 02
See All by 02
新しいPHP拡張モジュールインストール方法「PHP Installer for Extensions (PIE)」を使ってみよう!
cocoeyes02
0
610
PHP8.4におけるJITフレームワークIRと中間表現について理解を深める
cocoeyes02
1
920
RemoveだらけのPHPUnit 12に備えよう
cocoeyes02
0
860
PHP RFC: Deprecate implicitly nullable parameter types をサクッと話す
cocoeyes02
0
730
PHPUnit 11 概論
cocoeyes02
5
2.5k
Random\Randomizer クラスで日常のあれこれを解決しよう! / Random\Randomizer class solves familiar trouble
cocoeyes02
1
1k
BASEにおける インシデント対応フローと工夫
cocoeyes02
0
1.2k
AWS Lambdaから始める Devチームの小さなDevOps改善 〜QCDどれも諦めない運用を目指して〜 / Start to improving small DevOps with AWS Lambda by Dev Team
cocoeyes02
0
1.4k
PHPUnit 10 概論 / Introduction of PHPUnit 10
cocoeyes02
3
9.8k
Other Decks in Programming
See All in Programming
AI時代の『改訂新版 良いコード/悪いコードで学ぶ設計入門』 / ai-good-code-bad-code
minodriven
21
8.7k
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
2
14k
CDK引数設計道場100本ノック
badmintoncryer
1
230
なぜ「共通化」を考え、失敗を繰り返すのか
rinchoku
1
660
Python型ヒント完全ガイド 初心者でも分かる、現代的で実践的な使い方
mickey_kubo
1
150
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
0
140
Git Sync を超える!OSS で実現する CDK Pull 型デプロイ / Deploying CDK with PipeCD in Pull-style
tkikuc
3
150
GPUを計算資源として使おう!
primenumber
1
190
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
230
AI コーディングエージェントの時代へ:JetBrains が描く開発の未来
masaruhr
1
200
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
2
650
Flutterで備える!Accessibility Nutrition Labels完全ガイド
yuukiw00w
0
170
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
43
7.6k
Gamification - CAS2011
davidbonilla
81
5.4k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
How GitHub (no longer) Works
holman
314
140k
Agile that works and the tools we love
rasmusluckow
329
21k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
6
320
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
Typedesign – Prime Four
hannesfritz
42
2.7k
How STYLIGHT went responsive
nonsquared
100
5.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Transcript
#phpcon2021 #track2 2021/10/03 PHP Conference Japan 2021 @02 Composer 2.0
新機能概論
#phpcon2021 #track2 BASEからの刺客2人目です 2
#phpcon2021 #track2 自己紹介 PHPカンファレンス 2019 PHPerのためのテストコード入門 2020 テストピラミッドを意識した テストコード実装戦略 執筆
WEB+DB PRESS Vol.121 Composer 2によるパッケージ管理 初のメジャーバージョンアップで大進化! WEB+DB PRESS Vol.118 PuPHPeteerでE2Eテスト PHP版Puppeteerでお手軽正常系チェック BankEnd Software Enginner 02 大津 和槻 :@cocoeyes02 2021/02~ BASE, Inc.
#phpcon2021 #track2 今回のセッション 2020年10月頃にリリースされた Composer2.0について 時間が許す限り、広く浅く解説していきます 4
#phpcon2021 #track2 今日話すこと 1 2 3 新機能の概要 新機能の実行例 新機能の使い所例 5
#phpcon2021 #track2 今日話さないこと 1 2 新機能の詳細について 新機能を活用した成果物 6
#phpcon2021 #track2 実行環境について 今回の新機能は全てDocker環境上で実行しております。 • Docker 20.10.8 • Composer 2.0.14
• PHP 8.0.6 7
#phpcon2021 #track2 Composer2.0 新機能一覧 • パフォーマンス向上 • ランタイムの新機能 • パッケージのバージョンの部分的な更新
• 依存関係のエラーレポートの改善 • リポジトリの優先順位 • 新しく追加されたオプション 8
#phpcon2021 #track2 パフォーマンス向上
#phpcon2021 #track2 パフォーマンス向上 パッケージのインストールなどの速度とメモリ使用量が大幅に改善されました。 パフォーマンス向上のためにさまざまな変更が行われましたが、 「パッケージのメタデータのみをロードするようになったため、require/removeや部分的 なパッケージの更新が高速化した」と補足されています。 10
#phpcon2021 #track2 パフォーマンス向上 11
#phpcon2021 #track2 パフォーマンス向上 例:Docker環境上でLaravel/framework v8.62をrequireした場合 Composer2.0 Composer1.10 Memory usage: 31.9MiB Memory usage:
552.97MiB peak: 42.28MiB time: 31.37s peak: 605.56MiB time: 1144.02s 12
#phpcon2021 #track2 パフォーマンス向上 例:Docker環境上でLaravel/framework v8.62をremoveした場合 Composer2.0 Composer1.10 Memory usage: 9.89MiB Memory usage:
338.8MiB peak: 11.62MiB time: 10.15s peak: 389.87MiB time: 770.02s 13
#phpcon2021 #track2 ランタイムの新機能
#phpcon2021 #track2 プラットフォームのチェック PHPと拡張機能のバージョンがパッケージのプラットフォームの要件と 一致することを確認します。 composer check-platform-reqsコマンドを実行すると実施できます。 15
#phpcon2021 #track2 プラットフォームのチェック 16
#phpcon2021 #track2 プラットフォームのチェック 17 現在インストールされている拡張機能のバージョン 現在インストールされているPHPのバージョン
#phpcon2021 #track2 プラットフォームのチェック vendor/composer/platform_check.phpの中身を見ると チェックのルールの詳細がわかります。以下が例です。 18
#phpcon2021 #track2 プラットフォームのチェック vendor/composer/platform_check.phpの中身を見ると チェックのルールの詳細がわかります。以下が例です。 19 PHP8.0.0 以上のバージョンでなければエラー扱いとする 拡張機能のバージョンについては今回はチェックがなさそう?
#phpcon2021 #track2 プラットフォームのチェック 使い所例 • 今利用している環境でcomposerが使えるのか確認したいとき • CI/CDを使った環境テスト 20
#phpcon2021 #track2 パッケージ/バージョンチェック 新しいクラスComposer\InstalledVersionsを使うと、 どのパッケージ/バージョンが存在するかなどをコード上で確認できます。 例:laravel/framework v8.0をinstallしている場合 InstalledVersions::satisfies(new VersionParser, 'laravel/framework',
'8.0') -> true InstalledVersions::satisfies(new VersionParser, 'laravel/framework', '^8.0') -> true InstalledVersions::satisfies(new VersionParser, 'laravel/framework', '8.1') -> false 21
#phpcon2021 #track2 パッケージ/バージョンチェック 使い所例 • バージョンによって記法やメソッド名が変わるとき? ◦ バージョンアップに備えてとか 正直良い使い所が思いついていないので、 知見がある方はぜひハッシュタグをつけてツイートして頂けると助かります!
22
#phpcon2021 #track2 パッケージの バージョンの部分的な更新
#phpcon2021 #track2 パッケージのバージョンの 部分的な更新 パッケージをupdateする際、コマンド上で指定できるようになりました。 composer.jsonでいちいちバージョンの指定をしなくても、 特定のパッケージをアップグレード/ダウングレードできます。 24
#phpcon2021 #track2 パッケージのバージョンの 部分的な更新 --withフラグを付け、パッケージ名のあとにバージョンを指定します。 例:laravel/framework 8.51 -> 8.62へ一時的にアップグレードをする 25
#phpcon2021 #track2 パッケージのバージョンの 部分的な更新 --withフラグを付け、パッケージ名のあとにバージョンを指定します。 例:laravel/framework 8.51 -> 8.62へ一時的にアップグレードをする 26
#phpcon2021 #track2 パッケージのバージョンの 部分的な更新 --withフラグを付け、パッケージ名のあとにバージョンを指定します。 例:laravel/framework 8.62 -> 8.51へ一時的にダウングレードをする 27
#phpcon2021 #track2 パッケージのバージョンの 部分的な更新 --withフラグを付け、パッケージ名のあとにバージョンを指定します。 例:laravel/framework 8.62 -> 8.51へ一時的にダウングレードをする 28
#phpcon2021 #track2 パッケージのバージョンの 部分的な更新 ただし、composer.jsonのバージョンの制約に反したアップグレード/ダウングレードはで きないので注意が必要です。 たとえば、"laravel/framework": "^7.0"と指定した制約がある状態で、 一時的にlaravel 8へバージョンアップすることはできません。
29
#phpcon2021 #track2 パッケージのバージョンの 部分的な更新 使い所 • パッケージのバージョンをあげる前に動作確認をしたい!だけどいちいちcomposer.json をいじるのは面倒 30
#phpcon2021 #track2 依存関係の エラーレポートの改善
#phpcon2021 #track2 依存関係のエラーレポートの改善 依存関係が解決できない場合に表示するエラーレポートが改善されました。 さまざまな例があるためすべてを紹介することはできませんが、 以下のjsonでcomposer1系と2系でどうなるか紹介します。 32
#phpcon2021 #track2 依存関係のエラーレポートの改善 Composer 1.10 33
#phpcon2021 #track2 依存関係のエラーレポートの改善 Composer 2.0 34
#phpcon2021 #track2 リポジトリの優先順位
#phpcon2021 #track2 正規/非正規リポジトリ Composer 2.0では依存関係を解決する際、 リポジトリの優先順位を参考にしてパッケージを検索します。 一番高い検索優先順位として設定されるリポジトリが、正規リポジトリ 一番低い検索優先順位として設定されるリポジトリが、非正規リポジトリ 36
#phpcon2021 #track2 正規/非正規リポジトリ 明示的に非正規リポジトリで設定する場合は、Composer.jsonで以下のように指定します { "repositories": [ { "type": "git",
"url": "https://github.com/Seldaek/monolog.git", "canonical": false } ] } 37
#phpcon2021 #track2 正規/非正規リポジトリ 指定がないリポジトリはデフォルトで・・・ Composer 2.0では正規リポジトリとして扱う Composer 1.xでは非正規リポジトリとして扱う Packagist.orgにあるリポジトリは非正規リポジトリを除いて、 暗黙的に一番最後に検索されます。
つまりデフォルトでは以下の検索順位の順番になります 正規リポジトリ → Packagist.orgにあるリポジトリ → 非正規リポジトリ 38
#phpcon2021 #track2 正規/非正規リポジトリ 正規リポジトリを用いる理由 1つ目の理由はパフォーマンス面についてです。 たとえば同じ名前のパッケージが複数リポジトリに存在した場合、 正規リポジトリを優先することで全リポジトリ(非正規リポジトリを含む)のパッケージを 読み込まなくても済むようにします。 39
#phpcon2021 #track2 正規/非正規リポジトリ 正規リポジトリを用いる理由 2つ目の理由はセキュリティ面についてです。 例:foo/bar: ^2.0という非正規リポジトリのパッケージとバージョンで、 最新バージョンが2.4.3 このとき誰かがfoo/bar 2.999をPackagist.orgに公開すると、
ComposerはPackagist.orgにあるfoo/bar 2.999パッケージを選択してしまい、 意図しないインストールが起きてしまいます。 正規リポジトリであればPackagist.orgよりも優先順位が高くなるため、 foo/bar 2.999は選択されず、意図しないインストールを防げます。 40
#phpcon2021 #track2 パッケージのフィルタリング リポジトリごとに、インストールするパッケージに対する制約を加えることができます。 { "repositories": [ { "type": "git",
"url": "https://github.com/Seldaek/monolog.git", "exclude": ["phpunit/phpunit"] }, { "type": "git", "url": "https://github.com/Seldaek/monolog.git", "only": ["phpunit/phpunit"] } ] } 41
#phpcon2021 #track2 リポジトリの優先順位の使い所例 • 意図しないリポジトリからのインストールは防ぎたい • packagist.orgからインストールする場合でも、できるだけフィルタリングしたい • 正規リポジトリで設定してパッケージダウンロードの高速化を測りたい 42
#phpcon2021 #track2 新しく追加された オプション
#phpcon2021 #track2 --dry-runフラグ --dry-runフラグは、require、remove、install、updateコマンド時に使用可能です。 installとupdateはComposer 1.10でもありましたが、 今回requireとremoveにこのオプションが追加されます。 --dry-runフラグを付けてコマンドを実行すると、予期される実行結果を見ることができま す 44
#phpcon2021 #track2 --lockedフラグ --lockedフラグは、show、outdatedコマンド時に使用可能です。 --lockedフラグを付けてコマンドを実行すると、 composer.lockに記述されているパッケージの一覧を見ることができます。 45
#phpcon2021 #track2 --lockedフラグ 46
#phpcon2021 #track2 --lockedフラグ 47 composer.lockを見なくても ロックされている バージョンがわかる
#phpcon2021 #track2 最後に 今回主にお話ししたのはComposer2.0の新機能についてです。 2021/06/03には、Composer2.1がリリースされています。 また、現在Composer1.xはEOLになっている他、Composer2.3ではPHP7.2.5より古いPHP バージョンはサポートしない旨がアナウンスされています。 今回の発表がきっかけで 「Composer2.0の機能を活用してみよう!」 「Composer1.xからアップグレードしよう!」
「やばいPHPのバージョン上げなきゃ・・・」 という風になって頂けたら幸いです! 48
#phpcon2021 #track2 参考文献 WEB+DB PRESS Vol.121 Composer 2によるパッケージ管理 初のメジャーバージョンアップで大進化! https://gihyo.jp/magazine/wdpress/archive/2021/vol121
Composer 2.0 is now available! https://blog.packagist.com/composer-2-0-is-now-available/ Github Composer Complete 2.0 Changelog https://github.com/composer/composer/releases/tag/2.0.0 Composer Book(Documentation) https://getcomposer.org/doc/ 49