メインコンテンツへスキップ
友田 陽大
Dependabot・依存関係の自動更新
Dependabot
サプライチェーンセキュリティ
脆弱性管理
DevSecOps
セキュリティ
GitHub Actions

Dependabot アラート・セキュリティ更新・脆弱性対応ガイド:検知で終わらせず、SLA で回す運用設計

GitHub の Dependabot アラートとセキュリティ更新を本番品質で運用するガイド。公式ドキュメント(2026年6月時点)に忠実に、アラートとセキュリティ更新の違い、有効化の前提条件、auto-triage rules(自動トリアージ)でアラート疲れを防ぐ方法、grouped security updates、SLA を持ったトリアージ運用、REST API での可観測性までを、SCA と SAST/DAST の役割分担を含めて実コードで解説します。

公開日
読了時間
8分
著者
友田 陽大
シェア

脆弱性スキャナを入れて満足し、アラートのバッジが二桁になったまま誰も見ていない——これはセキュリティ運用で最もよくある失敗です。Dependabot のアラートは検知にすぎません。価値が出るのは「検知 → トリアージ → 修正 → クローズ」がSLA を持って回り始めてからです。

この記事はDependabot 本番運用ガイドの各論として、脆弱性対応にフォーカスします。設定の話(dependabot.yml)は設定完全ガイドに譲り、ここではアラート・セキュリティ更新・トリアージの運用を掘り下げます。

この記事のルール:機能名・前提条件は GitHub 公式ドキュメント(2026年6月時点) に基づきます。脆弱性対応は仕様変更の影響が大きい領域なので、本番運用前に必ず公式の Dependabot alerts ドキュメントで最新を確認してください。


1. アラートとセキュリティ更新は「検知」と「修正」

Dependabot alertsDependabot security updates
役割検知:脆弱な依存を通知修正:パッチがある脆弱性を直すPRを自動生成
対象依存グラフ上のすべての脆弱な依存そのうち修正版が存在するもの
コード変更しないする(manifest / ロックファイルを更新)
何で有効化セキュリティ設定でONセキュリティ設定でON(アラートが前提)

アラートは何で生まれるか——公式によれば2つの引き金です。

  1. GitHub Advisory Database に新しい脆弱性が追加されたとき
  2. リポジトリの依存を更新するコミットをpushしたとき(依存グラフが変化)

GitHub はデフォルトブランチを継続的にスキャンします。アラートには影響を受けるファイルへのリンク・脆弱性の詳細と深刻度(severity)・(あれば)修正バージョンが含まれます。

そして運用上うれしいのが自動クローズ:「Dependabot のセキュリティ更新PRがマージされると、対応するアラートは自動でクローズされる」。手で閉じ忘れる事故が起きません。


2. 有効化と前提条件(ここを外すと「PRが来ない」)

セキュリティ更新が動くための4条件(公式):

  1. 依存グラフが有効
  2. Dependabot alerts が有効
  3. サポート対象のエコシステム
  4. 依存が manifest かロックファイルに記載されている

設定箇所:

  • リポジトリ単位:Settings → Advanced Security(Code security)で alerts と security updates をON。
  • Organization 単位:Global settings(Advanced Security)で全リポジトリに既定適用。新規リポジトリにも自動で効かせたいならここ。

最頻の落とし穴:「セキュリティ更新が前提条件4を満たさない」。例えば package-lock.json.gitignore していると、公式の言う「manifest かロックファイルに記載」を満たさず、更新対象から外れます。ロックファイルはコミットしましょう。


3. auto-triage rules:アラート疲れを根本から断つ

検知が増えると、今度は**アラート疲れ(alert fatigue)**が運用を殺します。auto-triage rules(自動トリアージ)は、通知が飛ぶ前にアラートを自動で dismiss / snooze する仕組みです。

3.1 GitHub プリセット

GitHub がキュレーションするルール。代表例:

  • Dismiss low impact issues for development-scoped dependencies:本番に影響しにくい npm の開発依存の低影響アラートを自動 dismiss。
  • Dismiss package malware alerts:マルウェア判定の自動 dismiss(既定では無効)。

重要な性質:ルールは通知の前に適用されるため、作成時に自動 dismiss されたアラートは通知すら飛びません。これがノイズ削減の本質です。「通知を後でフィルタ」ではなく「そもそも上げない」。

3.2 カスタムルール

Organization の方針に合わせて、深刻度・スコープ(dev/prod)・パッケージ名・CWE などのメタデータでマッチする独自ルールを作れます。例:

  • 「開発依存(development scope)かつ Low/Medium のアラートは自動 dismiss、本番依存は残す」
  • 「特定の許容済みパッケージのアラートは snooze」

カスタムルールはパブリックリポジトリ、および GitHub Code Security を有効にした Organization リポジトリで利用できます。

設計指針:自動 dismiss はあくまで『本番に影響しない』と論証できるものに限定します。「面倒だから全部 dismiss」は検知の意味を消します。dev スコープ・低影響を出発点に、dismiss した理由がログに残る運用にしてください。


4. grouped security updates:修正PRをまとめる

脆弱性が同時に複数出ると、1つずつPRが来てレビューが破綻します。grouped security updates は、複数の脆弱性修正をエコシステム単位で1PRに集約します。

設定箇所は3つ:

  • リポジトリの Advanced Security 設定
  • Organization の Global settings(Advanced Security)
  • dependabot.ymlgroupsapplies-to: security-updates)で粒度を制御(パッケージ名・依存タイプ・SemVer レベル)
# dependabot.yml — セキュリティ更新を1PRにまとめる例
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "daily"
    groups:
      security:
        applies-to: security-updates
        patterns: ["*"]

公式の制約(覚えておく):

  • 異なるエコシステムをまたいだグループ化はしない
  • セキュリティ更新とバージョン更新を同一PRに混ぜない

5. SLA を持ったトリアージ運用(運用設計の本丸)

ここからがツールではなく運用の話です。世界最高峰を名乗るなら、以下を明文化します。

5.1 深刻度別 SLA を決める

深刻度対応SLA(例)方針
Critical1〜2営業日以内最優先。可能なら即パッチ&デプロイ
High5営業日以内次スプリントを待たず対応
Medium次の定例更新でバージョン更新の波に乗せる
Low / dev-scopeauto-triage で dismiss 検討本番影響が論証できれば抑制

数字は組織の前提(公開サービスか社内か、規制業種か)で変わります。大事なのは**「曖昧にしない」**ことです。

5.2 修正できない脆弱性をどうするか

修正版がまだ無い脆弱性は、セキュリティ更新PRも来ません。このとき取り得る選択肢:

  • snooze(一時停止):修正が出るまで待つ意思決定を記録する。
  • 緩和策(mitigation):到達経路を塞ぐ(該当機能を無効化、入力検証を追加、WAFルール)。
  • 代替ライブラリへ移行:放置が許されない Critical で修正の見込みがないなら、依存そのものを差し替える。

「直せないから放置」ではなく、意思決定を残すのがトリアージです。


6. 可観測性:未対応を「見える化」する

回す運用には計測がいります。Dependabot アラートは REST / GraphQL API でエクスポートできるので、次の指標をダッシュボード化します。

  • 未対応(open)アラート件数(深刻度別)
  • 最古アラートの経過日数(SLA 違反の早期警告)
  • セキュリティ更新PRの平均滞留時間

REST API でリポジトリのアラートを取得する最小例:

# Critical / High の未対応アラートだけを抽出
gh api \
  -H "Accept: application/vnd.github+json" \
  "/repos/{owner}/{repo}/dependabot/alerts?state=open&severity=critical,high" \
  --jq '.[] | {number, severity: .security_advisory.severity, package: .dependency.package.name, ghsa: .security_advisory.ghsa_id}'

Organization 横断で集計したいなら /orgs/{org}/dependabot/alerts を使い、結果を BI / スプレッドシート / Slack 通知に流します。「未対応が増え続けていないか」を一目で見られる状態が、形骸化を防ぐ最後の砦です。


7. Dependabot の守備範囲を取り違えない(SCA ≠ SAST/DAST)

ここは案件相談でも頻繁に誤解される点です。

  • Dependabot が見るのは「依存(SCA:Software Composition Analysis)」の既知脆弱性。npm/pip/gem などのライブラリに付いた CVE/GHSA を、Advisory Database 照合で検知します。
  • 自分たちが書いたコードの脆弱性——SQLインジェクション・XSS・SSRF・認可不備(IDOR)・シークレット漏洩——はDependabot の守備範囲外で、SAST(静的解析)/ DAST(動的診断) の領域です。

両者は補完関係です。サプライチェーン(依存)は Dependabot で自動化し、アプリ自体のロジックは SAST/DAST で診る。この全体像はWebアプリ脆弱性診断(SAST/DAST/SCA)の実践ガイド、AI生成コードのリスクはAI生成コードの脆弱性評価ガイドで扱っています。「Dependabot を入れたから安全」は半分だけ正しい——この線引きを発注者に説明できることが信頼につながります。


8. FAQ

Q. アラートは出るのにセキュリティ更新PRが来ません。 A. その脆弱性に修正版が存在しないか、前提条件(依存グラフ・アラート有効・対象エコシステム・manifest/ロックファイル記載)のどれかを満たしていない可能性が高いです。

Q. アラートが多すぎて見きれません。 A. auto-triage rules で「開発依存の低影響アラートを自動 dismiss」から始め、grouped security updates で修正PRをまとめます。通知前に抑制されるのでノイズが根本から減ります。

Q. セキュリティ更新の同時PR数を増やせますか? A. セキュリティ更新の open-pull-requests-limit10 固定で変更できません。「脆弱性修正は溜めない」という設計です。

Q. 自動 dismiss は危なくないですか? A. 本番に影響しないと論証できるものに限定すれば有効なノイズ削減です。dev スコープ・低影響を起点にし、dismiss 理由が残る運用にしてください。

Q. Dependabot だけでセキュリティは十分ですか? A. いいえ。Dependabot は**依存(SCA)**を見ます。自作コードの脆弱性は SAST/DAST が必要です。両輪で初めて多層防御になります。

友田

友田 陽大

経済産業大臣賞 受賞プロダクト開発者。TypeScript + Python + AWS で、SaaS・業界DX・ 実用レベルの生成AI(RAG)を、要件定義からインフラ・運用まで一人で完遂します。

この記事の実装を、案件として承ります

依存関係の自動更新・サプライチェーン防御を、設計から本番運用まで承ります

アラート/セキュリティ更新/バージョン更新の有効化から、dependabot.yml の設計(groups・cooldown・モノレポの directories・プライベートレジストリ)、GitHub Actions と fetch-metadata による安全な auto-merge(patch/minorだけ自動・majorは人間レビュー)、深刻度別SLAを持った脆弱性対応、未対応件数の可観測化まで。CI品質ゲート(型・テスト・静的解析・セキュリティ)に依存更新を組み込んできた知見で、PR洪水を起こさず技術的負債を増やさない自動化を実装します。

プロジェクト単位(請負)・技術顧問のどちらにも対応可能です。まずは30分の無料技術相談から。

あわせて読みたい