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

依存ライブラリの定期的な更新のためにRenovateを導入・運用する / phperkaigi...

依存ライブラリの定期的な更新のためにRenovateを導入・運用する / phperkaigi2022

PHPerKaigi 2022の登壇資料です。
https://phperkaigi.jp/2022/

blue_goheimochi

April 10, 2022
Tweet

More Decks by blue_goheimochi

Other Decks in Technology

Transcript

  1. fzaninotto/faker はメンテナンスされなくなりました。このライブラリの利⽤を避けてください。 パッチ or マイナー リリースが利⽤可能です ‒ 更新が推奨されます メジャーリリースが利⽤可能です ‒

    更新が可能です mockery/mockeryは現在1.3.3を利⽤しており、1.5.0に更新することができます。 Laravel/frameworkは現在v6.20.41を利⽤しており、v8.83.5に更新することができます。
  2. 9 依存ライブラリの定期的な更新できてますか?? • composer outdated コマンド • 現在、インストールされているライブラリでアップデート可能なものの ⼀覧が表⽰できる •

    ライブラリごとに「現在のバージョン」と「アップデート可能なバー ジョン」が表⽰される • 緑⾊: 置き換えが必要なライブラリ • ⾚⾊: パッチバージョン or マイナーバージョンが更新できるライブラリ • ⻩⾊: メジャーバージョンが更新できるライブラリ
  3. 10 依存ライブラリの定期的な更新できてますか?? • 更新が必要なライブラリの数 • 置き換えが必要なライブラリ: 5個 • パッチバージョン or

    マイナーバージョンが更新できるライブラリ: 52個 • メジャーバージョンが更新できるライブラリ: 46個 • composer.jsonに定義してあるライブラリの数 • require: 12個、require-dev: 7個 • ライブラリが利⽤しているライブラリの更新も多い • composer outdated --direct のオプションを付けると composer.jsonに定義してあるライブラリを対象に確認することができる
  4. 25 どのように導⼊したか? • 導⼊は簡単 • まずはRenovateの初期設定のためのプルリクエストが作成されるのでマージす る • renovate.jsonのファイルの追加のみ •

    バージョンを固定するためのプルリクエストが作成されるのでマージする • composer.lockをみて、composer.jsonのバージョンを固定してくれるので安⼼ • "laravel/framework": "^9.2", → "laravel/framework": "9.5.1", のように固 定される • 更新できるライブラリのプルリクエストが作成されるので確認してマージする
  5. 27 どのように導⼊したか? • composer.json以外にもpackage.jsonやDockerfileに対する更新のプ ルリクエストもしてくれる • プルリクエストの数が多かったのはそのため • どんなプルリクエストが作成されている? •

    突然のメジャーバージョンアップ • Laravelを 6.20.41 から 9.5.1 にあげるプルリクエスト • PHPのバージョンも更新しないといけないのでそんなに気軽に上げられない‧‧‧ • パッチ、マイナーバージョンも⼀気に更新される • ⼤丈夫だとは思うが‧‧‧とても不安‧‧‧
  6. 28 どのように導⼊したか? • composer.json以外にもpackage.jsonやDockerfileに対する更新のプ ルリクエストもしてくれる • プルリクエストの数が多かったのはそのため • どんなプルリクエストが作成されている? •

    突然のメジャーバージョンアップ • Laravelを 6.20.41 から 9.5.1 にあげるプルリクエスト • PHPのバージョンも更新しないといけないのでそんなに気軽に上げられない‧‧‧ • パッチ、マイナーバージョンも⼀気に更新される • ⼤丈夫だとは思うが‧‧‧とても不安‧‧‧ ライブラリの更新を怠っていた 付けが回ってきたのを⼀気に実感‧‧‧ プロダクトの初期に導⼊できれば絶対にしたほうがよい
  7. 30 どのように導⼊したか? • メジャーバージョンアップされるライブラリ • LaravelはPHPのバージョンも上げないと無理だが、PHPUnitはあげるこ とができそう • パッチ‧マイナーバージョンアップされるライブラリ •

    あげておかしくなるものは(たぶん)なさそう。ただし数が多い。 • 初期設定だと1ライブラリにつき1つのプルリクエストが作成されるた め、1つ1つを検証しながらマージしていくのはちょっとつらい
  8. 32 どのように導⼊したか? • やること • 最新バージョンまで更新できるライブラリは⼀気にあげてしまう • メジャーバージョン更新とマイナー‧パッチバージョン更新で⼀応分ける • やらないこと

    • 更新することのできないメジャーバージョンは保留にする • Dockerfileなどの更新は別途対応とし保留にする Renovateの運⽤を開始した際に作成されるプルリクエストが なるべく少なく、バージョンの更新が⼩さくなるように
  9. 33 どのように導⼊したか? • 気合いで更新‧‧‧! • ここが⼀番⼤変だったかもしれない • プロダクトメンバーを巻き込んで、ライブラリの更新が問題がないか、 全体を動作検証を⾏いました •

    既存でプロダクト全体に影響するような⼤きな改修をする際に確認する検証項⽬が あったのでそちらを実施 • ライブラリの更新、サボらずしていこう‧‧‧(決意)
  10. 37 どのように運⽤しているか? プルリクエスト作成のタイミング "schedule": [ "before 9am and after 10pm

    on Monday", "before 9am on Tuesday", "after 10pm on Thursday", "before 9am and after 10pm on Friday", "every weekend” ], https://docs.renovatebot.com/presets-schedule/ renovate.json
  11. 43 どのように運⽤しているか? パッチバージョン‧マイナーバージョンのプルリクエストをまとめる "packageRules": [ { "groupName": "all dependencies for

    the minor version (PHP)", "matchLanguages": ["php"], "matchUpdateTypes": ["minor"], "excludePackageNames":[ "laravel/framework” ] } ] https://docs.renovatebot.com/configuration-options/#groupname renovate.json
  12. 44 どのように運⽤しているか? 週替りの当番制の採⽤ • 現在チームの開発メンバーは4⼈ • Renovateのプルリクエストを確認する当番を週替りで設定 • 担当が設定されていないとやはり漏れがち、偏りがちになってしまう •

    影響範囲を調べるためにコードをしっかり読むことでキャッチアップにもつながってよ かったという声もあり • 新メンバーが⼊った場合にまず⾒てもらうタスクとしても良さそう • 対象のライブラリの影響範囲など分かった事項は都度Wikiに記載し次回移⾏の対応が効 率化できるようにしている
  13. 46 どのように運⽤しているか? 対応コスト • プロダクトによってもまちまちだと思う • 現状、週に2〜5程度のライブラリの更新がある • 出社したらプルリクエストが作成されているものを確認し順次対応の ながれ

    • 溜め込まなければ差分は⼩さい • 1プルリクエスト10〜30分程度で確認からマージできることが多い • 「ドキュメントだけ更新しました」というのも割とある
  14. 48 どのように運⽤しているか? 更新できないライブラリもプルリクエストが作成されてしまう • PHPのバージョンをあげないと更新できない場合がまれにある • CIが落ちていることで気付いた • composer installが失敗する

    • RenovateのPHP環境が新しい?(設定⽅法が分かっていない) • 並⾏でCIが回っているとより安⼼感が出るかなと思います • 対象のライブラリは個別でプルリクエストが作成されるように設定 • プルリクエストが作成されたらそのままクローズしている • 少しでもバージョンが上がると再度プルリクエストが作成されるので忘れるさられることはない
  15. 49 どのように運⽤しているか? 更新頻度が⾼いライブラリがある • aws/aws-sdk-phpなど • 実質使っているのはS3へのアップロードなどだが、いろいろな機能があるため更新 はたくさん⾶んでくる • 昨⽇マージしたけど、またプルリクエストが作成されまた確認するのか‧‧‧

    • プルリクエストが単体でくるように設定 • マージのタイミングをリリース前⽇のプルリクエストの更新がされなくなったタイ ミングで⾏っている • 影響範囲の検証をするコストを可能な限り削減
  16. 56 • Fakerのライブラリは fakerphp/faker に引き継がれてメン テナンスが進んでいる • https://twitter.com/taylorotwell/status/1321091021342650377 • composer.jsonの指定を変更すればOK

    • fzaninotto/fake”: “1.9.2” → “fakerphp/faker”: “1.19.0” • バージョンがあがっていると思うのでバージョン番号を更新 • composer remove --dev fzaninotto/faker を実⾏ fzaninotto/fakerのライブラリの移⾏