Check! GitHub Dependabot について知る

7 min read読了の目安(約6400字

Prologue

こんにちは、 @dz_ こと大平かづみです。

GitHub の "Dependabot" をおぼろげにしか把握してなかったので、その役割を整理してみます。

GitHub Dependabot を知る

概要

Dependabot は、GitHub がホストしているボットで、リポジトリ内の依存関係をチェックし、必要に応じてアラートの通知や、更新の候補をプルリクエストとして発行してくれます。主に、下記の機能を担います。

主な機能 概要
Dependabot alerts 脆弱性が検知されたとき、アラートの通知を行う
Dependabot security updates 検知された脆弱性に対して、対策を提案する
Dependabot version updates 各種パッケージのバージョンの更新をチェックし、通知および対策を提案する

背景

Dependabot 自体は、2019 年に GitHub に買収され、現在は GitHub がホストしています。経緯は下記をご参考ください。

https://dependabot.com/blog/hello-github/

Dependabot alerts

Dependabot は下記の契機でリポジトリ内の依存関係の検査を行い、脆弱性のある依存関係を検出すると、 Dependabot alert を発行します。依存関係グラフ(dependency graph) がサポートするパッケージが対象です。

  • GitHub Advisory Database に新しい脆弱性が報告されたとき
  • リポジトリの 依存関係グラフ(dependency graph) に変更があったとき

https://docs.github.com/ja/code-security/supply-chain-security/about-alerts-for-vulnerable-dependencies

検出された alerts は、リポジトリの「Security」の「Dependabot alerts」から確認できるほか、admin 権限をもつユーザーに通知されます。

GitHub Dependabot alerts

なお、他の権限を持たないユーザーにはこの「Dependabot alerts」は表示されません。

GitHub Secuirty view for outside people

Dependabot alerts は、パブリックリポジトリ、およびプライベートリポジトリで利用できます。(プライベートリポジトリは、オーナーの設定による)有効/無効は、リポジトリまたはアカウント(または Organization)の「Settings」の「Security & analysis」から変更可能です。

Configure Dependabot alerts on a repository

通知を受け取る方法を変更したい場合は、アカウントの「Settings」の「Notifications」から、確認・変更できます。

Configure Dependabot alerts notifications

詳しくは下記をご参照ください。

Dependabot security updates

Dependabot security updates が有効であるリポジトリでは、脆弱性が検出され前述の Dependabot alerts が発生すると、Dependabot は自動的に修正を試み、プルリクエストを発行します。

https://docs.github.com/ja/code-security/supply-chain-security/about-dependabot-security-updates

Dependabot が発行したプルリクエストは、発行された後も依存関係の検査を行っており、必要に応じて適した修正内容に更新されます。また、 @dependabot rebase@dependabot recreate などのコメントコマンドを用いて手動で更新することもできます。

Pull request raised by Dependabot security updates

Dependabot security updates 機能は、依存関係グラフと Dependabot alerts が有効であるリポジトリで利用でき、有効/無効は、リポジトリまたはアカウント(または Organization)の「Settings」の「Security & analysis」から変更可能です。

Configure Dependabot security updates

詳しくは下記をご参照ください。

Dependabot version updates

前述の Dependabot security updates が脆弱性解消のため更新を行うに対し、Dependabot version updates は依存関係のバージョン更新をプルリクエストを発行して提案してくれます。

https://docs.github.com/ja/code-security/supply-chain-security/about-dependabot-version-updates

Dependabot version updates は npm などの主要なパッケージをサポートしており、GitHub Actions のアクションのバージョンを検査することもできます。

また、Dependabot security updates と同様にプルリクエストを発行した後も対象を検査しており、必要に応じてプルリクエストを更新します。コメントコマンドによる手動更新もできます。

Pull request raised by Dependabot version updates

Dependabot version updates の状況は、「Insights」の「Dependency graph」の「Dependabot」タブから確認することができます。これは、admin 権限を持つユーザーのみ閲覧可能です。

Dependabot version update status

なお、Dependabot version updates は初期は無効であり、 .github/dependabot.ymlを配置することによって有効化、設定します。例えば、下記は npm のバージョン更新を有効にするための記述の例です。

.github/dependabot.yml
version: 2
updates:
  # npm のバージョン更新を有効にする
  - package-ecosystem: "npm"
    # 「root」ディレクトリで「package.json」と「lock」ファイルを探す
    directory: "/"
    # npm レジストリの更新を毎日(平日)チェックする
    schedule:
      interval: "daily"

詳しくは下記をご参照ください。

関連

依存関係グラフ (dependency graph)

すでに文中に登場している 依存関係グラフ (dependency graph) は、リポジトリに関連する依存関係をサマライズしてくれるもので、パブリックリポジトリ、およびプライベートリポジトリで利用可能です。(プライベートリポジトリは、オーナーの設定による)

https://docs.github.com/ja/github/visualizing-repository-data-with-graphs/about-the-dependency-graph

GitHub は、リポジトリにある各種の lock ファイルを参照し、依存関係を把握していて、「Insights」の「Dependency graph」から確認することができます。

リポジトリ内で利用しているパッケージは「Dependencies」タブで、そのリポジトリのパッケージを利用しているリポジトリは「Dependents」タブで確認することができます。

GitHub Dependency graph

Prologue

わたしの場合、気づくと Dependabot alerts が大量に溜まっているので、ちゃんとこまめに対応していきたいものです…

ちなみに、Dependabot による GitHub Actions のアクションのバージョン更新が気になって検証したので、追って記事にするつもりです🚀