Media > AI活用ユースケース > 情報システム > 社内システムが使うOSSのライブラリのリリースをエージェントが毎週見回り、影響のある変更・サポート終了・必要な対応を開発の担当に届ける

社内システムが使うOSSのライブラリのリリースをエージェントが毎週見回り、影響のある変更・サポート終了・必要な対応を開発の担当に届ける

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

社内システムが依存するOSSのライブラリと実行環境のリリースを、エージェントが毎週見回ります。変更履歴から破壊的変更・非推奨・サポート終了を取り出し、依存の台帳とコードの使用箇所に照らして、影響するリポジトリと対応の候補を開発の担当に届けます。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Make/n8n/Power Automate/Zapier
対象業界
EC/IT・SaaS/小売/金融
対象部門
情報システム
対象業務
内容確認・チェック/情報検索
主な課題
属人化している/情報が見つからない/期限・対応漏れが起きる
AIで行う処理
エージェント
主な効果
属人化解消/工数削減/機会損失防止
導入難易度
★★★★☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
32h/月
AI導入後
8h/月
想定削減
75%
年間削減
288h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 各チームの当番が毎週月曜に、Dependabot のプルリクエストと、ライブラリの GitHub のリリースの一覧を開く
  2. 新しいリリースの変更履歴を読み、破壊的変更・非推奨・サポート終了の記載を書き出す
  3. 書き出した変更について、自社のコードで該当する関数や設定を使っているかを、リポジトリを検索して確かめる
  4. 実行環境(Node.js、Python など)のサポート終了の日付を、提供元のページで確かめる
  5. 対応が要るものを課題管理に起票し、担当チームに知らせる
導入後(After)
  1. 自動毎週月曜の朝6時にワークフローが動き、各リポジトリの依存の一覧(SBOM)を取り直して、依存の台帳を作り直す
  2. 自動台帳に載ったライブラリの GitHub のリリースを取り、前回までに取ったものと比べて新しいリリースだけを拾う
  3. 自動台帳に載った実行環境について、サポート終了の日付を取る
  4. 【AI】 エージェントがリリースの本文から変更を種類別に取り出し、依存の台帳とコードの検索を引いて、影響するリポジトリと対応の候補を挙げる
  5. 自動急ぎの度合いを規則で付け、チームごとに分けて社内チャットへ届ける。影響の無かったリリースは件数と名前だけをまとめる
  6. 人各チームの当番が候補を確かめ、対応が要るものを課題管理に起票する
  7. 人更新の時期と方法は、各チームが決める
各工程の詳しい説明を読む
  1. 各チームの当番が毎週月曜に、Dependabot のプルリクエストと、ライブラリの GitHub のリリースの一覧を開く
  2. 新しいリリースの変更履歴を読み、破壊的変更・非推奨・サポート終了の記載を書き出す
  3. 書き出した変更について、自社のコードで該当する関数や設定を使っているかを、リポジトリを検索して確かめる
  4. 実行環境(Node.js、Python など)のサポート終了の日付を、提供元のページで確かめる
  5. 対応が要るものを課題管理に起票し、担当チームに知らせる

(a)読める人が偏っている。 変更履歴を読んで「うちに効く」と分かるのは1〜2名です。その2名が休んだ週は、見回りが丸ごと抜けます。

(b)破壊的変更が自動のプルリクエストに埋もれる。 テストが通ったものから順にマージされ、テストで拾えない既定値の変更は、そのまま本番に入ります。

(c)サポート終了に気づくのが遅れる。 実行環境のサポート終了は別の場所に書かれ、気づいたときには計画外の移行作業になります。

(d)同じ変更を複数のチームが別々に調べる。 3チームが同じライブラリを使うと、3人が同じ変更履歴を読みます。

  1. 【自動】 毎週月曜の朝6時にワークフローが動き、各リポジトリの依存の一覧(SBOM)を取り直して、依存の台帳を作り直す
  2. 【自動】 台帳に載ったライブラリの GitHub のリリースを取り、前回までに取ったものと比べて新しいリリースだけを拾う
  3. 【自動】 台帳に載った実行環境について、サポート終了の日付を取る
  4. 【AI】 エージェントがリリースの本文から変更を種類別に取り出し、依存の台帳とコードの検索を引いて、影響するリポジトリと対応の候補を挙げる
  5. 【自動】 急ぎの度合いを規則で付け、チームごとに分けて社内チャットへ届ける。影響の無かったリリースは件数と名前だけをまとめる
  6. 【人】 各チームの当番が候補を確かめ、対応が要るものを課題管理に起票する
  7. 【人】 更新の時期と方法は、各チームが決める

2番目と3番目をAIにさせないのは、意図してのことです。 新しいかどうかは識別子で、終了の日付は取った値で決まります。AIに読ませるのは、自由な文の変更履歴だけです。

02今回想定するシステム構成

構成図
GitHub(社内リポジトリ)── 依存の一覧(SBOM)
OSS の GitHub のリリース ── 新しいリリースの本文
endoflife.date の API ── 実行環境のサポート終了の日付
   │
   ▼【トリガー】Schedule Trigger(毎週月曜 6時、Asia/Tokyo)
n8n のワークフロー
   ├──▶ HTTP Request で SBOM の生成と取得 → 依存の台帳(PostgreSQL)
   ├──▶ HTTP Request でリリースの一覧 → 前回までの識別子と比べて新しいものを拾う
   ├──▶ HTTP Request で実行環境のサポートの状態を取る
   ▼
AI Agent ノード(Tools Agent)+ Claude
   │  リリース1件ごとに、道具を選んで引く
   │   ・依存の台帳を引く(どのリポジトリが、どの版を使っているか)
   │   ・社内のコードを検索する(非推奨の関数・設定の名前)
   │   ・過去の判断の記録を引く
   │  Structured Output Parser で決まった形のJSONを返す
   ▼
急ぎの度合いを規則で付ける → チームごとに社内チャットへ
   ▼【人】候補の確認・起票・更新の時期の判断
役割想定する製品代替候補
ワークフローn8nMake、Power Automate、Zapier
生成AIClaude API(n8n の Anthropic Chat Model ノード)OpenAI API、Gemini API
連携PostgreSQL(依存の台帳、取得済みのリリース、判断の記録)MySQL
通知社内チャットメール

新しく足すのは、n8n のワークフローと、依存の台帳を置くデータベースだけです。 リポジトリには書き込みません。

依存の一覧は、GitHub の依存関係グラフから SBOM として取ります。 リポジトリの SBOM は SPDX の JSON 形式で書き出せ、packages にパッケージの名前と版(versionInfo)が入り、読み取りの権限があれば書き出せるとされています。注意が要るのは、これまでの書き出しの操作(GET /repos/{owner}/{repo}/dependency-graph/sbom)が2026年11月13日以降は使えなくなると告知されていることです。 代わりに sbom/generate-report で生成を始め、sbom/fetch-report/{sbom_uuid} で結果を取る2段の手順に移ります。これから組むなら、最初から2段の手順で作ります。

リリースは、GitHub の Releases の API で取ります。 一覧(GET /repos/{owner}/{repo}/releases)は1ページ最大100件で、各リリースに tag_name、body、published_at、prerelease などが入ります。

実行環境のサポート終了は、endoflife.date の API で取ります。 製品ごと(/api/v1/products/{product})に版の系列が並び、系列ごとに 終了の日付(eolFrom)、終了したか(isEol)、何らかのサポートが続いているか(isMaintained)が入ります。2026年10月8日に Node.js を取ったときは、22 の系列の終了日が2027年4月30日でした。endoflife.date は提供元ではなく、提供元の公表をまとめたサイトです。 期日を計画に使う前に、提供元のページで確かめます。

n8n のエージェントを選ぶ理由は、リリース1件ごとに引き方が変わるからです。 非推奨の関数の名前が書かれていればコードを検索し、何も書かれていなければ台帳だけを引きます。Tools Agent は、道具の機能を理解し、タスクに応じてどの道具を使うかを決めるとされています。

03どうやって実装するのか

Step1

処理の起点を決める

毎週月曜の朝6時に、Schedule Trigger で動かします。 各チームの週の計画の前に届けるためです。週1回にするのは、毎日届けると当番が読み切れず、まとめて読むことになるからです。ただし、実行環境のサポート終了の日付だけは、終了の90日前・30日前に当たる週に必ず出します。

Schedule Trigger は、ワークフローのタイムゾーンが無ければ n8n のインスタンスのタイムゾーンを使い、セルフホストの既定は America/New York とされています。ワークフローのタイムゾーンを Asia/Tokyo にし、保存して公開します。公開しないと Schedule Trigger は動かないとされています。週の間隔では、曜日と時刻を選べます。

このワークフローが止まったことに、人が気づける仕組みを必ず作ります。 実行が終わったら、新しいリリースがゼロでも「今週の見回り完了(新しいリリース 0件・台帳のリポジトリ 40)」を出します。通知が来ないこと自体が、止まった合図になります。 第3章の(a)は、ここで解きます。

Step2

入力データを集める

データ中身取得元
依存の一覧(SBOM)リポジトリごとのパッケージの名前と版GitHub の依存関係グラフ
監視の対象表ライブラリ名、リリースを取るリポジトリ(owner/repo)、重さの区分、担当チーム基盤の担当が作る表
リリースtag_name、name、body、published_at、prereleaseライブラリの GitHub のリリース
実行環境のサポート系列、eolFrom、isEol、isEoas、isMaintained、最新の版endoflife.date の API
実行環境の使用状況リポジトリごとの Node.js・Python の系列各リポジトリの設定から写した台帳の列
取得済みのリリース前回までに取ったリリースの識別子判断の記録
過去の判断の記録同じライブラリの前回の判断と、起票した課題判断の記録

質を決めるのは、監視の対象表です。 SBOM に載るのはパッケージの名前で、そのパッケージのリリースがどの GitHub のリポジトリに出るかは、SBOM からは決まりません。 対象表に「パッケージ名 → リリースを出すリポジトリ」の対応を持たせ、重さの区分(フレームワーク・接続・認証など、必ず中身を見るもの)を付けます。

GitHub の Releases を使っていないライブラリは、対象表に変更履歴のファイルのURLを持たせて取ります。 取り方が決まっていないものは「取得方法なし」と書き、対象外の件数を毎週の完了の通知に出します。

Step3

データの取得方法を決める

取るものどこからどう取るか
SBOM各リポジトリHTTP Request で generate-report を呼び、返った識別子で fetch-report を取る
リリースの一覧対象表のリポジトリHTTP Request(GET、per_page=100)
実行環境のサポートendoflife.dateHTTP Request(GET /api/v1/products/{product})
新しいリリース取得済みの識別子との比較Postgres ノードで取得済みを引き、含まれないものを残す
台帳・過去の判断写しのデータベースエージェントの道具(Postgres の Select)
コードの使用箇所社内のリポジトリエージェントの道具(GitHub のコードの検索)

GitHub の API の回数に気をつけます。 認証の無い呼び出しは1時間に60回、GitHub App のインストールのトークンでは最低5,000回とされています。認証無しでは足りないので、読み取りだけの権限を持つ GitHub App のトークンで呼びます。

コードの検索は、もっと厳しい制限があります。 公式の説明では、コードの検索は認証が必須で、1分に10回までです。さらに、既定のブランチだけが対象で、384KB より小さいファイルだけが検索できるとされています。HTTP Request の Batching で、1回に送る件数と次の送信までの待ち時間を決め、検索は1分に10回を超えないように間を空けます。

SBOM の生成は、40のリポジトリを順に回します。 generate-report で生成を始め、結果が取れるまで待ってから fetch-report を取ります。取れなかったリポジトリは、前週の台帳を使わず「今週は台帳を作り直せなかった」と通知します。

Step4

AIへ渡す前に整形する

  1. パッケージ名をそろえる … npm のスコープ付きの名前、PyPI の大文字・小文字、区切りの - と _ を同じ規則でそろえ、対象表と SBOM の両方に当てます
  2. 版の幅を出す … 台帳の版と新しいリリースの版を比べ、大きな版・小さな版・修正の版のどれが上がったかを機械で出します。エージェントに版の比較をさせません
  3. プレリリースを分ける … prerelease が true のものは、重さの区分が「必ず見る」のライブラリだけを残し、他は件数だけにします
  4. 飛ばした版を束ねる … 台帳の版から新しい版までの間に複数のリリースがあれば、その間の本文をまとめて渡します。最新の1件だけを読むと、間の版の破壊的変更を落とします
  5. 本文の長さを確かめる … コミットの一覧だけで長すぎる本文は、見出し(Breaking、Deprecated、Removed など)の付近を先に切り出し、残りは要約の対象にしません
  6. 実行環境の期日を計算する … eolFrom から今日までの日数を機械で出し、90日以内・30日以内の印を付けます

4番目が、この構成でいちばん効く前処理です。 台帳の版が 4.2 のまま、4.3、4.4、5.0、5.1 と出ていたら、5.0 の本文に書かれた破壊的変更を読まないと、5.1 への更新で何が壊れるかが分かりません。

Step5

AIに処理させる

させるのは、リリース1件(または束ねた数件)ごとに、変更を種類別に取り出し、依存の台帳とコードの検索を引いて、影響するリポジトリと対応の候補を挙げることです。

させること使う道具返すもの
変更を種類別に取り出す-破壊的変更、非推奨、削除、実行環境の最低版の引き上げ、既定値の変更
変更の根拠を写す-本文の該当の文をそのまま
検索の言葉を決める-非推奨・削除された関数・設定・オプションの名前
使っているリポジトリを引く依存の台帳を引くリポジトリ、いまの版、担当チーム
使用箇所を探す社内のコードを検索する当たったファイルのパスと件数
前回の判断を添える過去の判断を引く同じライブラリの前回の判断と課題
対応の候補を書く-版の固定、置き換え、設定の追加など、本文に書かれた移行の手順

検索の言葉をエージェントに決めさせるのが、第4章の③への答えです。 本文に「foo() は次の大きな版で削除」とあれば foo( を検索し、当たったパスを返させます。検索の言葉は本文に書かれた名前に限り、推して作らせません。

させないこと理由
影響なしの結論検索は既定のブランチと384KB未満のファイルだけ。見つからないことは使っていないことではない
更新の要否・時期の判断各チームが、リリースの予定と試験の範囲を見て決める
版の大小の比較前処理で機械が出す
サポート終了の日付の推測API が返した値だけを使う
脆弱性の重さの評価別の仕組みで扱う
本文に無い移行の手順の作成書かれた手順だけを写す

1行目が、この構成でいちばん大事な線です。 コードの検索で当たらなかったとき、エージェントは「使っていない」と書きたくなります。動的に名前を組み立てて呼んでいる箇所、別のブランチで開発中の箇所、大きな生成ファイルの中は、検索に出てきません。

Step6

指示内容を固定する

AI Agent ノードの System Message に、次のように書きます。

あなたは社内システムの情報システム部で、依存しているOSSのライブラリの
新しいリリースを読み、社内のリポジトリへの影響を調べる担当です。
入力は、ライブラリ名、台帳の版、新しい版、版の上がり方(major / minor / patch)、
その間のリリースの本文です。

【やること】
1. 本文から変更を取り出し、種類を breaking / deprecation / removal /
   runtime_requirement / default_change / other から選ぶ。
2. 各変更について、根拠にした本文の文をそのまま evidence に写す。
3. 非推奨・削除になった関数・設定・オプションの名前が本文にあれば、
   それを検索の言葉にして、社内のコードを検索する。
4. 依存の台帳を引き、このライブラリを使っているリポジトリ、いまの版、
   担当チームを挙げる。
5. 過去の判断の記録を引き、同じライブラリの前回の判断を添える。
6. 本文に移行の手順が書かれていれば、そのまま migration_note に写す。

【厳守事項】
- 本文に書かれていない変更を書かないでください。
- 検索の言葉は、本文に書かれた名前だけにしてください。推して作らないでください。
- コードの検索で当たらなかったときは、usage を not_found にしてください。
  「使っていない」「影響なし」と書かないでください。
- 検索ができなかったとき(回数の上限、エラー)は usage を unknown にしてください。
  unknown を not_found にしないでください。
- 更新すべきか、いつ更新すべきかを書かないでください。
- 版の大小を自分で比べないでください。入力の版の上がり方を使ってください。
- 脆弱性の深刻度を評価しないでください。本文に脆弱性の修正があれば、
  種類を other にし、check_points に「脆弱性の修正の記載あり」と書いてください。
- 本文が英語なら、summary_ja は日本語で、evidence は原文のまま写してください。

【出力】指定のJSONの形で返してください。

「unknown を not_found にしない」が、この指示の要です。 検索が回数の上限で止まったリポジトリは、使っているかどうかが分かりません。分からないものを「見つからなかった」と書かせると、人が確かめる候補から落ちます。 3つの値を分けておけば、後段の規則で unknown を必ず人の確認に回せます。

Step7

出力形式を固定する

Structured Output Parser で、次の形のJSONを返させます。

{
  "package": "", "repo": "", "from_version": "", "to_version": "",
  "bump": "major | minor | patch",
  "release_ids": [""],
  "changes": [
    { "type": "breaking | deprecation | removal | runtime_requirement | default_change | other",
      "summary_ja": "", "evidence": "", "search_terms": [""] }
  ],
  "affected": [
    { "repository": "", "current_version": "", "team": "",
      "usage": "found | not_found | unknown",
      "hits": [ { "path": "", "count": 0 } ] }
  ],
  "migration_note": "",
  "previous_judgment": "",
  "check_points": [""]
}

1つ目の理由は、急ぎの度合いを規則で決められることです。 ワークフローが次の規則で付けます。

急ぎ条件
至急本番のリポジトリで使っている実行環境の系列が、30日以内にサポート終了
今週breaking・removal・default_change があり、usage が found か unknown のリポジトリがある
計画deprecation か runtime_requirement があるか、実行環境が90日以内にサポート終了
記録上のどれにも当たらない(件数と名前だけをまとめる)

2つ目は、affected をチームごとに分けて届けられることです。 各チームのリポジトリと使用箇所だけを付けて届き、第3章の(d)はここで解けます。

3つ目は、evidence で確認が速くなることです。 当番は要約ではなく原文の該当の文を読んで判断できます。要約が原文とずれていたら、evidence を見ればすぐ分かります。

Step8

システムへ連携する

つなぎ先方式内容
GitHub(社内リポジトリ)HTTP Request(GitHub App の読み取りのトークン)SBOM の生成と取得、コードの検索
GitHub(OSS のリリース)HTTP Request(GET)リリースの一覧と本文
endoflife.dateHTTP Request(GET)実行環境の系列とサポートの状態
写しのデータベースPostgres ノード依存の台帳、取得済みのリリース、判断の記録
Claude APIAnthropic Chat Model ノード変更の取り出しと影響の整理
社内チャット通知急ぎの順に、チームごとに出す

GitHub App の権限は、読み取りだけにします。 リポジトリの内容と依存関係グラフの読み取りがあれば、この構成は動きます。プルリクエストや課題を作る権限を持たせると、エージェントの判断が誤ったときに、リポジトリに跡が残ります。

エージェントの道具には、読み取りの操作だけを渡します。 判断の記録への書き込みは、エージェントの出力を受け取ったあとにワークフローの側で行います。Anthropic Chat Model ノードでは、生成の長さの上限や温度などを決められます。取り出しの仕事なので、温度は低くします。

Step9

人が確認する

  1. 至急から見る … 実行環境のサポート終了が30日以内のものは、基盤の担当が移行の計画を確かめます
  2. 今週の候補を確かめる … evidence を読み、found のパスを開いて使い方を見ます。unknown のリポジトリは、当番が自分で検索し直します
  3. 起票を決める … 対応が要るものを課題管理に起票します。起票は人が行います
  4. 記録のまとめを流し見る … 名前を見て、中身を確かめたいものがあれば本文を開きます
  5. 判断を記録する … 対応する・しない・様子を見る、と理由を判断の記録に残します

2番目の unknown を省かないでください。 上限で止まったリポジトリは、調べられなかっただけです。

目標は、1件をならして3分です。 記録のものは名前を見るだけで済み、今週の候補は使用箇所を開いて10分を超えることがあります。

Step10

例外に対処する

起きること対応
SBOM の生成が終わらない・取れない前週の台帳を使わず「台帳を作り直せなかった」を通知
GitHub の API の回数の上限に当たる残りを翌日の同じ時刻に回し、未処理の件数を通知
コードの検索の上限に当たるusage を unknown にして人へ回す
リリースの本文が空・コミットの一覧だけ本文の変更履歴のファイルを取り直し、取れなければ check_points に「本文なし」
リリースが取り下げられた・付け直された識別子が同じで中身が変わったら、前回の判断を添えて再度出す
endoflife.date に製品が無い対象表で提供元のページを持たせ、人が期日を確かめる
エージェントの出力がスキーマに合わないライブラリ名と版とリンクだけを「今週」の扱いで人に回す
道具の呼び出しがくり返し止まらないMax Iterations で上限を決め、超えたら人へ

7行目で、スキーマに合わない出力を「今週」で回すのは意図してのことです。 取り出しができなかったリリースは、影響の有無が分からないという意味で、確かめるまでは重く扱います。Tools Agent の Max Iterations は、モデルが答えを出そうとして回る回数の上限で、既定は10とされています。

Step11

記録を残す

  • 実行ごとの SBOM の取得の成否と、台帳の差分(増えた依存・消えた依存・版の変化)
  • 取ったリリースの識別子と本文
  • エージェントのJSON出力と、呼んだ道具の順番(Return Intermediate Steps で残す)
  • 人の判断 … 対応する・しない・様子を見る、理由、起票した課題、判断した日時
  • リリースの公開日、見回りで拾った日時、起票した日時、更新を終えた日時

最後の行が、この構成の物差しです。 公開から起票までと起票から更新までを分けて並べます。

04実装レベルの3段階

最小構成:リリースの本文とリポジトリの一覧を生成AIの画面に貼る / 1件ごとの変更の取り出し
半自動化:上記+n8n で SBOM とリリースと実行環境のサポートを毎週取り、新しいリリースを拾い、台帳と照らす / 見回りと、使っているリポジトリの引き当て
本格構成:上記+エージェントによる変更の取り出し、コードの検索、急ぎの順の通知、チームごとの振り分け / 見回りから影響の候補と急ぎの順まで

半自動化だけでも、①の見回りの時間はほぼ無くなります。 残るのは、本文を読む②と、使用箇所を探す③です。 本格構成で減るのは、その②と③と④です。 半自動化を1か月回して拾い漏れが無いかを確かめてから、エージェントを足してください。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
4 名
月間件数
160 件
1件あたり現在時間
12 分
1件あたり導入後時間
3 分
現在  160件 × 12分 ÷ 60 = 32 時間/月
導入後 160件 × 3分 ÷ 60 = 8 時間/月
月間削減時間
24h
削減率
75%
年間削減時間
288h
年間金額換算(時間単価4,000円)
115万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 社内向けの業務システムを内製していて、リポジトリが数十あり、直接依存しているOSSのライブラリが数百ある情報システム部門。ライブラリの更新は Dependabot などの自動のプルリクエストで届くが、変更履歴を読んで破壊的変更や実行環境のサポート終了を拾う作業が、詳しい1〜2名の担当に偏っている場合。リポジトリが GitHub にあり、依存関係グラフを有効にできる場合。
向いていない
  1. リポジトリが数個で、依存しているライブラリが数十に収まり、担当者が変更履歴を毎週読んでも負担にならない場合。依存関係をリポジトリで管理しておらず、どのシステムが何を使っているかを書き出せない場合(先に依存の台帳づくりが要ります)。脆弱性の対応だけが目的の場合(脆弱性の通知の仕組みを先に使います)。なお、更新するかどうか、いつ更新するかの判断と、更新後の動作の確認は、この構成では代替できません。

07最小構成で試す方法

  1. 過去3か月に出たリリースから、10件を選ぶ(破壊的変更があったもの、非推奨の予告があったもの、版を2つ以上飛ばしたもの、実行環境の最低版を上げたものを入れる)
  2. 依存の台帳の代わりに、そのライブラリを使っているリポジトリと版を書き出す
  3. 生成AIの画面に、リリースの本文とリポジトリの一覧を貼り、「本文から破壊的変更・非推奨・削除・実行環境の最低版の引き上げ・既定値の変更を取り出し、根拠の文をそのまま写し、非推奨になった名前を挙げてください。影響の有無の結論は書かないでください」と指示する
  4. 挙がった名前で、当番が自分でコードを検索する
  5. 出てきた結果を、当時の当番の判断と比べる
出てきた内容判断
当時の判断と同じ変更が取れたワークフローを組む段階に進む
本文に無い変更を書いた・影響なしと書いた指示の書き方で直る。usage を3つの値で持たせる
版を飛ばしたときに間の破壊的変更を落とした前処理で本文を束ねるのが先

3行目が出ることは珍しくありません。 間の版の本文を束ねて渡すことを、最初から前処理に入れてください。

08実装時につまずきやすいポイント

問題対策
検索で当たらないと「影響なし」と書くusage を3つの値にし、not_found を結論として扱わない
検索の上限で止まったものを not_found にする上限で止まったら unknown。人が検索し直す
最新の1件だけ読み、間の破壊的変更を落とす台帳の版からの間の本文を束ねて渡す
SBOM の書き出しが11月で止まる生成と取得の2段の手順で作る
認証無しで呼び、1時間60回で止まる読み取りだけの GitHub App のトークンで呼ぶ
サポート終了の日付を endoflife.date だけで決める計画に使う前に、提供元のページで確かめる
脆弱性の重さまで書き始める範囲外と明記し、記載の有無だけを知らせる
見回りが止まったことに気づかない件数ゼロでも完了の通知を出す

上の2行が、この構成の失敗のほとんどです。 どちらも、分からないことを「影響しない」に寄せることから起きます。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 公開されているOSSのリリースの本文、自社のリポジトリの依存の一覧(どのシステムが何の何版を使っているか)、コードの検索で当たったファイルのパスです。依存の一覧は、自社のシステムの作りそのものです。

  1. AIに渡す範囲を絞る … 渡すのは、リリースの本文、使っているリポジトリの名前と版、検索で当たったパスと件数だけです。ソースコードの中身は渡しません
  2. トークンの権限を最小にする … GitHub App は読み取りだけにし、トークンは n8n の資格情報に置きます。ワークフローの定義やログにトークンを書かないでください
  3. 依存の台帳を社外に出さない … 古い版を使っているシステムの一覧は、攻撃する側にも役立つ情報です。通知は限られたチャンネルに出します
  4. 更新の判断は人が行う … どの版に、いつ上げるかは、各チームが決めてください
  5. 「影響なし」を自動の結論にしない … 調べられなかったこと、見つからなかったことは、結論ではなく候補として人に回します

誤りが起きた場合のリスクは、影響する変更を見落とすことと、影響しない変更で当番の時間を使いすぎることの2つです。 前者のほうが重いので、迷ったものは人へ、の側に寄せています。

10まず何から始めるか

1週目:監視の対象表を作る

本番のリポジトリが直接依存するフレームワーク・接続・認証などのライブラリを書き出し、リリースを出すリポジトリと担当チームを表にします。実行環境の系列も書き出します。

2週目:10件で試す

第8章の手順で、過去のリリース10件を試します。影響なしと書いていないかを見ます。

3週目:GitHub App と台帳を用意する

読み取りだけの GitHub App を作り、SBOM の2段の手順で依存の台帳を作ります。

4週目:見回りと台帳の照合を n8n で動かす

リリースとサポート終了の日付の取得、台帳での引き当てまでを組み、件数ゼロでも完了を通知します。エージェントはまだ入れず、拾ったリリースを当番の見回りと1か月比べます。

それ以降: エージェントとコードの検索を足し、公開から起票までの時間を毎月並べます。実行環境のサポート終了が90日前に必ず届き、破壊的変更が各チームのリポジトリに付けて届くようになった時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-08/最終更新:2026-10-08
確認した内容情報源確認日
リリースの一覧の操作(GET /repos/{owner}/{repo}/releases)で tag_name・body・published_at・prerelease などが返ること。1ページ最大100件であることGitHub Docs: REST API endpoints for releases2026-10-08
リポジトリの SBOM を SPDX の JSON 形式で書き出せること。packages に名前と版が入ること。読み取りの権限で書き出せること。これまでの書き出しの操作が2026年11月13日以降使えなくなり、generate-report と fetch-report の2段の手順に移ることGitHub Docs: REST API endpoints for software bill of materials (SBOM)2026-10-08
コードの検索(GET /search/code)が認証必須で1分に10回まで。既定のブランチだけが対象で、384KB未満のファイルだけが検索できることGitHub Docs: REST API endpoints for search2026-10-08
認証の無い呼び出しが1時間60回、GitHub App のインストールのトークンが最低5,000回であることGitHub Docs: Rate limits for the REST API2026-10-08
Dependabot のバージョン更新が依存を最新に保つ自動のプルリクエストであること。プルリクエストごとに変更履歴・リリースノートとテストを確かめてからマージするよう勧めていることGitHub Docs: About Dependabot version updates2026-10-08
endoflife.date の API v1 の基点が https://endoflife.date/api/v1 で、/products/{product} が版の系列を返すこと。系列ごとの eolFrom・isEol・isMaintained の意味。2026年10月8日に Node.js の 22 の系列の終了日が2027年4月30日だったこと(原文を取得して確認)endoflife.date: API v1 の定義2026-10-08
Schedule Trigger が、ワークフローのタイムゾーンかインスタンスのタイムゾーン(セルフホストの既定は America/New York)を使うこと。保存して公開しないと動かないこと。週の間隔で曜日と時刻を選べることn8n Docs: Schedule Trigger2026-10-08
HTTP Request ノードの Batching(1回の件数と待ち時間)、Timeout、Pagination、応答の形式の設定があることn8n Docs: HTTP Request2026-10-08
Tools Agent が道具の機能を理解して使う道具を決めること。System Message、Max Iterations(既定10)、出力パーサーをつなぐ設定、Return Intermediate Steps があることn8n Docs: Tools Agent2026-10-08
Anthropic Chat Model ノードで Claude をエージェントにつなげ、生成の長さの上限や温度を設定できることn8n Docs: Anthropic Chat Model2026-10-08

ライブラリの更新の要否と実行環境のサポート終了の期日は、各ライブラリと実行環境の提供元の公表で確かめてください。 本記事は確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-1009)についてのご相談はこちらから。

AI活用について相談する
目次