Check! GitHub Dependabot について知る
Prologue
こんにちは、 @dz_ こと大平かづみです。
GitHub の "Dependabot" をおぼろげにしか把握してなかったので、その役割を整理してみます。
GitHub Dependabot を知る
概要
Dependabot は、GitHub がホストしているボットで、リポジトリ内の依存関係をチェックし、必要に応じてアラートの通知や、更新の候補をプルリクエストとして発行してくれます。主に、下記の機能を担います。
主な機能 | 概要 |
---|---|
Dependabot alerts | 脆弱性が検知されたとき、アラートの通知を行う |
Dependabot security updates | 検知された脆弱性に対して、対策を提案する |
Dependabot version updates | 各種パッケージのバージョンの更新をチェックし、通知および対策を提案する |
背景
Dependabot 自体は、2019 年に GitHub に買収され、現在は GitHub がホストしています。経緯は下記をご参考ください。
Dependabot alerts
Dependabot は下記の契機でリポジトリ内の依存関係の検査を行い、脆弱性のある依存関係を検出すると、 Dependabot alert を発行します。依存関係グラフ(dependency graph) がサポートするパッケージが対象です。
- GitHub Advisory Database に新しい脆弱性が報告されたとき
- リポジトリの 依存関係グラフ(dependency graph) に変更があったとき
検出された alerts は、リポジトリの「Security」の「Dependabot alerts」から確認できるほか、admin 権限をもつユーザーに通知されます。
なお、他の権限を持たないユーザーにはこの「Dependabot alerts」は表示されません。
Dependabot alerts は、パブリックリポジトリ、およびプライベートリポジトリで利用できます。(プライベートリポジトリは、オーナーの設定による)有効/無効は、リポジトリまたはアカウント(または Organization)の「Settings」の「Security & analysis」から変更可能です。
通知を受け取る方法を変更したい場合は、アカウントの「Settings」の「Notifications」から、確認・変更できます。
詳しくは下記をご参照ください。
- About alerts for vulnerable dependencies - GitHub Docs
- GitHub Advisory Database のセキュリティ脆弱性を参照する - GitHub Docs
- 脆弱性のある依存関係の通知を設定する - GitHub Docs
Dependabot security updates
Dependabot security updates が有効であるリポジトリでは、脆弱性が検出され前述の Dependabot alerts が発生すると、Dependabot は自動的に修正を試み、プルリクエストを発行します。
Dependabot が発行したプルリクエストは、発行された後も依存関係の検査を行っており、必要に応じて適した修正内容に更新されます。また、 @dependabot rebase
や @dependabot recreate
などのコメントコマンドを用いて手動で更新することもできます。
Dependabot security updates 機能は、依存関係グラフと Dependabot alerts が有効であるリポジトリで利用でき、有効/無効は、リポジトリまたはアカウント(または Organization)の「Settings」の「Security & analysis」から変更可能です。
詳しくは下記をご参照ください。
Dependabot version updates
前述の Dependabot security updates が脆弱性解消のため更新を行うに対し、Dependabot version updates は依存関係のバージョン更新をプルリクエストを発行して提案してくれます。
Dependabot version updates は npm などの主要なパッケージをサポートしており、GitHub Actions のアクションのバージョンを検査することもできます。
また、Dependabot security updates と同様にプルリクエストを発行した後も対象を検査しており、必要に応じてプルリクエストを更新します。コメントコマンドによる手動更新もできます。
Dependabot version updates の状況は、「Insights」の「Dependency graph」の「Dependabot」タブから確認することができます。これは、admin 権限を持つユーザーのみ閲覧可能です。
なお、Dependabot version updates は初期は無効であり、 .github/dependabot.yml
を配置することによって有効化、設定します。例えば、下記は npm のバージョン更新を有効にするための記述の例です。
version: 2
updates:
# npm のバージョン更新を有効にする
- package-ecosystem: "npm"
# 「root」ディレクトリで「package.json」と「lock」ファイルを探す
directory: "/"
# npm レジストリの更新を毎日(平日)チェックする
schedule:
interval: "daily"
詳しくは下記をご参照ください。
- GitHub Dependabot のバージョンアップデートについて - GitHub Docs
- バージョンアップデートの有効化と無効化 - GitHub Docs
- 依存関係の更新の設定オプション - GitHub Docs
- Dependabot でアクションを最新に保つ - GitHub Docs
関連
依存関係グラフ (dependency graph)
すでに文中に登場している 依存関係グラフ (dependency graph) は、リポジトリに関連する依存関係をサマライズしてくれるもので、パブリックリポジトリ、およびプライベートリポジトリで利用可能です。(プライベートリポジトリは、オーナーの設定による)
GitHub は、リポジトリにある各種の lock ファイルを参照し、依存関係を把握していて、「Insights」の「Dependency graph」から確認することができます。
リポジトリ内で利用しているパッケージは「Dependencies」タブで、そのリポジトリのパッケージを利用しているリポジトリは「Dependents」タブで確認することができます。
Prologue
わたしの場合、気づくと Dependabot alerts が大量に溜まっているので、ちゃんとこまめに対応していきたいものです…
ちなみに、Dependabot による GitHub Actions のアクションのバージョン更新が気になって検証したので、追って記事にするつもりです🚀
Discussion