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 of Composer 2.0
Search
02
October 03, 2021
Programming
1
2.1k
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
Random\Randomizer クラスで日常のあれこれを解決しよう! / Random\Randomizer class solves familiar trouble
cocoeyes02
0
32
BASEにおける インシデント対応フローと工夫
cocoeyes02
0
620
AWS Lambdaから始める Devチームの小さなDevOps改善 〜QCDどれも諦めない運用を目指して〜 / Start to improving small DevOps with AWS Lambda by Dev Team
cocoeyes02
0
1k
PHPUnit 10 概論 / Introduction of PHPUnit 10
cocoeyes02
2
5.3k
テスト駆動開発本をPHPで写経してみた / Copy Test Driven Development Code by PHP
cocoeyes02
0
290
テストコードリーディングのみでPHPUnitの仕様を理解してみる / Try to understand PHPUnit specification with test code reading only
cocoeyes02
1
2.3k
カンファレンススピーカー入門〜登壇するぞ!って決めてからトークするまで〜 / How to talk in Tech Conference
cocoeyes02
2
1k
コミットメッセージ規約 「Conventional Commits」を導入してみよう! / Let's use Conventional Commits
cocoeyes02
5
8.3k
「登壇できない」それ本当ですか? / You cannot become conference speaker ... Is it true?
cocoeyes02
0
1.8k
Other Decks in Programming
See All in Programming
プールにゆこう
irof
2
120
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.2k
#phpcon_odawara オープン・クローズドなテストフィクスチャを求めて / open closed test fixtures
77web
3
210
Code Reviews
bkuhlmann
4
870
Git Lint
bkuhlmann
4
740
Build with AI 2024 Seoul - 제로부터 시작하는 Flutter with Gemini 생활 - 박제창
itsmedreamwalker
0
200
今、知っておきたい! 生成AIエージェントの世界
elith
3
340
デザインシステムで Tailwind CSSとCSS in JSに分散投資をしたら良かった話
fsubal
18
4.8k
SwiftUI Performance 不要なViewの再描画と更新を抑える
bigamitiongit
1
150
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
22
15k
せっかくモデル図描くのなら、嬉しいことが多い方がいいよね!
kuboaki
1
3.1k
PHPの次期バージョンはこの時期どうなっているのか - Internalsの開発体制について - PHPカンファレンス小田原
youkidearitai
PRO
1
180
Featured
See All Featured
Building Adaptive Systems
keathley
29
1.8k
Teambox: Starting and Learning
jrom
128
8.4k
Fireside Chat
paigeccino
19
2.6k
How To Stay Up To Date on Web Technology
chriscoyier
781
250k
Web development in the modern age
philhawksworth
201
10k
Side Projects
sachag
451
41k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
118
38k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
It's Worth the Effort
3n
180
27k
For a Future-Friendly Web
brad_frost
171
8.9k
No one is an island. Learnings from fostering a developers community.
thoeni
14
2.1k
Become a Pro
speakerdeck
PRO
9
4.5k
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