Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

PHPカンファレンス名古屋2025の登壇資料です。
https://phpcon.nagoya/2025/

blue_goheimochi

February 22, 2025
Tweet

More Decks by blue_goheimochi

Other Decks in Technology

Transcript

  1. 2 目次 • composer updateのおさらい • composer updateで何ができるのか?何が起こるのか? • パッケージ更新のはまりポイント

    • コツコツ パッケージを更新していくために… • 明日からコツコツが勝つコツするためのTips
  2. 4

  3. 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.
  4. 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のための依存パッケージ管理ツール • プロジェクトにおける依存するパッケージが定義できる • パッケージの管理(インストール・更新)ができる
  5. 7 composer updateのおさらい プロジェクトにおける依存パッケージが定義できる • composer.json に依存パッケージを定義 • どのパッケージを利用するか? •

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

    に基づいて、記載されたバージョンのパッケージをインストールする • composer.lock のファイルがない場合、 composer.json に基づいて composer.lock ファイル を作成する • composer update コマンド(更新) • composer.json に基づいて、最新の利用可能なパッケージに更新する • その際、composer.lock に更新されたパッケージのバージョンが記録される
  7. 10 composer updateで何ができるのか?何が起こるのか? パッケージの更新とバージョンの記録ができる 1. composer.json に基づいて、パッケージを再解決 2. 最新の適応可能なバージョンを取得 3.

    composer.lock を更新し、パッケージのバージョンを記録する 4. vendor/ ディレクトリに新しいバージョンのパッケージがインストー ルされる
  8. 11 composer updateで何ができるのか?何が起こるのか? composer updateの各種オプションなど • composer update vendor/package •

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

    可能な限り安定版を選択して更新する • composer update --minimal-changes • 絶対に更新が必要なパッケージのみ部分的に更新する • などなど… • --dry-run をつけて気軽に確認してみよう
  10. 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) // 略
  11. 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 をつけることで依存のあるパッケージも 更新対象になる
  12. 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 をつけることで不必要なパッケージが減った
  13. 18 パッケージ更新のはまりポイント 更新をためてしまうとめっちゃ大変 • 複数のパッケージ同士でバージョンが合わない • パッケージAは パッケージCのv2.0以上が必要 • パッケージBはパッケージCの

    v1.5 までしか対応していない • 古いパッケージのサポート終了している • PHPバージョンアップ時などに如実に困る • 代替パッケージを探す必要性 • 更新後の動作確認が大変 • テストが書いてあればある程度は安心できるが…
  14. 24 コツコツ パッケージを更新していくために… 更新に気付くタイミング – おおまかに2つ - • 更新スケジュールが決まっている(大きい変更) •

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

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

    予想がつくので更新のプランを検討できる • リリーススケジュールが決まっていない • どう知るか?情報を得るか?を意識しておくのが大事 • composer outdated, composer audit などのコマンドの実行(毎週頭に実行など) • Renovate や Dependabot の通知 • SNS等の情報から知る
  17. 27 コツコツ パッケージを更新していくために… 更新を実施するタイミング • 実施するタイミングは速いにこしたことはない • 特にセキュリティに関わる更新は優先したい • アプリケーションのリリースサイクルにも関わる

    • どのようなブランチ運用をして機能開発をしているか? • テストが不揃いな場合に検証に時間がかかるため適応に時間がかかるなど • 開発のスタイルによっても変わる • 落とし所を作って想定・準備しておくのが肝要
  18. 28 コツコツ パッケージを更新していくために… 更新を実施するタイミング – 定期更新 or 逐次更新 - •

    落とし所例 • 定期更新(開発の流れの中で枠を設けるイメージ) • 月初に composer update をする • 定期リリース直後に更新作業をする • 逐次更新 • セキュリティフィックスについては他の作業を止めて最優先で対応する • パッチバージョンはまとめてRenovateなどにオートマージさせる
  19. 29 コツコツ パッケージを更新していくために… 2つのタイミングを可能な限り短くできるとよい • 「気付く」から「実施する」のタイミングは短いほどうれしいはず • 定期更新 & 逐次更新という境目が可能な限りなくなっていくとよいのかなと捉えている

    • 例 • パッチバージョンはテストがパスしていればオートマージする • 当番制にして毎週対応する • など、チームにあったタイミングを決めておけると安心感・安定感がうまれてくる • これがないと「ま…まだ耐えれる…」みたいな状況に陥りがち
  20. 32 明日からコツコツが勝つコツするためのTips コマンドを実行してみる • composerにある便利なコマンドを実行してみましょう(2つ) • 手元で完結するので誰にも迷惑をかけず(バレずに)確認できる • composer outdated

    --locked --direct • composer.jsonに定義のある更新可能なパッケージをcomposer.lockを参照して表示 • composer audit • 脆弱性のあるパッケージがあるかどうかチェックする • composer updateを実行する際にも簡易チェックされて、必要がある場合はコマンドの 実行を促される
  21. 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 でパッチバージョンの更新のみに絞り込み その他のオプションもあるので マニュアルをみるとよいです
  22. 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:
  23. 40 明日からコツコツが勝つコツするためのTips パッケージ更新を実施してみる • 1つパッケージを更新してみる • composer updateは--dry-runオプションをつければ影響なく手元で確認 できる •

    更新が可能そうな場合は、実際に更新してみましょう • その後、更新をどう受け入れるのか?というのをネクストアクションと して考えればOK!
  24. 43 まとめ • composer updateでパッケージの更新ができる • 更新が滞れば滞るほど大変に… • そのためにコツコツ更新してく必要がある •

    更新に気付く、更新を実施するの2つのタイミングを意識す るのが大事! • 小さくコツコツはじめてコツコツ積み上げていきましょう!
  25. 青ごへいもち / @blue_goheimochi 大橋 佑太 株式会社リンケージ ランニング, サッカー, フットサル, キャンプ

    浜松まつり, PUBG MOBILE, けん玉 さわやかのげんこつハンバーグ おおはし ゆうた 静岡県浜松市中央区小豆餅 出身 東海勢(出身or在住)