Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Composer 2.0 新機能概論 / New feature introduction o...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
02
October 03, 2021
Programming
2.8k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Composer 2.0 新機能概論 / New feature introduction of Composer 2.0
2021/10/03 PHPカンファレンス 2021のトークで使用したスライドです
02
October 03, 2021
More Decks by 02
See All by 02
なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは 見送りだったか / Why array_value_first and array_value_last was declined, then why array_first and array_last was accpeted?
cocoeyes02
0
580
Amazon ECS Managed Instances が リリースされた!キャッチアップしよう!! / Let's catch up Amazon ECS Managed Instances
cocoeyes02
0
560
新しいPHP拡張モジュールインストール方法「PHP Installer for Extensions (PIE)」を使ってみよう!
cocoeyes02
0
2.1k
PHP8.4におけるJITフレームワークIRと中間表現について理解を深める
cocoeyes02
1
1.4k
RemoveだらけのPHPUnit 12に備えよう
cocoeyes02
0
1.4k
PHP RFC: Deprecate implicitly nullable parameter types をサクッと話す
cocoeyes02
0
1.1k
PHPUnit 11 概論
cocoeyes02
5
4k
Random\Randomizer クラスで日常のあれこれを解決しよう! / Random\Randomizer class solves familiar trouble
cocoeyes02
1
1.5k
BASEにおける インシデント対応フローと工夫
cocoeyes02
0
1.3k
Other Decks in Programming
See All in Programming
Webプラットフォームで議論されているセキュリティ課題 / Security issues being discussed on Web Platforms
petamoriken
0
320
Deep dive into the select statement (GopherCon UK)
jespino
0
170
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
220
PyO3 で既存 Python 評価器を Rust core 化する ー wasm-bindgen でブラウザにも配るための設計
kdash
1
560
業務時間外もAIに働いてもらう話
colorful12
3
10k
スマート反転とウェブアクセシビリティ
camiha
0
170
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
5
2.5k
Intent as Code
shoppingjaws
4
620
AIと壁打ちしながら進めるコスト管理
fufuhu
2
2k
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
55
36k
ソフトウェアラスタライザ
fadis
1
800
Featured
See All Featured
Designing Experiences People Love
moore
143
24k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
440
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Prompt Engineering for Job Search
mfonobong
0
450
Paper Plane
katiecoart
PRO
2
53k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Mobile First: as difficult as doing things right
swwweet
225
10k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
510
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
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