製品に組み込んだOSSのライセンス条件を、リリース前に点検する
製品に含まれるOSSの一覧とライセンス条文を入力に、自社の配布形態で守るべき条件と、抵触のおそれがある箇所を一覧にします。担当者の作業は、条文を読むことから、指摘された箇所を確かめることに変わります。
- 利用ツール
- ChatGPT/Claude/Gemini/Google Apps Script/Make/n8n/Power Automate/Python
- 対象業界
- IT・SaaS/医療/製造/金融
- 対象部門
- 情報システム/知財
- 対象業務
- 内容確認・チェック/台帳・マスタ管理
- 主な課題
- 判断に時間がかかる/属人化している/確認ミスが多い
- AIで行う処理
- 判定
- 主な効果
- 品質標準化/属人化解消/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 開発者が新しいライブラリを使いたいと申請する
- 知財担当がライセンス名を見る
- 名前で分からないものは、条文を開いて読む
- 自社の使い方(SaaSか、顧客環境への設置か)を開発者に聞く
- 条件(表示義務・ソース開示・改変の扱い)を整理する
- 使ってよいか、条件付きか、やめるかを判断する
- 判断を台帳に記録する
- リリース前に、実際に入っているものと台帳を照合する
- 開発者がリリース用のブランチを作る
- 自動依存関係からSBOM(部品表)を出力する
- 自動前回のSBOMと比べ、増えたもの・版が変わったものだけを抜き出す
- 自動ライセンス識別子を正規の一覧に突き合わせ、未知のものを分ける
- 自動過去の判断台帳を引き、同じ組み合わせがあれば前回の判断を引き継ぐ
- 自動残ったものについて、条文と自社の配布形態から論点を整理する
- 人知財担当が論点を見て、可否を決める
- 自動判断を台帳へ記録し、次回はそこから引かれる
各工程の詳しい説明を読む
- 開発者が新しいライブラリを使いたいと申請する
- 知財担当がライセンス名を見る
- 名前で分からないものは、条文を開いて読む
- 自社の使い方(SaaSか、顧客環境への設置か)を開発者に聞く
- 条件(表示義務・ソース開示・改変の扱い)を整理する
- 使ってよいか、条件付きか、やめるかを判断する
- 判断を台帳に記録する
- リリース前に、実際に入っているものと台帳を照合する
問題は4つあります。
(a)読める人が1人しかいない。 条文は英語で、似た名前で内容が違うものが多くあります。判断の質が担当者に依存しています。
(b)申請されない依存がある。 直接入れたライブラリは申請されますが、そのライブラリがさらに引いてくるもの(間接依存)は申請の対象外になっています。数でいえば、こちらのほうがはるかに多くあります。
(c)同じ調査を繰り返している。 去年判断した組み合わせを、担当者が代わって、また最初から調べています。
(d)リリース直前に発覚する。 8の照合で初めて見つかると、差し替えの時間がありません。「今回は目をつぶる」が積み上がります。
- 開発者がリリース用のブランチを作る
- 【自動】 依存関係からSBOM(部品表)を出力する
- 【自動】 前回のSBOMと比べ、増えたもの・版が変わったものだけを抜き出す
- 【自動】 ライセンス識別子を正規の一覧に突き合わせ、未知のものを分ける
- 【自動】 過去の判断台帳を引き、同じ組み合わせがあれば前回の判断を引き継ぐ
- 【自動】 残ったものについて、条文と自社の配布形態から論点を整理する
- 【人】 知財担当が論点を見て、可否を決める
- 【自動】 判断を台帳へ記録し、次回はそこから引かれる
自動化されるのは「集める」「差分をとる」「過去を引く」「条文を論点に直す」の4つです。残るのは「決める」だけになります。
5の差分と過去引きが、この構成でもっとも効きます。 月60件のうち、実際に新しい判断が要るのは10件前後です。
02今回想定するシステム構成
リリース用ブランチの作成 │ ▼【トリガー】タグが付いたとき / 週次 Python(CI上で実行) │ ├──▶ SBOMの出力(依存関係グラフ / パッケージマネージャ) │ └─ 部品名 / 版 / ライセンス識別子 / 依存の経路 │ ├──▶ 前回SBOMとの差分(増加・版上げ・削除) │ ├──▶ ライセンス識別子の正規化(SPDX識別子へ寄せる) │ ├──▶ 判断台帳の照合(部品 × 版 × 配布形態) │ └──▶ LLM API ── 残った分の論点整理と抵触のおそれの判定 │ ▼ 点検レポート(未知・要判断・過去どおり に3分割)──【人が可否を決める】 │ ▼ 判断台帳へ記録 + 課題管理ツールへ起票
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python | Google Apps Script |
| 処理 | Python(SBOM生成・差分・台帳照合) | 各社のビルドツール |
| 生成AI | Claude API | ChatGPT、Gemini |
| 連携 | Power Automate | Make、n8n |
専用のOSSコンプライアンス製品を先に検討してください。 依存の検出、ライセンスの特定、ポリシー判定、レポートまでが製品として組まれています。自前で組む価値があるのは、自社の配布形態が複数あって、製品の既定のポリシーでは判定が合わない場合です。
03どうやって実装するのか
処理の起点を決める
リリース用のタグが付いたときを起点にします。あわせて、週1回の定期実行も入れます。タグだけにすると、開発中に入った依存の発覚がリリース直前になるためです。
差分が0件のときは何も通知しません。毎回レポートが来ると読まれなくなります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| SBOM | 部品名、版、ライセンス識別子、依存の経路 | リポジトリの依存関係グラフ |
| 前回のSBOM | 同上(前回リリース時点) | 保管先 |
| ライセンス条文 | 識別子ごとの全文 | 公開されている一覧 |
| 判断台帳 | 部品、版、配布形態、判断、判断日、理由 | 社内の台帳 |
| 配布形態の定義 | 製品ごとの出し方(自社運用/顧客環境への設置/組込み) | 事業部が管理 |
データの取得方法を決める
SBOM: リポジトリの依存関係グラフから出力します。GitHubでは、依存関係グラフの内容をSBOMとして書き出す機能があり、画面からの出力、REST API、ワークフローの3通りで取得できます。書き出される形式は業界標準のSPDXで、版・パッケージ識別子・ライセンス・依存の経路・著作権表示を含みます。
ライセンス条文: SPDXのライセンス一覧を使います。この一覧は、よく使われるライセンスと例外について、短い識別子・正式名称・ライセンス本文・恒久URLを組にして持ち、機械可読のデータファイルも配布されています。自社で条文を集めて回る必要はありません。
判断台帳: 社内で持ちます。列は「部品名/版の範囲/配布形態/判断/条件/判断日/判断者」です。この台帳が、2年目以降の工数を決めます。
配布形態の定義: これは人が決める情報です。製品ごとに「自社運用のみ」「顧客環境へ設置」「機器に組み込んで出荷」のどれかを登録しておきます。ここを開発者に毎回聞いている限り、自動化は完成しません。
AIへ渡す前に整形する
- 識別子の正規化 … 表記が
Apache 2.0Apache License 2.0Apache-2.0と揺れます。SPDXの短い識別子(Apache-2.0MITGPL-3.0-onlyBSD-3-Clauseなど)に寄せます - 未知の識別子の分離 … 一覧にないもの、
NOASSERTIONのように不明とされたものは、AIに渡さず人へ回します。ここを推測させると事故になります - 差分の抽出 … 前回SBOMと比べ、新規・版上げ・削除に分けます。版上げはライセンス変更が起きうるので、同じ部品でも再判定の対象にします
- 重複の集約 … 同じ部品が複数の経路から入ることがあります。部品と版で1件にまとめ、経路は付帯情報として持ちます
- デュアルライセンスの展開 … 「AまたはB」で提供されるものは、選択肢を両方残したまま次へ渡します
AIに処理させる
処理の役割を分けます。
プログラムにさせること: SBOMの取得、差分、識別子の正規化、台帳の照合、未知の分離。ここはすべて機械的な処理で、AIを使いません。 判定の入口を安定させるためです。
LLMにさせること:
| 処理 | 内容 |
|---|---|
| 条件の要約 | 条文から、表示義務・ソース開示・改変時の扱い・特許条項の有無を整理する |
| 配布形態との突き合わせ | 自社の出し方で、その条件が発動するかを整理する |
| 組み合わせの指摘 | 同じ製品に入った部品どうしで、条件が衝突しうる箇所を挙げる |
| 論点の文章化 | 知財担当が読んで判断できる短さにまとめる |
LLMに「使ってよい/だめ」を言わせません。 出させるのは「何が発動し、何を確かめる必要があるか」までです。可否は人が決めます。
指示内容を固定する
あなたは、ソフトウェア製品に組み込まれたオープンソースの
ライセンス条件を整理する担当者です。
【厳守事項】
- 可否の結論を書かないでください。発動する条件と、
確認すべき点を挙げるところまでが役割です。
- 条文に書かれていないことを補わないでください。
条文から読み取れない点は unclear に列挙してください。
- 法令の解釈、判例、一般論を持ち出さないでください。
参照するのは、渡されたライセンス条文だけです。
- ライセンス識別子を書き換えないでください。
- 提供された配布形態以外の場合を想定しないでください。
【製品の配布形態】
{distribution_form}
【今回増えた部品】
{new_components}
【該当するライセンス条文】
{license_texts}
【同じ製品にすでに入っている部品とライセンス】
{existing_components}
【過去の判断(同じ部品・近い版)】
{past_decisions}
「可否の結論を書かない」の1行が、この構成の要です。 ライセンスの可否は、自社の事業判断と契約の問題です。AIに結論を出させると、その結論が独り歩きします。
出力形式を固定する
{
"component": "",
"version": "",
"license_ids": [],
"distribution_form": "",
"obligations": [
{
"type": "attribution | source_disclosure | modification_notice | patent | other",
"triggered": "yes | no | depends",
"condition": "",
"source_clause": ""
}
],
"conflicts_with": [],
"unclear": [],
"past_decision_ref": "",
"needs_human": true
}
source_clause に、判断のもとにした条文の箇所を必ず入れさせます。これがないと、人が確かめるのに条文を最初から読むことになり、削減になりません。
needs_human は既定で true です。
システムへ連携する
| つなぎ先 | 何をするか |
|---|---|
| リポジトリ | SBOMを取り出す。判断結果をリリースの確認項目に反映する |
| 課題管理ツール | 要判断の部品を1件1課題として起票する |
| 判断台帳 | 確定した判断を書き戻す。次回はここから引く |
| 配布用の表示ファイル | 表示義務のある部品を、製品同梱の表示に反映する |
最後の行を省かないでください。 表示義務があると判定しただけでは、義務は果たされません。製品に同梱する表示ファイルまでつないで、はじめて業務が閉じます。
人が確認する
全件、人が確定します。段階的な自動確定もしません。
理由は、ライセンスの判断が事業判断だからです。同じライブラリでも、自社運用なら問題なく、顧客環境へ設置するなら条件が付くことがあります。この判断は、製品の出し方と顧客との契約を知っている人にしかできません。
確認を速くするための設計が重要です。
- レポートを 「未知」「要判断」「過去どおり」の3つに分けて出す
- 「過去どおり」は一覧で見せ、1件ずつ開かせない
- 「要判断」には、条文の該当箇所を引用して添える
- 前回からの差分だけを出す。全件を毎回並べない
これらがないと、レポートが長くなり、読まれなくなります。
例外に対処する
| 起きること | 対応 |
|---|---|
ライセンス識別子が取れない(NOASSERTION) | AIに渡さず人へ回す。推測させない |
| 一覧にない独自ライセンス | 人へ回す。条文の入手先も一緒に提示する |
| 同じ部品に複数のライセンスが併記されている | 選択肢を保ったまま人へ回す。どれを選ぶかは人の判断 |
| 版だけが上がった | 再判定の対象にする。版でライセンスが変わることがある |
| 同じ部品が複数の経路から入っている | 1件に集約し、経路は付帯情報として残す |
| 条文が長すぎて1回で渡せない | 条項単位に分けて渡す。要約して渡さない |
| 過去の判断と食い違う結果が出た | 自動で上書きしない。両方を並べて人へ回す |
| 差分が0件 | 通知しない |
| リリース直前に要判断が大量に出た | 件数を見せ、リリース判定の材料にする。自動で通す分岐を作らない |
記録を残す
- SBOM(リリースごと。製品に何が入っていたかの記録になります)
- ライセンス条文の取得日と版
- AIが出した論点と、引用した条文の箇所
- 人が下した判断、判断者、判断日、理由
- 人がAIの整理を訂正した箇所
最後の項目は精度の実測値になります。「表示義務の判定はそのまま通るが、組み合わせの指摘は半分が的外れ」と分かれば、どこを直すかが決まります。
SBOMそのものの保存は、別の意味でも効きます。 脆弱性が公表されたときに「自社製品のどの版に入っているか」を即答できる状態になります。
04実装レベルの3段階
半自動化の時点で、35分が15分程度になります。 差分と過去引きが入るだけで、見る対象が月60件から10件前後に減るためです。本格構成にすると10分程度になりますが、課題管理と表示ファイルへの連携の実装が必要です。
05工数削減シミュレーション
導入後 60件 × 10分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 自社製品やサービスにOSSを組み込んでいて、リリースが月10回以上ある企業。依存関係がパッケージマネージャで管理されており、SBOMを機械的に出せること。顧客に納品する形態(組込み・オンプレミス配布)がある場合はとくに向く。
- 社内利用のみでソフトウェアを配布していない場合(そもそも多くの条件が発動しない)。依存が10個程度で固定されており、一度確認すれば変わらない場合。専用のOSSコンプライアンス製品をすでに導入している場合。
07最小構成で試す方法
- 主力製品のリポジトリから、SBOMを1回出力する
- 出力された部品の数を数える(多くの場合、想定の5倍から10倍あります)
- ライセンス識別子ごとに件数を集計する
- 上位10種類の条文を、生成AIに「この製品の配布形態で発動する条件を挙げて」と渡す
- 知財担当が、その整理が使えるかを見る
2の件数を数えるところだけは必ずやってください。 ここで「把握できていない依存がどれだけあるか」が分かります。この数字が、投資判断の材料になります。
判断の目安は次のとおりです。
| 把握できていない依存の割合 | 判断 |
|---|---|
| 7割以上 | 自動化する価値が大きい。手作業では追いつかない |
| 3〜7割 | 差分の自動化だけでも効く |
| 3割未満 | すでに管理できている。台帳の整備を先にする |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 部品が数千件出てきて手がつかない | 差分だけを対象にする。初回だけは上位のライセンス種別で束ねて処理する |
| ライセンス表記が揺れて照合できない | SPDXの短い識別子に正規化してから照合する |
| 識別子が不明な部品をAIが推測して埋める | 未知は人へ回す分岐を先に作る。プロンプトの禁止だけに頼らない |
| 版上げを見逃す | 差分の条件に「版の変化」を必ず入れる。版でライセンスが変わることがある |
| 配布形態が分からず判定できない | 製品ごとに登録して持つ。開発者に毎回聞く運用にしない |
| AIが可否を断定してしまう | 出力スキーマから結論の欄を外す。needs_human を既定で真にする |
| レポートが長くて読まれない | 3分割(未知・要判断・過去どおり)で出す。差分0件なら通知しない |
| 表示義務の判定だけで終わっている | 製品同梱の表示ファイルへの反映まで連携する |
| 台帳が更新されず、毎回ゼロから調べる | 判断の確定と台帳への書き込みを、同じ画面の同じ操作にする |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 自社製品の依存構成、部品名と版、社内の判断履歴。自社製品が何でできているかを示す情報です。
- SBOMの機密性 … 部品と版の一覧は、攻撃者にとっては脆弱性を探す地図になります。 外部サービスへ送る範囲を、情報管理規程で確認してください
- ソースコードは渡さない … AIに渡すのは、部品名・版・ライセンス条文・配布形態までです。コードそのものは渡さない設計にしてください
- ライセンス条文は公開情報 … 条文の側は公開情報なので、外部送信の問題は生じません。機密性があるのは自社の依存構成のほうです
- 学習利用 … 入力を学習に使わないことが契約で保証されるサービスを選びます
- 判断の権限 … 可否を決めるのは知財または法務です。開発者が自分で承認できる構成にしないでください
- AIの整理を根拠にしない … 社外に対する説明の根拠は、条文と人の判断です。「AIがそう言った」を記録に残さないでください
- 自動実行してよい範囲 … 収集、差分、台帳照合、論点整理までです。可否の確定と、製品同梱の表示の変更は、必ず人が行います
誤りが起きた場合のリスクは、ライセンス条件に反した状態での配布です。契約上の問題になるほか、顧客への出荷停止や、公開請求への対応が生じることがあります。判断の根拠と判断者を必ず残してください。
10まず何から始めるか
1週目:いま何が入っているかを数える
主力製品のSBOMを1回出力し、部品数とライセンスの種類を数えてください。この数字だけで、話が進みます。 多くの現場で、把握していた数の数倍が出てきます。
2週目:配布形態を書き出す
製品ごとに「自社運用のみ」「顧客環境へ設置」「機器に組み込んで出荷」のどれかを決め、表にしてください。これは人が決めることで、AIには決められません。 ここが埋まっていないと、何も判定できません。
3〜4週目:上位10ライセンスで試す
件数の多い上位10種類について、条文と配布形態を生成AIに渡し、発動する条件を整理させます。知財担当が見て、引用された条文の箇所が正しいかを確かめてください。結論の正しさより、根拠がたどれるかを見ます。
2か月目:差分と台帳を作る
前回SBOMとの差分、判断台帳の照合を作ります。ここまでで削減の大半が出ます。 月60件が10件前後になるかを実測してください。
3か月目以降: リリース時の自動実行と、課題の自動起票をつなぎます。あわせて、表示義務のある部品を製品同梱の表示ファイルへ反映する経路を作ってください。 ここを作らないと、点検しただけで義務は果たされません。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
SPDXライセンス一覧が、自由に利用できるソフトウェア・データ・ハードウェア・文書で広く使われるライセンスと例外を収録し、各項目が「標準化された短い識別子・正式名称・ライセンス本文・恒久URL」を持つこと。MIT Apache-2.0 GPL-3.0-only BSD-3-Clause CC-BY-4.0 などの識別子が掲載され、機械可読のデータファイルが別途配布されていること | SPDX License List | 2026-09-21 |
| GitHubが、リポジトリの依存関係グラフの現在の状態をSBOMとして書き出せること。形式は業界標準のSPDXで、版・パッケージ識別子・ライセンス・推移的な依存経路・著作権情報を含むこと。書き出しは画面(Insights → Dependency graph → Export SBOM)、REST API、ワークフローの3通りで行えること | GitHub Docs: Exporting a software bill of materials for your repository | 2026-09-21 |
Claude APIの構造化出力が、制約付きデコードによりスキーマに沿ったJSONの生成をモデル側で保証すること。JSONスキーマでは列挙・定数・anyOf・参照などが使え、再帰スキーマや数値の範囲指定(minimum maximum minLength maxLength)は使えないこと | Claude Docs: Structured outputs | 2026-09-21 |
ライセンス条件の解釈と、その条件を自社の配布形態に当てはめた判断は、法的な判断です。 この構成が行うのは、条文と依存構成を突き合わせて論点を並べるところまでです。可否の判断は、自社の知財・法務部門、または顧問弁護士に確認してください。 とくに、顧客環境へ設置する形態や機器に組み込む形態では、自社運用の場合と発動する条件が変わります。AIの整理を、社外への説明の根拠に使わないでください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0130)についてのご相談はこちらから。
