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.4k
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
RemoveだらけのPHPUnit 12に備えよう
cocoeyes02
0
190
PHP RFC: Deprecate implicitly nullable parameter types をサクッと話す
cocoeyes02
0
330
PHPUnit 11 概論
cocoeyes02
4
1.8k
Random\Randomizer クラスで日常のあれこれを解決しよう! / Random\Randomizer class solves familiar trouble
cocoeyes02
1
880
BASEにおける インシデント対応フローと工夫
cocoeyes02
0
1.1k
AWS Lambdaから始める Devチームの小さなDevOps改善 〜QCDどれも諦めない運用を目指して〜 / Start to improving small DevOps with AWS Lambda by Dev Team
cocoeyes02
0
1.3k
PHPUnit 10 概論 / Introduction of PHPUnit 10
cocoeyes02
3
8.9k
テスト駆動開発本をPHPで写経してみた / Copy Test Driven Development Code by PHP
cocoeyes02
0
470
テストコードリーディングのみでPHPUnitの仕様を理解してみる / Try to understand PHPUnit specification with test code reading only
cocoeyes02
1
2.7k
Other Decks in Programming
See All in Programming
React 19アップデートのために必要なこと
uhyo
7
1.3k
Jakarta EE meets AI
ivargrimstad
0
200
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
8
2.3k
Software Architecture
hschwentner
6
2.1k
Code smarter, not harder - How AI Coding Tools Boost Your Productivity | Angular Meetup Berlin
danielsogl
0
100
ナレッジイネイブリングにAIを活用してみる ゆるSRE勉強会 #9
nealle
0
140
プログラミング言語学習のススメ / why-do-i-learn-programming-language
yashi8484
0
150
5分で理解する SOLID 原則 #phpcon_nagoya
shogogg
1
290
第3回 Snowflake 中部ユーザ会- dbt × Snowflake ハンズオン
hoto17296
4
390
Bedrock Agentsレスポンス解析によるAgentのOps
licux
3
910
パスキーのすべて ── 導入・UX設計・実装の紹介 / 20250213 パスキー開発者の集い
kuralab
3
870
Better Code Design in PHP
afilina
0
160
Featured
See All Featured
Statistics for Hackers
jakevdp
797
220k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
The Pragmatic Product Professional
lauravandoore
32
6.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
Rails Girls Zürich Keynote
gr2m
94
13k
Why Our Code Smells
bkeepers
PRO
336
57k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.3k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Automating Front-end Workflow
addyosmani
1368
200k
A Philosophy of Restraint
colly
203
16k
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