Share
Embed
依存ライブラリの定期的な更新のためにRenovateを導入・運用する / phperkaigi2022
PHPerKaigi 2022の登壇資料です。
https://phperkaigi.jp/2022/
blue_goheimochi
April 10, 2022
Transcript
56 slides
-
Laravel/frameworkは現在v6.20.41を利⽤しており、v8.83.5に更新することができます。 パッチ or マイナー リリースが利⽤可能です ‒ 更新が推奨されます メジャーリリースが利⽤可能です ‒ 更新が可能です
mockery/mockeryは現在1.3.3を利⽤しており、1.5.0に更新することができます。 -
fzaninotto/faker はメンテナンスされなくなりました。このライブラリの利⽤を避けてください。 パッチ or マイナー リリースが利⽤可能です ‒ 更新が推奨されます メジャーリリースが利⽤可能です ‒
更新が可能です mockery/mockeryは現在1.3.3を利⽤しており、1.5.0に更新することができます。 Laravel/frameworkは現在v6.20.41を利⽤しており、v8.83.5に更新することができます。 -
9 依存ライブラリの定期的な更新できてますか?? • composer outdated コマンド • 現在、インストールされているライブラリでアップデート可能なものの ⼀覧が表⽰できる •
ライブラリごとに「現在のバージョン」と「アップデート可能なバー ジョン」が表⽰される • 緑⾊: 置き換えが必要なライブラリ • ⾚⾊: パッチバージョン or マイナーバージョンが更新できるライブラリ • ⻩⾊: メジャーバージョンが更新できるライブラリ -
10 依存ライブラリの定期的な更新できてますか?? • 更新が必要なライブラリの数 • 置き換えが必要なライブラリ: 5個 • パッチバージョン or
マイナーバージョンが更新できるライブラリ: 52個 • メジャーバージョンが更新できるライブラリ: 46個 • composer.jsonに定義してあるライブラリの数 • require: 12個、require-dev: 7個 • ライブラリが利⽤しているライブラリの更新も多い • composer outdated --direct のオプションを付けると composer.jsonに定義してあるライブラリを対象に確認することができる -
置き換えが必要なライブラリ: 0個 パッチバージョン or マイナーバージョンが更新できるライブラリ: 2個 メジャーバージョンが更新できるライブラリ: 4個 置き換えが必要なライブラリ: 1個
パッチバージョン or マイナーバージョンが更新できるライブラリ: 10個 メジャーバージョンが更新できるライブラリ: 9個 -
21 どのように導⼊したか? • Githubを利⽤していれば導⼊⾃体もすごく簡単 • MarketplaceにRenovateのアプリケーションがあるのでインストールす る • 対象にしたいリポジトリを選ぶ •
初期設定のためのプルリクエストが作成されるのでマージする • 無料で利⽤できる -
25 どのように導⼊したか? • 導⼊は簡単 • まずはRenovateの初期設定のためのプルリクエストが作成されるのでマージす る • renovate.jsonのファイルの追加のみ •
バージョンを固定するためのプルリクエストが作成されるのでマージする • composer.lockをみて、composer.jsonのバージョンを固定してくれるので安⼼ • "laravel/framework": "^9.2", → "laravel/framework": "9.5.1", のように固 定される • 更新できるライブラリのプルリクエストが作成されるので確認してマージする -
27 どのように導⼊したか? • composer.json以外にもpackage.jsonやDockerfileに対する更新のプ ルリクエストもしてくれる • プルリクエストの数が多かったのはそのため • どんなプルリクエストが作成されている? •
突然のメジャーバージョンアップ • Laravelを 6.20.41 から 9.5.1 にあげるプルリクエスト • PHPのバージョンも更新しないといけないのでそんなに気軽に上げられない‧‧‧ • パッチ、マイナーバージョンも⼀気に更新される • ⼤丈夫だとは思うが‧‧‧とても不安‧‧‧ -
28 どのように導⼊したか? • composer.json以外にもpackage.jsonやDockerfileに対する更新のプ ルリクエストもしてくれる • プルリクエストの数が多かったのはそのため • どんなプルリクエストが作成されている? •
突然のメジャーバージョンアップ • Laravelを 6.20.41 から 9.5.1 にあげるプルリクエスト • PHPのバージョンも更新しないといけないのでそんなに気軽に上げられない‧‧‧ • パッチ、マイナーバージョンも⼀気に更新される • ⼤丈夫だとは思うが‧‧‧とても不安‧‧‧ ライブラリの更新を怠っていた 付けが回ってきたのを⼀気に実感‧‧‧ プロダクトの初期に導⼊できれば絶対にしたほうがよい -
30 どのように導⼊したか? • メジャーバージョンアップされるライブラリ • LaravelはPHPのバージョンも上げないと無理だが、PHPUnitはあげるこ とができそう • パッチ‧マイナーバージョンアップされるライブラリ •
あげておかしくなるものは(たぶん)なさそう。ただし数が多い。 • 初期設定だと1ライブラリにつき1つのプルリクエストが作成されるた め、1つ1つを検証しながらマージしていくのはちょっとつらい -
31 どのように導⼊したか? • やること • 最新バージョンまで更新できるライブラリは⼀気にあげてしまう • メジャーバージョン更新とマイナー‧パッチバージョン更新で⼀応分ける • やらないこと
• 更新することのできないメジャーバージョンは保留にする • Dockerfileなどの更新は別途対応とし保留にする -
32 どのように導⼊したか? • やること • 最新バージョンまで更新できるライブラリは⼀気にあげてしまう • メジャーバージョン更新とマイナー‧パッチバージョン更新で⼀応分ける • やらないこと
• 更新することのできないメジャーバージョンは保留にする • Dockerfileなどの更新は別途対応とし保留にする Renovateの運⽤を開始した際に作成されるプルリクエストが なるべく少なく、バージョンの更新が⼩さくなるように -
33 どのように導⼊したか? • 気合いで更新‧‧‧! • ここが⼀番⼤変だったかもしれない • プロダクトメンバーを巻き込んで、ライブラリの更新が問題がないか、 全体を動作検証を⾏いました •
既存でプロダクト全体に影響するような⼤きな改修をする際に確認する検証項⽬が あったのでそちらを実施 • ライブラリの更新、サボらずしていこう‧‧‧(決意) -
35 どのように運⽤しているか? • プルリクエスト作成のタイミング • Renovateがプルリクエストを出すブランチ • laravel/frameworkは個別にプルリクエストを作成 • パッチバージョン‧マイナーバージョンのプルリクエストをまとめる
• 週替りの当番制の採⽤ • 慣れるまでの運⽤⽅法 • 対応コスト -
36 どのように運⽤しているか? プルリクエスト作成のタイミング • プロダクトは週1回の定期リリースを実施している • リリース前⽇、リリース当⽇はRenovateがプルリクエストを出し てきても対応しづらい • ⽇中にRenovateがプルリクエストを作成するのも少しノイズ
• 業務時間外にプルリクエストを作成するように設定 • リリース前⽇、リリース当⽇(の朝)も対象外 -
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 -
41 どのように運⽤しているか? laravel/frameworkは個別にプルリクエストを作成 "packageRules": [ { "groupName": "laravel/framework", "matchPackageNames": ["laravel/framework"]
} ] https://docs.renovatebot.com/configuration-options/#groupname renovate.json -
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 -
44 どのように運⽤しているか? 週替りの当番制の採⽤ • 現在チームの開発メンバーは4⼈ • Renovateのプルリクエストを確認する当番を週替りで設定 • 担当が設定されていないとやはり漏れがち、偏りがちになってしまう •
影響範囲を調べるためにコードをしっかり読むことでキャッチアップにもつながってよ かったという声もあり • 新メンバーが⼊った場合にまず⾒てもらうタスクとしても良さそう • 対象のライブラリの影響範囲など分かった事項は都度Wikiに記載し次回移⾏の対応が効 率化できるようにしている -
45 どのように運⽤しているか? 慣れるまでの運⽤⽅法 • いきなり「じゃあ次の週当番お願いします」はつらい • 週1でRenovateのプルリクエストを倒すMTGを設定 • 最初の2〜3週は導⼊を進めた私がメインとなって画⾯共有をしながら「こ れはこの辺が変更点ですねー」など共有しながら対応
• 慣れるまでチームメンバーでメイン担当を交代しつつ回す • 対応⽅法‧⽅針の共有ができた • 2周ほど回して慣れたかなという確認ののちMTGは解体 -
46 どのように運⽤しているか? 対応コスト • プロダクトによってもまちまちだと思う • 現状、週に2〜5程度のライブラリの更新がある • 出社したらプルリクエストが作成されているものを確認し順次対応の ながれ
• 溜め込まなければ差分は⼩さい • 1プルリクエスト10〜30分程度で確認からマージできることが多い • 「ドキュメントだけ更新しました」というのも割とある -
48 どのように運⽤しているか? 更新できないライブラリもプルリクエストが作成されてしまう • PHPのバージョンをあげないと更新できない場合がまれにある • CIが落ちていることで気付いた • composer installが失敗する
• RenovateのPHP環境が新しい?(設定⽅法が分かっていない) • 並⾏でCIが回っているとより安⼼感が出るかなと思います • 対象のライブラリは個別でプルリクエストが作成されるように設定 • プルリクエストが作成されたらそのままクローズしている • 少しでもバージョンが上がると再度プルリクエストが作成されるので忘れるさられることはない -
49 どのように運⽤しているか? 更新頻度が⾼いライブラリがある • aws/aws-sdk-phpなど • 実質使っているのはS3へのアップロードなどだが、いろいろな機能があるため更新 はたくさん⾶んでくる • 昨⽇マージしたけど、またプルリクエストが作成されまた確認するのか‧‧‧
• プルリクエストが単体でくるように設定 • マージのタイミングをリリース前⽇のプルリクエストの更新がされなくなったタイ ミングで⾏っている • 影響範囲の検証をするコストを可能な限り削減 -
51 まとめ • Renovateを使うとライブラリの更新が容易に • 既存のプロジェクトでライブラリの更新が滞っている場合 • 導⼊が少し⼤変。気合で乗り切りましょう! • 新たにプロジェクトを⽴ち上げたり、作成して間もない場合は今すぐ
Renovateを導⼊しましょう! • 開発プロセスに応じた運⽤を考えましょう! -
blue_goheimochi ⼤橋 佑太 株式会社オウケイウェイヴ PHP(Laravel), JavaScript(Vue.js/Nuxt.js), ランニング, サッカー, フットサル, 浜松まつり,
PUBG Mobile, さわやかのげんこつハンバーグ おおはし ゆうた -
55 • 各種オプション • --minor-only:マイナー‧パッチバージョンが更新できるライブラリ のみ表⽰する • --direct:更新できる、composer.jsonに定義されているライブラリの みを表⽰する composer
outdated https://getcomposer.org/doc/03-cli.md#outdated -
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のライブラリの移⾏