t28.dev

Dependabot に入門したいのでドキュメントから大枠を掴む

2024/1/27
Tech

プライベート/お仕事用のリポジトリで Dependabot を使ってみるか〜ってなったのですが、「色々あるんだね…」ってなったので、1つ1つ調べてみる。

デフォルト設定

(前置き) 依存関係を定期的に更新したい

今どきの Webアプリは (このブログも) 多くのオープンソースパッケージに依存する形で構築されています。 そのため、依存しているパッケージのバージョンを管理することも Web アプリのメンテナンスの 1 つになっています。

(Web アプリとパッケージの) 依存関係の管理とは、パッケージのバージョンを維持すること…ではなく、脆弱性・バグ・新機能のために最新版に更新することです。 「新機能は要らないから、必要な修正パッチが入ったバージョンだけ更新する」という方針は現実のオープンソースでは取れません。 また、定期的な更新を行うことで迅速な更新が必要なときに備えることが重要です。

…ってことで、依存関係を定期的に更新したい

Dependabot

Dependabot は GitHub が提供しているコードセキュリティに関連する機能の一部であり、 さらに Dependabot 自体は 3つの機能の総称です。

  1. 📣 Dependabot alerts

    脆弱性のある依存関係を使用しているリポジトリを検出すると、GitHub は Dependabot alertsを送信します。

  2. 🔒 Dependabot security updates

    Dependabot は、セキュリティアップデートプログラムを使用してプルリクエストを発行することにより、脆弱性のある依存関係を修正できます。

  3. 🆕 Dependabot version updates

    Dependabot を使用して、使用するパッケージを最新バージョンに更新しておくことができます。

(同じような名前でややこしいので、勝手に emoji を付ける)

📣 Dependabot alerts

概要

📣 Dependabot alerts は脆弱性を含むパッケージに依存していることを通知する機能です。 Dependabot はデフォルトブランチをスキャンして、安全でない依存関係を検出します。

通知は以下のタイミングで行われます。

  • GitHub Advisory Database に新しいアドバイザリが追加されたとき
  • 依存しているパッケージまたはバージョンを変更したとき

GitHub Advisory Database は GitHub 上で参照できる公開された脆弱性の一覧です。 📣 Dependabot alertsをトリガーするのは GitHub によってレビューされた Advisory のみのため、全ての脆弱性の情報を受け取ることや、潜在的な脆弱性を見つけることは出来ません

設定方法

Enable ボタンをクリックするだけ

通知の確認

出てる出てる…(1週間くらい前に報告された Vite の脆弱性が…)。 monorepo の場合 package.json と lock ファイルそれぞれに対して通知が出るので量がすごい🥺

🔒 Dependabot security updates

概要

🔒 Dependabot security updates は脆弱性を含むパッケージを修正するための pull request を自動で作成する機能です。 📣 Dependabot alerts が通知されたときに パッチを含む最小バージョンへ更新する pull request を作成します。

設定方法

📣 Dependabot alerts を有効にした後に、Enable ボタンをクリックするだけ

構成

というような、構成も行える。

Pull request の確認

Dependabot alerts に対して pull request が作成されていることが分かる🥳

Pull request を merge すると、closed になる✌️

🆕 Dependabot version updates

概要

🆕 Dependabot version updates も 🔒 Dependabot security updates と同様に pull request を自動で作成する機能です。 🔒 Dependabot security updates と違って、🆕 Dependabot version updates は 最新バージョンへ更新する pull request を作成します。

🔒 Dependabot security updates は 📣 dependabot alerts の通知をトリガーに pull request を作成します。 一方、🆕 dependabot version updates は pull request の頻度の設定 に従って パッケージの最新バージョンを確認して脆弱性の有無に関係なく pull request を作成し続けます。

設定方法・構成

Enable ボタンをクリックすると、設定ファイル (.github/dependabot.yml) の編集画面に移行する。

必須項目だけの最低限な設定例としては、

version: 2
updates:
  - package-ecosystem: "npm" # npm の更新を管理したい!
    directory: "/" # root にマニフェストファイル(package.json) あるよ
    schedule:
      interval: "weekly" # 毎週チェックよろしく!

3 つの機能の比較

トリガーのタイミングやってくれること設定
📣 Dependabot alertsGitHub Advisory Database で脆弱性が公開されたとき通知 (Security タブ)Settings タブ
🔒 Dependabot security updates📣 Dependabot alerts で通知されたときPull request 作成Settings タブ
🆕 Dependabot version updatesschedule.interval に従って確認したパッケージに最新版があったときPull request 作成.github/dependabot.yml を編集する

まとめ

元々のモチベーション (依存関係を定期的に更新したい) に対する Dependabot の使い方としては、全部使うって感じ。

  • 📣 Dependabot alerts で脆弱性を監視しつつ
  • 🔒 Dependabot security updates で脆弱性対応用の pull request を作って貰いつつ
  • 🆕 Dependabot version updates で作られた pull request で依存関係を最新版に保っておく

.github/dependabot.yml の設定項目 を調整しつつ、自動化を模索する

余談 (pnpm ユーザー向け)

pnpm を使っている場合、package-ecosystem の値は npm 🥳

参考: https://twitter.com/dependabot/status/1750977628167606640