GitHub Dependabotで依存パッケージの更新を確認する方法

GitHub Dependabotで依存パッケージの更新を確認する方法
  • URLをコピーしました!

npmやpipを使っていると、依存パッケージに新しい版が出ても、なかなか気づけません。気づいたときには更新対象が何十件も溜まっていて、どこから手を付ければいいのか分からなくなる。

GitHubのDependabotは、その更新を自動で見つけてPull Requestの形にしてくれる仕組みです。ただし、届いたPull Requestをそのままマージしてよいわけではありません。

dependabot.ymlの最小構成と、取り込む前に何を確認すればよいかを整理します。

目次

Dependabotは「更新を見つけてPull Requestにする」仕組み

小さなWebサイトやツールでも、npm、pip、Bundlerといったパッケージ管理を使えば、外部ライブラリへの依存は数十件になります。

開発が一段落した後に、どれへ新しい版が出たのかを毎回手で調べるのは、正直かなり面倒ですよね。

Dependabot version updatesは、指定したパッケージ管理方式とディレクトリを定期的に確認して、利用できる更新が見つかったときに依存関係を書き換えたPull Requestを作ります。

更新内容が通常のPull Requestとして届くので、変更ファイルやCIの結果を見てから取り込めるわけです。

気をつけたいのは、Dependabotを「安全性まで自動で保証してくれる機能」と捉えないことです。Dependabotが受け持つのは更新候補の発見と、変更案の作成まで。

更新後もアプリケーションが正しく動くか、仕様変更の影響がないか、いつ本番へ反映するか。この判断はリポジトリを管理する人に残ります。

結論は小さく始めて人間が確認する

初めて設定するなら、すべてのパッケージ管理方式を毎日確認する構成へいきなり寄せる必要はありません。

影響を把握しやすいリポジトリで、1つのエコシステムを週1回確認するところから始めるのが現実的でしょう。

npmを使う小規模なサイトなら、次のような流れになります。

  1. .github/dependabot.ymlにnpmの設定を追加する
  2. 更新確認の間隔を週1回にする
  3. Dependabotが作成したPull Requestを一覧で確認する
  4. 版の変化、変更ファイル、テスト結果を見る
  5. ローカルや検証環境で主要機能を動かす
  6. 問題がなければ通常のPull Requestと同じ手順でマージする

この流れなら、更新候補を見逃しにくくしながら、確認の工程も省かずに済みます。

Pull Requestが多すぎると感じたら、後から頻度や同時に開く件数、グループ化を調整できます。最初の設定を完璧に決めようと悩まなくて大丈夫です。

設定前に確認しておくこと

設定ファイルを書く前に、リポジトリの構成を押さえておきましょう。

ここが曖昧なままサンプルをコピーすると、Dependabotが対象のマニフェストを見つけられなかったり、想定と違う場所を監視したりします。

  • どのリポジトリで更新を管理するか
  • 既定ブランチはどれか
  • npm、pip、Composer、GitHub Actionsなど、何で依存関係を管理しているか
  • package.jsonやrequirements.txtなどのマニフェスト、ロックファイルがどこにあるか
  • Pull Request作成後に実行できるテストやビルドがあるか
  • 本番へ反映する前に確認できる検証環境があるか
  • 非公開レジストリや別の非公開リポジトリにある依存関係を使っているか

エコシステムごとに指定するのは、package-ecosystem、directoryまたはdirectories、schedule.intervalの3つです。

非公開の依存関係を使っている場合は、Dependabotがその取得先へアクセスできるよう、追加の設定が必要になることもあります。

テストは設定上の必須項目ではありません。とはいえ、テストがなければ更新の安全性を判断する材料は乏しくなります。

CIを組んでいないなら、ログイン、フォーム送信、表示、データ保存など、壊れると困る操作を先に確認リストとして書き出しておくのがおすすめです。

dependabot.ymlの最小構成

Dependabotの細かな挙動は、既定ブランチに置いた.github/dependabot.yml、または.github/dependabot.yamlで決まります。

version updatesを使うには、まずこのファイルをリポジトリへ追加してください。書く項目自体は多くありません。対象のエコシステムと場所、確認の間隔を指定すれば動きます。

npmを週1回確認する設定例

ルートディレクトリにpackage.jsonがあるnpmプロジェクトなら、最小構成はこれだけです。

version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"

npmの依存関係を対象に、ルートディレクトリを週1回確認する設定になります。プロジェクトのマニフェストがサブディレクトリにあるなら、directoryを実際の場所へ書き換えてください。

各項目の意味

version

設定ファイルの構文バージョンです。必須項目なので、ファイルの先頭に2を書きます。

updates

監視したいパッケージ管理方式ごとの設定を並べる場所です。

package-ecosystem

npm、pip、Docker、GitHub Actionsなど、更新対象の種類を指定します。使える値を思い込みで入力せず、対象のエコシステムがGitHubの対応一覧に含まれるかを確かめておきましょう。

directory

マニフェストや依存関係定義ファイルの場所です。ルートなら/を指定します。モノレポのようにプロジェクトが複数の場所へ分かれているなら、directoriesを使う方法もあります。

schedule.interval

新しい版を確認する頻度です。基本の構成ではdaily、weekly、monthlyなどを指定できます。

選べる間隔は今後変わる可能性もあるため、公開前に公式のオプションリファレンスで確認しておくと安心です。

複数のパッケージ管理方式を使う場合

npmとGitHub Actionsの両方を更新したいなら、updatesの下に設定を分けて並べます。

GitHub Actionsについては、ワークフローが標準の.github/workflowsにある場合でも、directoryにはルートの/を指定します。ここは迷いやすいところですね。

最初から対象を増やしすぎると、作成されるPull Requestが一気に増えます。まず1種類で動きを確かめ、レビューに使える時間とテスト環境を見ながら足していく方が管理しやすいでしょう。

設定を反映して動作状況を確認する

設定ファイルを既定ブランチへ追加または更新すると、Dependabotは指定したエコシステムを設定した間隔で監視します。

利用できる更新を見つけると、設定の内容に従って依存関係を変更するPull Requestが作られます。

GitHubの設定画面からDependabot version updatesを有効にして、.githubディレクトリに基本のdependabot.ymlを作る流れも用意されています。

画面名や項目の位置は変わりやすいので、実際のリポジトリで現在の表示を確かめながら進めてください。

反映後に見ておきたいのが、Dependency graph内にあるDependabotの画面です。監視対象のパッケージ管理方式と、最後に新しい版を確認した時点が表示されます。

設定ファイルを置いただけで終わらせず、想定した対象がきちんと並んでいるかを確認しましょう。

Forkでは、dependabot.ymlが存在してもversion updatesは自動的に有効になりません。元のリポジトリから設定ファイルごと取り込んだ場合も、Fork側で明示的に有効化する操作が必要です。

DependabotのPull Requestを確認する順序

Dependabotが作成したPull Requestは、作者がdependabotになり、初期状態ではdependenciesラベルが付きます。通常のPull Request一覧からでも見分けられるはずです。

自動で作られたからといって、中身を見ずにマージする理由にはなりません。見る順序を決めておくと、判断材料を集めやすくなります。

更新対象と版の変化を確認する

最初に見るのは、どのパッケージがどの版からどの版へ変わるのかという点です。

パッチ、マイナー、メジャーのどれに当たるかを押さえたうえで、対象パッケージのリリースノートや移行案内にも目を通します。

とくにメジャーアップデートでは、利用方法や設定方法そのものが変わる可能性があります。版番号だけで判断せず、自分のコードが使っている機能に影響する変更がないかを見てください。

変更ファイルとCI結果を確認する

次はPull RequestのFiles changedです。マニフェストやロックファイルなど、想定したファイルだけが変わっているかを見ます。

CIを設定しているなら、テスト、ビルド、型チェック、静的解析の結果もここで合わせて確認します。

ただ、CIが成功しても、事業上重要な画面や外部サービスとの連携まで保証されるとは限りません。反対にCIが失敗した場合も、すぐ更新を諦めるのではなく、テスト側の前提が古いのか、更新によって互換性が崩れたのかを切り分けます。

実際の画面や主要機能を確認する

Webサイトなら、トップページが表示されるかだけでなく、問い合わせフォーム、ログイン、決済、予約、管理画面といった重要な流れを検証環境で通しておきます。

ライブラリなら、公開APIや主要な処理を実際に走らせます。

先に決めておきたい3つ
  • 更新確認の担当者
  • 毎回確認する項目
  • 問題が起きたときの戻し方

この3つを事前に決めておくと、Pull Requestが作られたまま放置されにくくなります。Dependabot側の決まりではなく、小規模な運用で更新を続けるための実務上の提案です。

Pull Requestが増えすぎるときの調整

依存関係が多いプロジェクトでは、DependabotのPull Requestが短期間で積み上がり、確認が追いつかなくなることがあります。調整に使える設定は主に4つです。

設定できること
schedule確認の頻度に加え、曜日、時刻、タイムゾーンを指定する
open-pull-requests-limit同時に開くPull Requestの数を制限する
groups関連する依存関係の更新を1つのPull Requestへまとめる
ignore特定の依存関係や版を対象から外す

まず見直したいのは更新頻度です。毎日の確認が必要ないなら週1回へ変え、自分やチームがレビューできる曜日と時刻に寄せます。

open-pull-requests-limitは同時に開く件数の上限ですが、値を0にすると、そのエコシステムのversion updates用Pull Requestを停止する設定として扱われます。

件数を絞るつもりで0を入れると更新が届かなくなるので、値の意味を確認してから変更してください。

関連する依存関係をまとめたい場合はgroupsを検討します。まとめればPull Requestの数は減りますが、その分1件あたりの変更範囲は広くなります。

問題が起きたときに原因を切り分けられるか、まとめてテストできる組み合わせかを基準にしましょう。

特定の依存関係や版を対象外にするignoreもあります。複数人で管理するリポジトリなら、Pull Request上のコメントで無視条件を保存するより、設定ファイルへ明示しておく方が、更新されない理由を共同作業者が把握しやすいとGitHubは案内しています。

security updatesとversion updatesを混同しない

Dependabotには役割の違う3つの機能があり、設定する場所もそれぞれ別です。

機能役割設定する場所
Dependabot alerts脆弱性のある依存関係を知らせるリポジトリまたはOrganizationの設定画面
Dependabot security updates脆弱性のある依存関係の更新Pull Requestを作るリポジトリの設定画面
Dependabot version updates新しい版を定期的に探して更新Pull Requestを作る.github/dependabot.yml

dependabot.ymlがなくても、リポジトリ設定でsecurity updatesを有効にしていれば、脆弱な依存関係の更新Pull Requestが作成される場合があります。

一方で、version updatesの自動確認とスケジュール、細かな更新条件はdependabot.ymlで設定します。

3つを同じ設定だと思い込むと、ファイルを置いたのにアラートが出ない、security updatesを有効にしたのに定期更新されない、といった行き違いにつながるので注意してください。

この記事の中心はversion updatesです。脆弱性対応の優先順位、アラートの対象条件、security updatesの有効化状態は、リポジトリごとに別途確認してください。

Dependabotが向いている人・向かない人

向き不向きを分けるのは、機能そのものよりも、作られたPull Requestを確認できる体制があるかどうかです。

  • GitHubで依存関係を管理し、Pull Requestの差分やテスト結果を読める
  • 定期的な更新確認を忘れやすい一人開発や小規模チーム
  • 更新候補を作業一覧へ載せる入口が欲しい
  • Pull Requestを確認する担当者がいない
  • テストを実行できず、検証環境も用意できない
  • 非公開レジストリや特殊なビルド構成で、認証や対応エコシステムの確認が済んでいない

古いシステムで多数の依存関係が止まっている場合は、一度にすべての更新を有効にするより、まず現状のテストを整え、影響を把握しやすい範囲から進める方が安全です。

Dependabotを導入すること自体より、作成されたPull Requestを誰がいつ確認するかを決める方が先になります。

代替手段と組み合わせ方

Dependabotを使わず、パッケージ管理ツールのコマンドで更新候補を手動確認する方法もあります。

更新頻度が低い小規模プロジェクトや、特別な検証手順が必要な環境では、定期的な手動確認の方が運用しやすい場合もあるでしょう。

他の依存関係更新サービスを選ぶ道もあります。どの方法を採るとしても、更新候補を見つける機能と、互換性を確かめて本番へ反映する判断は、切り分けて考えます。

Dependabotを使う場合も、CI、検証環境、リリースノートの確認、バックアップやロールバックの手順と組み合わせて、はじめて継続的な更新作業として回り始めます。

自動マージを検討するのは、テストの網羅範囲と失敗時の影響を把握した後です。

まとめ

Dependabot version updatesは、依存パッケージの新しい版を定期的に確認し、更新案をPull Requestという見える形にしてくれます。

最小構成で書くのは、設定バージョン、対象のエコシステム、マニフェストの場所、確認頻度だけ。

導入後に効いてくるのは、Pull Requestが自動で作られることではなく、版の変化、変更ファイル、CI、主要機能を確認する流れを持っているかどうかです。

  • 1つのエコシステムを週1回確認する設定から始める
  • 版の変化、変更ファイル、CI、主要機能の順に確認する
  • レビュー量に合わせて頻度、上限、グループ化を調整する

設定を書く前に、誰が確認するか、何をテストするか、問題があったらどう戻すかを決めておいてください。

更新通知で終わらせず、通常のPull Requestレビューへつなげる。これが無理なく続けるためのポイントです。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

サイト「インターネットビジネスの世界」運営者。ビジネスプロデューサー、著述業。メルマガやブログを書きながら、好きなことをしてのんびりと生きています。

目次