Slide 1

Slide 1 text

依存パッケージの更新は コツコツが勝つコツ! PHPカンファレンス名古屋2025 2025.02.22 Yuta Ohashi

Slide 2

Slide 2 text

2 目次 • composer updateのおさらい • composer updateで何ができるのか?何が起こるのか? • パッケージ更新のはまりポイント • コツコツ パッケージを更新していくために… • 明日からコツコツが勝つコツするためのTips

Slide 3

Slide 3 text

composer updateのおさらい

Slide 4

Slide 4 text

4

Slide 5

Slide 5 text

5 composer updateのおさらい composerとは?? Composer is a tool for dependency management in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you.

Slide 6

Slide 6 text

6 composer updateのおさらい composerとは?? Composer is a tool for dependency management in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you. • PHPのための依存パッケージ管理ツール • プロジェクトにおける依存するパッケージが定義できる • パッケージの管理(インストール・更新)ができる

Slide 7

Slide 7 text

7 composer updateのおさらい プロジェクトにおける依存パッケージが定義できる • composer.json に依存パッケージを定義 • どのパッケージを利用するか? • どのバージョンを利用するか?(どのバージョン範囲を許容するか?) • などが定義できる • インストールされたパッケージのバージョンを composer.lock に記録 • composer install を実行した際に composer.lock に記載のバージョンがインストールされる • 各自のローカル環境・本番環境で同じパッケージを利用していることが保証できる

Slide 8

Slide 8 text

8 composer updateのおさらい パッケージの管理(インストール・更新)ができる • composer install コマンド(インストール) • composer.lock に基づいて、記載されたバージョンのパッケージをインストールする • composer.lock のファイルがない場合、 composer.json に基づいて composer.lock ファイル を作成する • composer update コマンド(更新) • composer.json に基づいて、最新の利用可能なパッケージに更新する • その際、composer.lock に更新されたパッケージのバージョンが記録される

Slide 9

Slide 9 text

composer updateで 何ができるのか? 何が起こるのか?

Slide 10

Slide 10 text

10 composer updateで何ができるのか?何が起こるのか? パッケージの更新とバージョンの記録ができる 1. composer.json に基づいて、パッケージを再解決 2. 最新の適応可能なバージョンを取得 3. composer.lock を更新し、パッケージのバージョンを記録する 4. vendor/ ディレクトリに新しいバージョンのパッケージがインストー ルされる

Slide 11

Slide 11 text

11 composer updateで何ができるのか?何が起こるのか? composer updateの各種オプションなど • composer update vendor/package • 特定のパッケージのみ更新する • composer update vendor/package –with-dependencies • 指定したパッケージの依存関係も更新する • composer update vendor/package –with-all-dependencies • 指定したパッケージの依存関係を composer.json に記載のパッケージを含めて更新する

Slide 12

Slide 12 text

12 composer updateで何ができるのか?何が起こるのか? composer updateの各種オプションなど • composer update --prefer-stable • 可能な限り安定版を選択して更新する • composer update --minimal-changes • 絶対に更新が必要なパッケージのみ部分的に更新する • などなど… • --dry-run をつけて気軽に確認してみよう

Slide 13

Slide 13 text

13 composer updateで何ができるのか?何が起こるのか? 特定のパッケージのみ更新する場合 % composer update guzzlehttp/guzzle --dry-run // 略 Lock file operations: 0 installs, 1 update, 0 removals - Upgrading guzzlehttp/guzzle (7.2.0 => 7.3.0) Installing dependencies from lock file (including require-dev) // 略

Slide 14

Slide 14 text

14 composer updateで何ができるのか?何が起こるのか? 指定したパッケージの依存関係も更新する % composer update guzzlehttp/guzzle --with-dependencies --dry-run // 略 Lock file operations: 1 install, 7 updates, 0 removals - Upgrading guzzlehttp/guzzle (7.2.0 => 7.9.2) - Upgrading guzzlehttp/promises (1.4.0 => 2.0.4) - Upgrading guzzlehttp/psr7 (1.7.0 => 2.7.0) - Upgrading psr/http-client (1.0.1 => 1.0.3) - Locking psr/http-factory (1.1.0) - Upgrading psr/http-message (1.0 => 2.0) - Upgrading ralouphie/getallheaders (2.0.5 => 3.0.3) - Upgrading symfony/deprecation-contracts (v2.1.2 => v3.5.1) Installing dependencies from lock file (including require-dev) // 略 --with-dependencies をつけることで依存のあるパッケージも 更新対象になる

Slide 15

Slide 15 text

15 composer updateで何ができるのか?何が起こるのか? 絶対に必要なパッケージのみ部分的に更新する % composer update guzzlehttp/guzzle --minimal-changes --with-dependencies --dry-run // 略 Lock file operations: 1 install, 6 updates, 0 removals - Upgrading guzzlehttp/guzzle (7.2.0 => 7.9.2) - Upgrading guzzlehttp/promises (1.4.0 => 2.0.4) - Upgrading guzzlehttp/psr7 (1.7.0 => 2.7.0) - Locking psr/http-factory (1.1.0) - Upgrading psr/http-message (1.0 => 1.1) - Upgrading ralouphie/getallheaders (2.0.5 => 3.0.3) - Upgrading symfony/deprecation-contracts (v2.1.2 => v3.5.1) Installing dependencies from lock file (including require-dev) // 略 --minimal-changes をつけることで不必要なパッケージが減った

Slide 16

Slide 16 text

16 composer updateで何ができるのか?何が起こるのか? デモ環境

Slide 17

Slide 17 text

パッケージ更新のはまりポイント

Slide 18

Slide 18 text

18 パッケージ更新のはまりポイント 更新をためてしまうとめっちゃ大変 • 複数のパッケージ同士でバージョンが合わない • パッケージAは パッケージCのv2.0以上が必要 • パッケージBはパッケージCの v1.5 までしか対応していない • 古いパッケージのサポート終了している • PHPバージョンアップ時などに如実に困る • 代替パッケージを探す必要性 • 更新後の動作確認が大変 • テストが書いてあればある程度は安心できるが…

Slide 19

Slide 19 text

19 パッケージ更新のはまりポイント その他 • 更新頻度が高いパッケージへの対応 • やたらバージョンが上がるパッケージがたまにある • バージョンアップへの追従が追いついてない場合 • laravel/framework の更新のために laravel-doctrine/orm の更新を待つ必要がある

Slide 20

Slide 20 text

20 パッケージ更新のはまりポイント パッケージ更新を溜めてしまってつらかった話 こちらもちょっと古いですが 参考にはなると思うのでご参照ください

Slide 21

Slide 21 text

コツコツ パッケージを 更新していくために…

Slide 22

Slide 22 text

22 コツコツ パッケージを更新していくために… ポイント • 更新に気付くタイミング • 更新を実施するタイミング

Slide 23

Slide 23 text

23 コツコツ パッケージを更新していくために… 更新に気付くタイミング • 「気付く」ことができないと(適切なタイミングで)更新できない • 定期的に実施することで逐一気付かなくてもよいという面はある • 特にセキュリティに関する更新などは迅速に実施したい • より速く気がつけるとよい

Slide 24

Slide 24 text

24 コツコツ パッケージを更新していくために… 更新に気付くタイミング – おおまかに2つ - • 更新スケジュールが決まっている(大きい変更) • PHP: 1年に1回 (11月末〜12月頭くらい) • Laravel: 1年に1回 (1月末〜2月末くらい) • 更新スケジュールが決まっていない • マイナー・パッチバージョンの更新など • (後方互換性のある)機能追加・改修 • バグフィックス • セキュリティフィックス

Slide 25

Slide 25 text

25 コツコツ パッケージを更新していくために… 更新に気付くタイミング – どう対処するか? - • 更新スケジュールが決まっている(大きい変更) • 予想がつくので更新のプランを検討できる • 更新スケジュールが決まっていない • どう知るか?情報を得るか?を意識しておくのが大事 • composer outdated, composer audit などのコマンドの実行 • Renovate や Dependabot の通知 • SNS等の情報から知る

Slide 26

Slide 26 text

26 コツコツ パッケージを更新していくために… 更新に気付くタイミング – どう対処するか? - • リリーススケジュールが決まっている(大きい変更) • 予想がつくので更新のプランを検討できる • リリーススケジュールが決まっていない • どう知るか?情報を得るか?を意識しておくのが大事 • composer outdated, composer audit などのコマンドの実行(毎週頭に実行など) • Renovate や Dependabot の通知 • SNS等の情報から知る

Slide 27

Slide 27 text

27 コツコツ パッケージを更新していくために… 更新を実施するタイミング • 実施するタイミングは速いにこしたことはない • 特にセキュリティに関わる更新は優先したい • アプリケーションのリリースサイクルにも関わる • どのようなブランチ運用をして機能開発をしているか? • テストが不揃いな場合に検証に時間がかかるため適応に時間がかかるなど • 開発のスタイルによっても変わる • 落とし所を作って想定・準備しておくのが肝要

Slide 28

Slide 28 text

28 コツコツ パッケージを更新していくために… 更新を実施するタイミング – 定期更新 or 逐次更新 - • 落とし所例 • 定期更新(開発の流れの中で枠を設けるイメージ) • 月初に composer update をする • 定期リリース直後に更新作業をする • 逐次更新 • セキュリティフィックスについては他の作業を止めて最優先で対応する • パッチバージョンはまとめてRenovateなどにオートマージさせる

Slide 29

Slide 29 text

29 コツコツ パッケージを更新していくために… 2つのタイミングを可能な限り短くできるとよい • 「気付く」から「実施する」のタイミングは短いほどうれしいはず • 定期更新 & 逐次更新という境目が可能な限りなくなっていくとよいのかなと捉えている • 例 • パッチバージョンはテストがパスしていればオートマージする • 当番制にして毎週対応する • など、チームにあったタイミングを決めておけると安心感・安定感がうまれてくる • これがないと「ま…まだ耐えれる…」みたいな状況に陥りがち

Slide 30

Slide 30 text

明日から コツコツが勝つコツ するためのTips

Slide 31

Slide 31 text

31 明日からコツコツが勝つコツするためのTips パッケージ更新が必要なことに「気付く」 • コマンドを実行してみる • GitHubのリポジトリでRenovate・Dependabotを有効にしてみる

Slide 32

Slide 32 text

32 明日からコツコツが勝つコツするためのTips コマンドを実行してみる • composerにある便利なコマンドを実行してみましょう(2つ) • 手元で完結するので誰にも迷惑をかけず(バレずに)確認できる • composer outdated --locked --direct • composer.jsonに定義のある更新可能なパッケージをcomposer.lockを参照して表示 • composer audit • 脆弱性のあるパッケージがあるかどうかチェックする • composer updateを実行する際にも簡易チェックされて、必要がある場合はコマンドの 実行を促される

Slide 33

Slide 33 text

33 明日からコツコツが勝つコツするためのTips 更新可能なパッケージを表示 % composer outdated --patch-only --locked --direct Color legend: - patch or minor release available - update recommended - major release available - update possible fakerphp/faker 1.10.0 1.10.1 Faker is a PHP library that generates ... fruitcake/laravel-cors 2.0.5 2.0.5 Adds CORS (Cross-Origin Resource Shari... Package fruitcake/laravel-cors is abandoned, you should avoid using it. No replacement was suggested. laravel/framework 9.0.0 9.0.2 The Laravel Framework. laravel/sanctum 2.14.0 2.14.2 Laravel Sanctum provides a featherweig... laravel/tinker 2.7.0 2.7.3 Powerful REPL for the Laravel framework. phpunit/phpunit 9.5.10 9.5.28 The PHP Unit Testing framework. spatie/laravel-ignition 1.0.0 1.0.11 A beautiful error page for Laravel app... Package fruitcake/laravel-cors is abandoned, you should avoid using it. No replacement was suggested. --patch-only でパッチバージョンの更新のみに絞り込み その他のオプションもあるので マニュアルをみるとよいです

Slide 34

Slide 34 text

34 明日からコツコツが勝つコツするためのTips 脆弱性のあるパッケージがあるかどうかチェックする % composer audit Found 13 security vulnerability advisories affecting 8 packages: +-------------------+----------------------------------------------------------------------------------+ | Package | guzzlehttp/guzzle | | Severity | high | | CVE | CVE-2022-31091 | | Title | Change in port should be considered a change in origin | | URL | https://github.com/guzzle/guzzle/security/advisories/GHSA-q559-8m2m-g699 | | Affected versions | >=7,<7.4.5|>=4,<6.5.8 | | Reported at | 2022-06-20T22:24:00+00:00 | +-------------------+----------------------------------------------------------------------------------+ // 略 Found 13 security vulnerability advisories affecting 8 packages:

Slide 35

Slide 35 text

35 明日からコツコツが勝つコツするためのTips コマンドを実行することで更新の要不要が分かる • いまパッケージ更新を積極的にしていない状態だとするといくつかは更 新の必要なパッケージが確認できる • 「気付く」ための方法が分かった(=「気付く」タイミングがそれ) • ネクストアクションとしてはこの「気付く」タイミングをどう定期的に 作っていくか • 自分で週に1回実行する…CIに組み込む…など…

Slide 36

Slide 36 text

36 明日からコツコツが勝つコツするためのTips GitHubのリポジトリでRenovate・Dependabotを有効にしてみる • GitHubを利用していてかつ設定の調整がサッとできる場合、有効にして みましょう • Renovate・Dependabotが現時点で更新が必要なパッケージのプルリク エストを作成してくれる • そのプルリクエストはマージしなくても害はない! • チーム全体が見える場所でどれくらい更新すべきパッケージがあるか? が見えるようにもなる

Slide 37

Slide 37 text

37 明日からコツコツが勝つコツするためのTips 過去、Renovateを有効にした時 27個のプルリクエストが一気に作成されました

Slide 38

Slide 38 text

38 明日からコツコツが勝つコツするためのTips ツールがパッケージ更新の要不要を知らせてくれる • 「気付く」タイミングをツールにまかせるねることができる • コマンドを能動的に実行しなきゃいけない場合と違い、受動的に情報を 得ることができる • ネクストアクションとしてはどういうタイミングでプルリクエストを取 り込んだり、手元での更新を当てるのか?というところを考えてゆく

Slide 39

Slide 39 text

39 明日からコツコツが勝つコツするためのTips ツールがパッケージ更新の要不要を知らせてくれる Renovateを利用した運用について 事例の1つとして参考にしていただければ幸いです!

Slide 40

Slide 40 text

40 明日からコツコツが勝つコツするためのTips パッケージ更新を実施してみる • 1つパッケージを更新してみる • composer updateは--dry-runオプションをつければ影響なく手元で確認 できる • 更新が可能そうな場合は、実際に更新してみましょう • その後、更新をどう受け入れるのか?というのをネクストアクションと して考えればOK!

Slide 41

Slide 41 text

41 明日からコツコツが勝つコツするためのTips やはりコツコツはじめて積み上げていくのが大事 • コマンドを実行してみる • GitHubのリポジトリでRenovate・Dependabotを有効にしてみる • 実際に1つパッケージを更新してみる • 小さな気付きが得られれば成功!そこから恒常的に更新が続けられてい る様子を思い浮かべながら、次のアクションを取り続ければよい

Slide 42

Slide 42 text

まとめ

Slide 43

Slide 43 text

43 まとめ • composer updateでパッケージの更新ができる • 更新が滞れば滞るほど大変に… • そのためにコツコツ更新してく必要がある • 更新に気付く、更新を実施するの2つのタイミングを意識す るのが大事! • 小さくコツコツはじめてコツコツ積み上げていきましょう!

Slide 44

Slide 44 text

依存パッケージの更新は コツコツが勝つコツ!

Slide 45

Slide 45 text

青ごへいもち / @blue_goheimochi 大橋 佑太 株式会社リンケージ ランニング, サッカー, フットサル, キャンプ 浜松まつり, PUBG MOBILE, けん玉 さわやかのげんこつハンバーグ おおはし ゆうた 静岡県浜松市中央区小豆餅 出身 東海勢(出身or在住)

Slide 46

Slide 46 text

Appendix

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

〇〇は コツコツが勝つコツ!

Slide 49

Slide 49 text

人生 は コツコツが勝つコツ!

Slide 50

Slide 50 text

50 「コツコツが勝つコツ」メモ • 5月2日が「コツコツが勝つコツの日」と制定されている • 森脇健児氏の名言としても知られる • サッカー日本代表の板倉選手も「勝利のハチマキ」に書いている • 株式会社日本財託が商標登録している