Media > AI活用ユースケース > 知財 > 製品に組み込んだOSSの一覧(SBOM)とライセンス本文から、取扱説明書・製品同梱用のライセンス表示文書の下書きを作り、表示漏れを機械で確かめる

製品に組み込んだOSSの一覧(SBOM)とライセンス本文から、取扱説明書・製品同梱用のライセンス表示文書の下書きを作り、表示漏れを機械で確かめる

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

機器のファームウェアやアプリを出荷・更新するたびに、SBOMとライセンス本文から取扱説明書や製品画面に載せるライセンス表示文書の下書きを作ります。SBOMの全部品と著作権表示が下書きに入っているかは、プログラムで突き合わせます。

サマリー
生成AI
Azure OpenAI Service/Claude/Gemini
対象業界
IT・SaaS/製造
対象部門
知財/研究開発
対象業務
内容確認・チェック/書類作成
主な課題
属人化している/書類作成に時間がかかる/確認ミスが多い
AIで行う処理
生成
主な効果
入力漏れ削減/品質標準化/工数削減
導入難易度
★★★★☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
60h/月
AI導入後
15h/月
想定削減
75%
年間削減
540h
モデル条件による試算値です。実在企業の実績ではありません。

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

導入前(Before)
  1. 開発の担当から、新しい版のSBOMと変更した部品の一覧を受け取る
  2. 前の版の表示文書を開き、部品の追加・削除・版の変更を1つずつ反映する
  3. 追加された部品のソースからLICENSE・COPYINGのファイルと著作権表示を探し、貼り付ける
  4. Apacheライセンスの部品にNOTICEファイルがあれば、その文を貼り付ける
  5. ライセンスごとに部品をまとめ、本文を1回だけ載せる形に並べ直す
  6. GPL・LGPLの部品について、ソースコードの入手方法の記載を確かめる
  7. 取扱説明書用と画面用の2つに整形し、開発の担当に返す
導入後(After)
  1. 自動ビルドのCIがSBOM(SPDX)を出力し、保管の場所に置く
  2. 自動SBOMの保存をきっかけに、連携のプログラムが部品の一覧と、前の版との差分を作る
  3. 自動各部品のソースから、ライセンスのファイル・著作権表示の候補・NOTICEファイルを取り出す
  4. 自動ライセンスが `NOASSERTION`、申告と結論が違う、ソースの提供の申し出が要る部品を、知財の担当の確認待ちに入れる
  5. 自動Azure OpenAI が、部品の一覧とライセンスのまとめ方から、表示文書の構成と説明の文を差し込み記号付きで作る
  6. 自動プログラムが差し込み記号に原文を入れ、取扱説明書用と画面用の2つを組み立てる
  7. 自動SBOMの全部品・著作権表示・NOTICEの文が下書きに入っているかを文字列で突き合わせる
  8. 人知財の担当が、4番目の確認待ちと7番目の突き合わせの結果を見て、下書きを確かめる
  9. 人確定した文書を文書の管理システムに登録し、開発の担当へ渡す
各工程の詳しい説明を読む
  1. 開発の担当から、新しい版のSBOMと変更した部品の一覧を受け取る
  2. 前の版の表示文書を開き、部品の追加・削除・版の変更を1つずつ反映する
  3. 追加された部品のソースからLICENSE・COPYINGのファイルと著作権表示を探し、貼り付ける
  4. Apacheライセンスの部品にNOTICEファイルがあれば、その文を貼り付ける
  5. ライセンスごとに部品をまとめ、本文を1回だけ載せる形に並べ直す
  6. GPL・LGPLの部品について、ソースコードの入手方法の記載を確かめる
  7. 取扱説明書用と画面用の2つに整形し、開発の担当に返す

(a)差分の反映が漏れる。 開発の担当から届く「変更した部品の一覧」は、意図して入れ替えた部品だけです。依存関係で一緒に上がった部品や、ビルドの設定で増えた部品は、一覧に載らないことがあります。 前の版の文書を直す作り方では、一覧に無い変化を拾えません。

(b)著作権表示を探すのに時間がかかる。 著作権表示は、LICENSEファイルの先頭、ソースの各ファイルの冒頭、AUTHORSのファイルなど、部品ごとに書かれている場所が違います。新しい部品が10個入ると、探すだけで1時間を超えます。

(c)NOTICEファイルを見落とす。 Apacheライセンス2.0は、元の作品にNOTICEファイルがあれば、その帰属の表示を読める形で含めることを求めています。NOTICEファイルがあるかどうかは、ソースを開かないと分かりません。

(d)作れる人が限られる。 ライセンスごとのまとめ方、GPLの部品の書き方、画面用の整形の決まりは、1名の担当の手順書と経験にあります。その人が休むと、表示文書の出来上がりが出荷に間に合いません。

  1. 【自動】 ビルドのCIがSBOM(SPDX)を出力し、保管の場所に置く
  2. 【自動】 SBOMの保存をきっかけに、連携のプログラムが部品の一覧と、前の版との差分を作る
  3. 【自動】 各部品のソースから、ライセンスのファイル・著作権表示の候補・NOTICEファイルを取り出す
  4. 【自動】 ライセンスが NOASSERTION、申告と結論が違う、ソースの提供の申し出が要る部品を、知財の担当の確認待ちに入れる
  5. 【自動】 Azure OpenAI が、部品の一覧とライセンスのまとめ方から、表示文書の構成と説明の文を差し込み記号付きで作る
  6. 【自動】 プログラムが差し込み記号に原文を入れ、取扱説明書用と画面用の2つを組み立てる
  7. 【自動】 SBOMの全部品・著作権表示・NOTICEの文が下書きに入っているかを文字列で突き合わせる
  8. 【人】 知財の担当が、4番目の確認待ちと7番目の突き合わせの結果を見て、下書きを確かめる
  9. 【人】 確定した文書を文書の管理システムに登録し、開発の担当へ渡す

4番目と7番目が、この設計の分かれ目です。 判断の要る部品は下書きの前に止め、漏れはAIの出来とは関係なく、プログラムで数えます。 下書きの文の出来がどうであれ、部品が1つ抜けていれば突き合わせで止まります。

8番目を省きません。 表示文書は出荷物に載り、後から直すには取扱説明書の改版やファームウェアの更新が要ります。 人が見るのは、確認待ちの部品と突き合わせで止まった箇所、それに前の版からの差分です。

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

構成図
ビルドのCI(SBOM:SPDX形式)/ソースの保管庫/前の版の表示文書
   │
   ▼【トリガー】SBOMの保存
Azure Functions
   ├──▶ 部品の一覧と、前の版との差分(プログラム)
   ├──▶ ライセンスのファイル・著作権表示・NOTICEの取り出し(プログラム)
   └──▶ 判断の要る部品を確認待ちへ(NOASSERTION/申告と結論の違い/ソースの申し出)
   ▼
Azure OpenAI(Microsoft Foundry)
   │   ① 文書の構成(ライセンスごとのまとまり)
   │   ② 前文・各まとまりの説明の文(本文と著作権表示は差し込み記号で書く)
   ▼
Azure Functions ── 差し込み記号に原文を入れる → 取扱説明書用/画面用に組み立て
   ▼
突き合わせ(SBOMの全部品・著作権表示・NOTICEの文が入っているか)
   ▼
【知財の担当が確認】→ 文書の管理システムへ登録 → 開発の担当へ
役割想定する製品代替候補
生成AIAzure OpenAI(Microsoft Foundry)Claude API、Gemini API
連携Azure Functions(SBOMの読み込み、原文の取り出し、差し込み、組み立て)Azure Logic Apps
差異計算突き合わせのプログラム(SBOMと下書き、前の版と新しい版)─
保管Azure Blob Storage(SBOM、取り出した原文、下書き、入出力の控え)社内のファイルサーバー
ビルド既存のCI(SBOMの出力)─

ビルドのCIと文書の管理システムは、新しく足すものではありません。 この構成は、CIが出したSBOMとソースを読むだけで、ソースやSBOMを書き換えません。 確定した文書の登録も、知財の担当が行います。

生成AIを Azure OpenAI にするのは、出荷前の製品の構成を社内の取り決めに乗せて扱うためです。 公式のページでは、プロンプトと出力は他のお客様に提供されず、OpenAI にも提供されず、モデルやサービスの改善に使われないとされています。どの機種にどの版の部品が入っているかは、発売前の製品の情報です。

部品の情報は、SPDXの項目から取ります。 SPDX 2.3.1 の仕様では、パッケージに版(PackageVersion)、結論のライセンス(PackageLicenseConcluded)、申告のライセンス(PackageLicenseDeclared)、著作権表示(PackageCopyrightText)などの項目があり、ライセンスと著作権表示には NONE と NOASSERTION の値があります。NOASSERTION は判断していないという意味で、何かを含意させてはならないとされています。

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

Step1

処理の起点を決める

ビルドのCIがSBOMを保存したことを起点にします。 出荷や更新の候補のビルドだけを対象にし、開発中の毎日のビルドでは動かしません。下書きがリリースの判定の会議より前にそろっていれば、表示文書が出荷の足を止めなくなります。

1つの版で動くのは1回です。同じ版のSBOMが再度保存されたら、前の下書きを上書きせず、版の中の通し番号を上げて作り直します。 どのSBOMから作った下書きかが、後から追えるようにするためです。

もう1つの起点は、知財の担当が確認待ちの部品の判断を入力したときです。 判断が入るたびに組み立てと突き合わせをやり直し、すべての部品が判断済みになった時点で、確認の画面に下書きを出します。

Step2

入力データを集める

データ中身取得元
SBOM部品の名前・版・申告と結論のライセンス・著作権表示・入手元ビルドのCI(SPDX形式)
ライセンスのファイルLICENSE・COPYING などの原文ソースの保管庫
著作権表示の候補ライセンスのファイルとソースの冒頭から取り出した行ソースの保管庫
NOTICEファイルApacheライセンスの部品のNOTICEの原文ソースの保管庫
前の版の表示文書部品ごとの記載と、知財の担当が付けた注記文書の管理システム
表示の決まりライセンスごとのまとめ方、前文の定型、GPL等の記載、画面用の整形の決まり知財の手順書

質を決めるのは、いちばん下の表示の決まりです。 ライセンスごとにまとめるか部品ごとに並べるか、前文に何を書くか、ソースコードの入手方法をどこに書くか。この決まりを文書にしておかないと、AIは毎回違う構成で書きます。

著作権表示は、SBOMの項目だけに頼りません。 SPDXの著作権表示は任意の項目で、空のときは NOASSERTION と同じ意味になります。SBOMの値と、ソースから取り出した候補を両方持ち、どちらを使うかは知財の担当が部品ごとに一度決めて、次の版から引き継ぎます。

Step3

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

取るものどこから何に使うか
部品の一覧SBOMのパッケージの項目下書きの部品の母集団
前の版との差分前の版のSBOMとの比較確認の画面での強調
ライセンスの原文部品のソースのライセンスのファイル差し込み
著作権表示SBOMの項目、ソースの冒頭の行差し込み
NOTICEの原文部品のソースのNOTICEファイル差し込みと突き合わせ
判断済みの扱い前の版の知財の注記確認待ちに入れるかの判定

ライセンスの原文は、部品のソースにあるものを使います。 同じMITライセンスでも、著作権表示の行は部品ごとに違います。MITライセンスは、著作権表示とこの許諾の表示を、ソフトウェアのすべての複製または重要な部分に含めることを条件にしています。一般的なMITの本文を1つ載せて済ませると、部品ごとの著作権表示が落ちます。

NOTICEファイルは、ファイル名で探して取り出します。 Apacheライセンス2.0の第4条(d)は、元の作品の配布物にNOTICEのテキストファイルがある場合、派生物に帰属の表示の読める写しを、派生物と一緒に配布するNOTICEファイル、ソースや文書、または派生物が表示する画面のいずれかに含めることを求めています。この構成では、取扱説明書と画面の両方に入れる前提で組み立てます。

Step4

AIへ渡す前に整形する

  1. SBOMの読み込みと検査 … SPDXの形式として読めるかを確かめ、部品の名前と版の重複を除きます
  2. 差分の作成 … 前の版のSBOMと比べ、追加・削除・版の変更・ライセンスの変化を一覧にします。開発の担当の「変更した部品の一覧」と照らし、一覧に無い変化に印を付けます
  3. 判断の要る部品の抽出 … 結論のライセンスが NOASSERTION か NONE、申告と結論が違う、ライセンスの式に OR を含む、ソースコードの提供の申し出が要るライセンス(GPL・LGPLなど)。前の版で知財が判断済みで、版もライセンスも変わっていない部品は除きます
  4. 原文の取り出し … ライセンスのファイル、著作権表示の候補、NOTICEファイルを部品ごとに取り出し、取り出したままの文字で保存します。 改行や空白も変えません
  5. 差し込み記号の割り当て … 部品ごとに {{LICENSE:部品ID}} {{COPYRIGHT:部品ID}} {{NOTICE:部品ID}} の記号を割り当てます
  6. AIに渡す情報の絞り込み … AIには部品の名前・版・ライセンスの識別子・差し込み記号・表示の決まりだけを渡し、ライセンスの原文は渡しません

6番目が、この構成でいちばん効く前処理です。 原文を渡さなければ、AIは原文を書き換えようがありません。AIが見るのは「どの部品が、どのライセンスで、どの記号か」だけです。

3番目のGPLの部品の扱いは、手順書に書いておきます。 GPLv2の第3条は、目的コードや実行形式で配布する場合に、対応するソースコードを添えるか、少なくとも3年間有効な書面による申し出を添えるなどのいずれかを求めています。どの方法を取るかは製品ごとに知財が決めることで、AIに選ばせません。

Step5

AIに処理させる

させるのは、表示文書の構成を決め、前文と各まとまりの説明の文を書き、差し込み記号を正しい位置に置くことだけです。

させること内容決まりで固定するもの
まとまりの構成ライセンスの識別子ごとに部品をまとめ、並べる順を決める並べる順の規則(手順書)
前文製品にOSSが含まれること、各ライセンスに従うこと前文の定型(手順書)
まとまりの説明そのまとまりに属する部品の名前と版の一覧─
差し込み記号の配置本文・著作権表示・NOTICEの記号を、部品ごとに置く記号は前処理が割り当てたものだけ
ソースの入手方法の欄知財が決めた方法の文を置く位置文そのものは知財が書いた定型
前の版からの変更点の要約確認の画面に出す、追加・削除・版の変更の要約─
させないこと理由
ライセンスの本文・著作権表示・NOTICEの文を書く原文のまま載せる。AIには渡さない
ライセンスの判定(どのライセンスに当たるか)SBOMの値と知財の判断に従う
NOASSERTION の部品の扱いを決める前処理で止め、知財が決める
ソースの提供の方法を選ぶ製品ごとに知財が決める
部品を省く・まとめて「その他」にする全部品を載せる。漏れの原因になる

5行目は、指示に書いておかないと起きます。 部品が300あると、AIは「ほか多数のライブラリ」とまとめようとします。まとめた瞬間に、突き合わせが漏れとして止めます。 止まるのは正しい動きですが、毎回止まらないように指示で禁じておきます。

Step6

指示内容を固定する

あなたはメーカーの知財部で、製品に同梱するOSSライセンス表示文書の下書きを作る担当です。
渡された部品の一覧と表示の決まりだけを使ってください。

【作るもの】
1. 前文(表示の決まりの定型に沿う)
2. ライセンスの識別子ごとのまとまり。まとまりの中に、部品ごとの項目を置く
3. 部品ごとの項目には、部品名、版、そして渡された差し込み記号を置く
   {{COPYRIGHT:部品ID}} → {{NOTICE:部品ID}}(あれば)→ {{LICENSE:部品ID}}
4. ソースコードの入手方法の欄には {{SOURCE_OFFER}} だけを置く
5. 確認用に、前の版からの変更点を箇条書きで要約する

【厳守事項】
- ライセンスの本文、著作権表示、NOTICEの文を書かない。差し込み記号だけを置く。
- 差し込み記号は、渡された一覧にあるものだけを使う。新しい記号を作らない。
- 渡されたすべての部品を、1つずつ項目にする。
  「ほか」「その他のライブラリ」のようにまとめない。省略しない。
- 部品名と版は、渡された文字のまま書く。表記を整えない。
- ライセンスの識別子が "NOASSERTION" の部品は一覧に含まれていない。
  含まれていた場合は、項目にせず unresolved に入れる。
- どのライセンスに当たるか、どの義務があるかを書かない。
- 前文に、法的な保証や責任についての文を足さない。

【部品の一覧】{components}
【表示の決まり】{rules}
【前の版からの差分】{diff}

「部品名と版は渡された文字のまま」を入れるのは、突き合わせを文字列で行うからです。 libxml2 を LibXML2 に整えられると、突き合わせが漏れと判定します。整えた文字が正しいかではなく、元と一致するかで見る設計です。

「前文に法的な保証や責任の文を足さない」は、生成AIが前文を「丁寧に」書くと起きる問題への対処です。 「本ソフトウェアは現状のまま提供され…」のような文は、各ライセンスの本文に書かれています。前文で別の言い回しを足すと、本文との食い違いが生まれます。

Step7

出力形式を固定する

構造化出力で、次の形に固定します。 公式のページでは、構造化出力は指定した JSON スキーマに従わせる機能で、Chat Completions API では response_format、Responses API では text.format でスキーマを定義するとされています。すべての項目を必須にし、オブジェクトには additionalProperties: false を設定することが求められ、スキーマは最大100個のオブジェクトのプロパティ、5段の入れ子までとされています。

{
  "preamble": "",
  "groups": [
    {
      "license_id": "Apache-2.0",
      "components": [
        { "component_id": "", "name": "", "version": "",
          "placeholders": ["{{COPYRIGHT:…}}", "{{NOTICE:…}}", "{{LICENSE:…}}"] }
      ]
    }
  ],
  "source_offer_placeholder": "{{SOURCE_OFFER}}",
  "unresolved": [ { "component_id": "", "reason": "" } ],
  "change_summary": [ "" ]
}

1つ目の理由は、placeholders を突き合わせの対象にできることです。 組み立ての前に、すべての部品の記号がそろっているか、一覧に無い記号が無いかを数えます。記号がそろっていれば、原文は必ず入ります。

2つ目は、部品の数がスキーマの上限に当たらないことです。 部品は components の配列の要素として並べるので、部品が300あってもプロパティの数は増えません。部品ごとにキーを作る形にすると、上限に当たります。

組み立ての後の突き合わせは、次の表で行います。

突き合わせ方法一致しないときの扱い
SBOMの全部品が下書きにあるか部品IDの集合の比較下書きを出さず、足りない部品を表示
著作権表示の原文が入っているか取り出した原文が文字列として含まれるか該当の部品を確認待ちへ
NOTICEの原文が入っているか同上該当の部品を確認待ちへ
前の版にあって消えた部品前の版との差分と照合確認の画面で強調
画面用と取扱説明書用の部品が同じか2つの部品IDの集合の比較下書きを出さない

3つ目の理由は、unresolved で、AIが扱えなかった部品を拾えることです。 前処理で外したはずの部品が混ざっていた場合も、ここに出ます。

Step8

システムへ連携する

つなぎ先方式内容
ビルドのCISBOMの保存先の読み取りSBOMを取る
ソースの保管庫読み取りライセンスのファイル・著作権表示・NOTICEを取る
Azure OpenAIAPI呼び出し(構造化出力)構成と説明の文を作る
文書の管理システム読み取り(前の版)、登録は人前の版の文書と注記を取る
確認の画面下書きと突き合わせの結果を出す知財の担当が確かめる

文書の管理システムへの登録は、知財の担当が行います。 自動で登録すると、確認前の下書きが「最新版」として開発の担当に渡ります。出荷物に載る文書は、人の確認を経た版だけにします。

ソースの保管庫とビルドのCIは読み取りだけです。SBOMのライセンスの値が誤っていると分かっても、この構成からは直しません。 開発の担当に、SBOMを出す側の設定を直してもらいます。

Step9

人が確認する

人が見るのは、確認待ちの部品、突き合わせで止まった箇所、前の版からの差分の3つです。

  1. 確認待ちの部品 … NOASSERTION、申告と結論の違い、OR を含むライセンス、ソースの提供の申し出が要るもの。ライセンスの判断と、ソースの提供の方法を決めます
  2. 突き合わせで止まった箇所 … 部品の欠け、原文の不一致。多くは原文の取り出しの誤りで、取り出しの設定を直します
  3. 前の版からの差分 … 追加・削除・版の変更。開発の担当の一覧に無い変化を、とくに見ます
  4. 前文とまとまりの説明の文 … 定型から外れた文が無いかを読みます

下書きの全文を読み直すことはしません。 本文と著作権表示は原文のまま差し込まれ、突き合わせで確かめられています。全文を読む設計にすると、180分が45分には収まりません。

判断の結果は、部品と版の組み合わせで記録し、次の版に引き継ぎます。 同じ部品の同じ版が次の機種に入っても、同じ判断をもう一度しないで済みます。 ただし、部品の版が上がったら、ライセンスが変わっていなくても判断をやり直します。 版が上がるとNOTICEファイルや著作権表示が変わることがあるからです。

Step10

例外に対処する

起きること対応
SBOMがSPDXとして読めない下書きを作らず、開発の担当に出力の設定の確認を頼む
部品のソースにライセンスのファイルが無い確認待ちへ。入手元を知財が確かめる
著作権表示の候補が見つからないSBOMの値を使い、それも無ければ確認待ちへ
NOTICEファイルの文字コードが読めない確認待ちへ。手で取り出す
AIの出力に一覧に無い記号がある下書きを出さず、作り直す。2回続けば確認待ちへ
部品が多く、1回の出力が途中で切れるライセンスのまとまりごとに分けて作る
前の版の表示文書が見つからない差分を出さずに全部品を確認の対象にする
確認待ちが出荷の期日までに解けない出荷の判定の会議に、未解決の部品の一覧を出す
1つの部品に複数のライセンスがかかる(AND の式)部品の項目を、かかるライセンスのまとまりごとに置き、本文の記号をすべて付ける
画面用の整形で文字数の上限を超える画面用だけ部品ごとのページに分け、部品IDの突き合わせを両方で行う

上の2行が大半を占めます。 2行目はとくに、ライセンスのファイルを持たない小さな部品や、他の部品にファイルが同梱されている部品で起きます。ここはAIでは埋まらないので、知財の担当が入手元を確かめます。

Step11

記録を残す

  • 下書きを作ったSBOMのファイルと、その版・通し番号
  • 取り出したライセンスの原文・著作権表示・NOTICEの原文(取り出したままの文字)
  • AIへの入力(部品の一覧・表示の決まり・差分)と出力のJSONの全文
  • 組み立てた下書き(取扱説明書用・画面用)と、突き合わせの結果
  • 確認待ちの部品ごとの知財の判断と、判断した人・日付
  • 確定した文書と、それを載せた機種・版・出荷日

最後の行は、問い合わせへの備えです。 出荷後に「この機種のこの版に入っている部品の表示を見たい」と言われたとき、どのSBOMから作り、誰がどう判断した文書かを、すぐに示せます。

04実装レベルの3段階

最小構成:SBOMの表を手でAIの画面に貼り、構成を作らせる / 文書の構成の下書き
半自動化:上記+原文の取り出しと差し込みをプログラムで行い、SBOMとの突き合わせを足す / 原文の取り出し・組み立て・漏れの検出
本格構成:上記+CIのSBOMの保存から自動で動かし、判断の要る部品を確認待ちに入れ、判断を次の版に引き継ぐ / 表示文書の作成の全体と、確認の振り分け

最小構成では、原文が入りません。 構成を作れるかを確かめるための段階です。 半自動化で、1件180分が90分程度になります。 原文を探して貼る工程は消えますが、判断の要る部品を毎回1から見直す工程が残ります。本格構成で45分になり、この段階が本記事の想定です。 差が大きいのは、判断済みの部品を次の版に引き継ぎ、確認を差分に絞れるからです。 段階を飛ばさないでください。 半自動化の1か月で、ライセンスのファイルを持たない部品と、著作権表示の取り出しに失敗する部品が先に分かります。そこを直してからCIにつなぐほうが、確認待ちが溢れません。

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

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

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

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

AI活用について相談する

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

向いている
  1. 組込み機器・家電・産業機器・業務用端末などにLinuxや多数のOSSを組み込み、機種と版ごとに取扱説明書や製品の画面へライセンス表示を載せているメーカー。ビルドでSBOMを出力できる、または出力の準備がある場合。出荷やファームウェアの更新のたびに、前の版の表示文書を手で直していて、部品の追加や版の変更の反映漏れが心配な場合。
向いていない
  1. 組み込んでいるOSSが数個で、表示文書がほとんど変わらない場合。SBOMを出力しておらず、どのOSSが入っているかを開発の担当の記憶に頼っている場合(まずビルドでSBOMを出力するのが先です)。どのライセンスに当たるか、どの義務を果たすべきかの判断までAIに任せたい場合(この構成は表示文書の下書きと漏れの検出までで、ライセンスの判断は知財・法務の担当が行います)。

07最小構成で試す方法

  1. 最近出荷した機種から1つ選び、そのSBOMと確定した表示文書を用意する
  2. SBOMから部品の名前・版・ライセンスの識別子を表にし、各部品に差し込み記号を振る
  3. 手元のAIサービスの画面に、その表と表示の決まりを貼り付ける
  4. 「ライセンスごとにまとめ、部品ごとに差し込み記号を置いた表示文書の構成を作ってください。本文や著作権表示は書かないでください。部品を省略しないでください」と指示する
  5. 出てきた構成の部品の数と記号を、表の部品の数と記号に突き合わせる

1機種は必ずやってください。 組み立てのプログラムを作る前に、「全部品を省かずに並べられるか」と「記号だけを置けるか」を確かめます。

出てきた内容判断
全部品が記号付きで並んだ原文の取り出しと組み立てに進む
部品を「その他」にまとめた・本文を書いた指示と構造化出力で直る。構成は有効
確定した文書に無い部品がSBOMにあったこれまでの文書に漏れがあった。 知財で確かめる

3行目が出ることは珍しくありません。 失敗ではなく、前の版を直す作り方で拾えなかった変化が見つかったということです。 その部品を確かめ、必要なら表示文書の改版を検討してください。

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

問題対策
AIが著作権表示やライセンスの本文を書き換える原文をAIに渡さない。 差し込み記号だけを置かせる
部品を「その他」にまとめる指示で禁じ、部品IDの集合で突き合わせる
部品名の表記を整えて突き合わせが外れる渡された文字のまま書かせる
部品ごとにキーを作りスキーマの上限に当たる部品を配列の要素にする
出力が途中で切れるライセンスのまとまりごとに分けて作る
SBOMの著作権表示が空ソースの候補と両方を持ち、知財が一度決めて引き継ぐ
NOTICEファイルを見落とすファイル名で探して取り出し、突き合わせの対象にする
NOASSERTION の部品が下書きに入る前処理で止め、知財の判断を待つ
GPLの部品のソースの提供の方法をAIが書く欄には記号だけを置き、文は知財の定型を入れる
確認前の下書きが開発に渡る文書の管理システムへの登録は人が行う
前の版の文書を下敷きに直す運用が残る毎回SBOMの全体から作る。 前の版は差分の比較にだけ使う

上の2行が、この構成の失敗のほとんどです。 どちらも「AIが書いた文を出荷物に載せる」範囲を広げたときに起きます。AIの出力を構成と記号に限り、中身は原文で埋める。 これを守れば、漏れはプログラムで数えられます。

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

この構成で扱うデータ: 発売前の機種の構成(どの部品のどの版が入っているか)、ソースの保管庫の中身、前の版の表示文書と知財の注記です。

  1. 発売前の構成を社外に出さない … どの機種にどの部品が入るかは、発売前の製品の情報です。生成AIは自社の取り決めに乗るサービスを使い、プロンプトと出力の扱いを公式のページで確かめておきます
  2. ソースそのものをAIに渡さない … AIに渡すのは部品の名前・版・識別子・記号だけです。ソースや原文は、取り出しのプログラムの中だけで扱います
  3. ライセンスの判断をAIに寄せない … どのライセンスに当たるか、どの義務をどう果たすかは、知財・法務の担当が決めることです。 この構成が出すのは下書きと漏れの検出だけです
  4. ソースの提供の約束を勝手に書かない … GPLの部品については、ソースを添えるか申し出を添えるかなどの方法を製品ごとに決めます。決めた方法の文は知財の定型として管理し、AIに書かせません
  5. SBOMの誤りを表示文書で隠さない … SBOMのライセンスの値が誤っていると分かったら、表示文書の側で直さず、SBOMを出す側を直します。 両方がずれたまま残ると、次の版で同じ誤りが出ます
  6. 判断の記録を残す … 確認待ちの部品の判断は、判断した人と日付とともに残します。後から問い合わせを受けたときの根拠になります

誤りが起きた場合のリスクは、表示の漏れと、原文と違う表示の2つです。 前者は部品IDの突き合わせ、後者は原文をAIに渡さず文字列で照合することで守ります。どちらもAIの出来に頼らない仕組みで止めます。

10まず何から始めるか

1週目:表示の決まりを手順書にする

ライセンスごとのまとめ方、並べる順、前文の定型、GPL・LGPLの部品の記載、画面用の整形の決まりを、知財の手順書として文書にします。 経験のある担当の作り方を書き出すことが、そのまま属人化の解消になります。

2週目:1機種で試す

最近出荷した機種のSBOMを表にし、手元のAIサービスで構成を作らせます。確定した文書と突き合わせ、部品を省いていないか、本文を書いていないかを最優先で見ます。

3週目:原文の取り出しを作る

ライセンスのファイル、著作権表示の候補、NOTICEファイルの取り出しを作り、同じ機種で、取り出しに失敗する部品の一覧を作ります。 失敗の多い型から取り出しの規則を足します。

4週目:組み立てと突き合わせをつなぐ

構造化出力で構成を受け取り、記号に原文を入れて組み立て、SBOMとの突き合わせを足します。この時点ではCIにつながず、知財の担当が手でSBOMを入れて動かします。

2か月目: 判断の要る部品の確認待ちと、判断の引き継ぎを足します。3か月目以降: CIのSBOMの保存から自動で動かし、1件180分が何分になったかを実測します。新しい機種の最初の版でも、確認待ちの部品の判断だけで表示文書がそろう状態になった時点で、この構成は完成です。


11関連ユースケース

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

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

技術仕様確認日:2026-10-08/最終更新:2026-10-08
確認した内容情報源確認日
SPDX 2.3.1 のパッケージの項目に、版(PackageVersion)、結論のライセンス(PackageLicenseConcluded)、申告のライセンス(PackageLicenseDeclared)、著作権表示(PackageCopyrightText)があること。NONE と NOASSERTION の意味(NOASSERTION は判断していないことを示し、何かを含意させてはならない)。項目が無い場合は NOASSERTION と同じ意味であることSPDX Specification 2.3.1: Package information2026-10-08
Apacheライセンス2.0の第4条(d)で、元の作品にNOTICEファイルがある場合、帰属の表示の読める写しを、派生物と一緒に配布するNOTICEファイル、ソースや文書、または派生物が表示する画面のいずれかに含めることApache License, Version 2.02026-10-08
MITライセンスが、著作権表示と許諾の表示をソフトウェアのすべての複製または重要な部分に含めることを条件とすることOpen Source Initiative: The MIT License2026-10-08
GPLv2の第3条で、目的コード等で配布する場合に、対応するソースコードを添えるか、少なくとも3年間有効な書面による申し出を添えるなどのいずれかを求めていることGNU General Public License, version 22026-10-08
構造化出力が指定した JSON スキーマに従わせる機能で、Chat Completions API では response_format、Responses API では text.format で定義すること。すべての項目を必須にし additionalProperties: false を設定すること。最大100個のオブジェクトのプロパティ、5段の入れ子までMicrosoft Learn: 構造化出力2026-10-08
プロンプトと出力が他のお客様に提供されず、OpenAI にも提供されず、モデルやサービスの改善に使われないことMicrosoft Learn: データ、プライバシー、セキュリティ2026-10-08

どのライセンスに当たるか、どの義務をどう果たすかは、自社の知財・法務の担当で判断してください。 本記事は公開されているライセンスの文と公開仕様で確認できた範囲だけを扱っています。

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

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

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

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