🤖

Dependabotを導入して継続的なバージョンアップをしようとしている話

2023/12/14に公開

はじめに

以前あるプロジェクトで、ライブラリのバージョンアップができておらず痛い目に遭ったのがきっかけです。

きっかけ

ある日、アプリにバグが発生していると報告があり調査を進めると、原因はライブラリのバグのようでした。そのライブラリのGitHubを確認してみると、既にそのバグに対応したパッチがリリースされていたので、バージョンアップして解決かと安堵したのも束の間。プロジェクトで使用しているメジャーバージョンは既にサポートされておらず、適用できるパッチがありませんでした…😭

メジャーバージョンを上げようとすると、影響範囲が大きく対応完了まで時間がかかってしまいます。また、プロジェクトのコード側でハンドリングするのも難しそうなので、仕方なくライブラリのコードを直接書き換えるスクリプトを作成して対応を行いました…。

なぜ継続的なバージョンアップが必要か

上記のようにパッチを適用できないと、バグだけでなく脆弱性にも対応できないので、セキュリティリスクも高まります。また、プロジェクトのライブラリを一斉にバージョンアップしようとすると変更範囲が多くなり、バグを生む可能性も高まります。(後回しにしたくもなります🙈)

なので、継続的なバージョンアップが大切だと感じました。

Dependabotの導入

まずはDependabotを導入するところから始めてみました。
Dependabotは、使用しているライブラリのアップデートを定期的に確認して、プルリクエストまで提出してくれるGitHubの機能です。

.github/dependabot.ymlを作成し、デフォルトブランチにコミットするだけで使用できます。
GitHubのページで何か設定をONにする必要はありません。

今回は試しに、Flutterのプロジェクトに導入してみました。

.github/dependabot.yml
version: 2

updates:
  - package-ecosystem: pub
    directory: /
    schedule:
      interval: weekly

上記コードは最低限の設定になります。
以下のように細かい設定も可能です。

  • モノレポ構成にも対応できる
  • 特定のライブラリだけ、allowignoreできる
  • reviewersを指定できる (別途CODEOWNERSで指定がある場合は、そちらも適用されます。)

設定項目については、公式のドキュメントが参考になります。
https://docs.github.com/ja/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

導入後の挙動

設定後、intervalで指定した時間を待つことなく、(自分の環境だと)10分程でアップデートのプルリクエストが作成されました。

ただ、自分が把握しているアップデートのあるライブラリのプルリクエストが見当たりません。
調べてみるとデフォルトでは、未解決のバージョンアップが5つあると、それ以上はプルリクエストが作成されないようです。
この個数は、open-pull-requests-limitで変更できそうです。

おわりに

Dependabotには、Dependabot alertsという脆弱性のあるライブラリを検知し一覧にしてくれる機能もあります。
このように、脆弱性やアップデートを可視化できるので、とりあえず導入するだけでも危機感を感じることができて良さそうです。
導入してまだ日が浅いので、具体的な運用の方針などが決まったらまた記事にできればと思います。

ispec

Discussion