はじめに

全自動卵割機ならぬ全自動茹卵作成機を購入しました。
DX開発事業部の小山です。

今回はDependabotの機能を利用し、ライブラリの管理、特に更新負荷を下げる方法について記載していきます。

Dependabot とは

Dependabot とはGitHub備え付けの「プロジェクトに含まれるライブラリの脆弱性修正やバージョンの更新」を自動化する機能です。

今回はDependabotの機能の1つである「Dependabot version updates」を利用します。
当機能は基本的に各ライブラリのレジストリ(PythonであればPyPI)を参照し、後述する設定ファイル(dependabot.yml)の定義及びマニフェストファイル(Pythonであればrequirements.txtやpyproject.toml)に準じて必要があればPull Requestを作成します。

今までは人力でレジストリを確認、変更用のPRを切る……
その他種々の管理負荷が存在していましたが、Dependabotを利用すれば自動でPRを作成してくれます。
別途slackとの連携や自動テストの構築を行なう必要がありますが、リリースノートと差分を確認してPRの承認ボタンを押すだけでライブラリの更新が可能!というところまで自動化することもできます。

有効化の方法

ここからはDependabot version updatesを有効化する方法を記載していきます。
今回はPythonのライブラリの1つ、「jpholiday」を対象にDependabot version updatesを動作させてみます。

このライブラリは日本の祝日を判定するために利用するのですが、祝日法に基づいた内閣府の公式発表と突き合わせて動作確認を行う関係上、最新バージョンでも2027年以降の祝日の正確性については担保されていません。

Dependabot version updatesを利用して、管理負荷を下げつつ継続的な更新を実施していきたいと思います。

まずはDependabotを有効化したいリポジトリを開きます
(名前がおかしいことについてはスルーしていただけると助かります……)

次にSettingsを押下して、Securityの項目の「Advanced Security」を押下します。

Dependabotの項目にある「Dependabot version updates」
ここの「Enable」を押下し、機能を有効化します。

すると、「dependabot.yml」というDependabot version updatesを動作させるための設定ファイルが作成されます。

これを以下のように書き換えてみました。

version: 2
updates:
  # Python依存関係の更新設定
  - package-ecosystem: "pip"
    directory: "/"

    # スケジュール設定:毎週月曜日の午前9時(JST)にチェック
    schedule:
      interval: "weekly"
      day: "monday"
      time: "09:00"
      timezone: "Asia/Tokyo"

    # 同時にオープンできるPR数の上限(最初は大量のPRが発生するため、5に制限しています)
    open-pull-requests-limit: 5

    # グループ化:バージョンタイプ別に分類してPRをまとめることで、ライブラリ単位ではなく、バージョンタイプごとでPRを管理します
    groups:
      # パッチバージョン更新(1.0.0 → 1.0.1)
      patch-updates:
        patterns:
          - "*"
        update-types:
          - "patch"

      # マイナーバージョン更新(1.0.0 → 1.1.0)
      minor-updates:
        patterns:
          - "*"
        update-types:
          - "minor"

      # メジャーバージョン更新(1.0.0 → 2.0.0)
      major-updates:
        patterns:
          - "*"
        update-types:
          - "major"

    # PRに付与するカスタムラベル
    labels:
      - "dependencies"
      - "python"
      - "dependabot"

Commit changes…を押下して、コミットを実行します。

dependabot.ymlはメインブランチに配置しないと効果がないため、「Commit directly to the main branch」を選択してコミットしていきます。

メインブランチに「.github」ディレクトリ、「dependabot.yml」が作成されました!

スケジューリング設定をしていますが、作成直後はマニフェストファイルの条件等も参照しながら、変更の余地があればすぐにPRを作成します。
今回は「jpholiday」ライブラリのバージョンを1.0.1にしているため、最新のバージョン(1.0.2)に変更するべく稼働します。
上記の画像でも新たにPRが作成されていることが確認できるかと思います。

また、DependabotはPR用のブランチも作成します。

次はPRを見ていきましょう。
PRにはリリースノートも付属しており、変更内容が確認できます。

内容も確認できたので、PRをマージします。
※今回はデモのため実施していませんが、自動テスト等を通じて変更が既存機能に影響がないことを確認してからマージを実施することを推奨します。

PRがマージされました!

作成されるPRの確認

実際に「jpholiday」のバージョンが「1.0.1」から「1.0.2」に変更されているか確認してみましょう。

変更されていますね!
これでライブラリの更新は完了です。

さいごに

今回は、Dependabotによるライブラリの更新負荷を下げる方法をご紹介しました。
本記事が皆様のお役に立てれば幸いです。
最後までお読みいただきありがとうございます。

参考: https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates
参考: https://docs.github.com/ja/code-security/dependabot/working-with-dependabot/dependabot-options-reference
参考: https://github.com/Lalcs/jpholiday