AIが提案したコードに、機械的に一つのライセンスを付ければ公開できるわけではありません。確認する対象は、生成物そのもの、参照したコード、追加された依存パッケージ、生成物の配布方法です。AIを使った事実だけで判断を終わらせず、差分と依存関係を人がたどれる記録にします。
SECTION 01
最初に、ライセンスを確認する対象を分ける
「AI生成コードのライセンス」を一つの欄で管理すると、確認の漏れが起きます。AIが新しく書いたように見える行、既存コードへ似た行、AIが提案した依存パッケージ、画像やサンプル設定などの非コード資産は、同じ資料から生まれたとは限りません。最初に変更差分を分解し、どの対象について根拠を集めているかを決めます。
ここでいうライセンス確認は、法的な結論を自動で出す作業ではありません。利用許諾、表示、ソース開示、同一条件での配布など、候補となる義務を見つけて、契約や配布形態と照合する入口です。判断できない部分は、コードレビューの最後に隠すのではなく、公開前の法務確認へ切り出します。
社内で使うだけなのか、顧客へSaaSとして提供するのか、実行ファイルやライブラリを配布するのかでも、確認すべき事実は変わります。AIコーディングの社内ルールへ、ライセンス確認の担当者と記録場所を追加しておくと、ツールごとの運用に閉じません。
- —生成・編集された自社コード:変更の目的、入力した文脈、レビュー履歴
- —コピーや参照の兆候:似たコード、コメント、固有の命名、取得元URL
- —追加依存:マニフェスト、ロックファイル、直接依存と間接依存
- —配布物:ソース、バイナリ、コンテナ、画像、設定、NOTICEの同梱範囲
SECTION 02
生成物の来歴とコピー兆候を、差分に残す
AIの回答欄を保存することだけが来歴管理ではありません。どのIssueや仕様から生成したか、どの提案を採用したか、既存コードをどこまで参照したか、誰が変更をレビューしたかを、コミットやPull Requestからたどれるようにします。生成物が新規実装なのか、既存の社内コードを変換したものなのかで、確認の質問は変わります。
既存コードと似ている行が見つかった場合、類似しているから直ちに問題だとも、AIが書いたから問題ないとも決めません。検索で見つかった公開コード、社内の過去実装、依頼したプロンプト、採用した提案を分けて記録します。取得元が確認できないスニペットや、ライセンス表記が切れたサンプルは、利用を止めて担当者へ戻します。
差分レビューでは、関数名やコメントだけでなく、エラー処理、テストデータ、設定例、READMEの文章にも同じ確認を行います。コードだけを調べて、同じPRに含まれるサンプル設定や画像を忘れると、配布時のNOTICEが不完全になります。
- —生成前の要求と、生成後に採用した提案をIssueまたはPRへ残す
- —類似コードの検索範囲と、確認できなかった範囲を記録する
- —外部コードを採用した場合はURL、取得日、表示条件、改変内容を残す
- —来歴が説明できない部分は、公開対象から外すか法務確認へ回す
SECTION 03
追加依存は、コードとは別にライセンスを確認する
AIが提案した一行のimportでも、プロジェクトへ新しいパッケージを追加します。まずマニフェストとロックファイルの差分を見て、直接追加されたパッケージ、そこから解決された間接依存、更新された既存依存を分けます。パッケージ名が正しいか、配布元が意図したものか、利用する機能に対して依存が必要かも確認します。
GitHubの[Dependency graphに関する公式説明](https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-the-dependency-graph)は、リポジトリの依存関係を把握するための仕組みを説明しています。Pull Requestでの[依存関係の変更レビュー](https://docs.github.com/en/pull-requests/how-tos/review-pull-requests/reviewing-dependency-changes-in-a-pull-request)も補助になります。ただし、ツールに表示されない依存や、リポジトリ外から持ち込んだコードまで自動で無罪にするものではありません。
確認結果が空でも、マニフェスト、ロックファイル、生成物のライセンス表記を人が読みます。依存を追加するPRには、追加理由、バージョン、ライセンス確認、脆弱性確認、削除条件を同じ本文へ置き、レビュアーがコード差分から行き来できるようにします。
- —直接依存と間接依存を分け、追加・更新・削除の差分を確認する
- —パッケージ名、配布元、バージョン、マニフェストの記載を照合する
- —ライセンスと脆弱性を公式の配布元・リポジトリ・ロック情報で確認する
- —解析できない依存や、手動でコピーしたコードを別の確認対象にする
SECTION 04
SPDXとNOTICEは、根拠をそろえるために使う
SPDXは、ソフトウェアのライセンスや部品情報を交換するための標準仕様と識別子を提供しています。[SPDXの仕様一覧](https://spdx.dev/use/specifications/)と公式のライセンス情報を使うと、チーム内で「MITっぽい」「商用可のはず」といった曖昧なメモを減らせます。識別子を記録することは、個別契約や利用条件の確認を省略することではありません。
依存パッケージのライセンス欄からNOTICEを機械的に作る場合も、対象範囲と生成日時を残します。依存が要求する表示、著作権表示、ソース提供、同一条件の配布などが、どのファイルに置かれたかを確認します。ライセンスの文章を短く要約して、原文の条件を消す運用は避けます。
自社コードのライセンスと、組み込んだ第三者部品の条件は別の欄で管理します。プロダクトのLICENSE、第三者一覧、NOTICE、配布物のREADMEを突き合わせ、抜けた部品や古いバージョンの記載がないかを確認します。義務の解釈に争いがある、SaaSと再配布の境界が曖昧、契約で追加条件がある場合は、公開を止めて法務へ相談します。
- —SPDX識別子、出典URL、確認日、対象バージョンを記録する
- —NOTICEへ含める部品と、ソース・表示・配布条件を対応づける
- —自社コードのライセンスと第三者部品の条件を同じ表で混ぜない
- —識別子が一致しても、例外・デュアルライセンス・契約条件を確認する
SECTION 05
配布形態ごとに、公開前の判断を変える
ライセンス表を作ったら、次に何を誰へ渡すかを確認します。社内サーバーだけで動かす、顧客へSaaSとして提供する、実行ファイルを配布する、SDKやライブラリとして再利用される、といった形では、必要な通知や提供物の候補が変わります。ここを曖昧にして「商用利用可」とだけ書くと、後から配布物の不足が見つかります。
公開の判断表では、ライセンス名だけでなく、利用形態、第三者への渡し方、変更の有無、NOTICEの同梱場所、ソースを求められた場合の対応者を並べます。Webアプリだからすべて同じ、と決めず、外部へ配布する静的ファイル、CLI、コンテナ、学習データ、サンプルコードも対象に含めます。
法務確認が必要な条件は、失敗した後に発見しやすい条件から決めます。コピーの可能性が高い、ライセンス本文が見つからない、互換性の判断ができない、顧客契約と配布条件が衝突する場合は、公開日を優先せず、対象を隔離して確認します。
- —利用形態:社内利用、SaaS、実行ファイル、ライブラリ、サンプル公開
- —配布対象:ソース、バイナリ、コンテナ、画像、設定、ドキュメント
- —同梱物:LICENSE、NOTICE、著作権表示、ソース提供に関する資料
- —停止条件:来歴不明、条件不一致、契約確認待ち、表記生成の失敗
SECTION 06
公開ゲートは、ライセンス表と人の承認で閉じる
公開前の最終確認は、「ライセンスに問題がない」という一文では足りません。変更差分、依存差分、表記ファイル、配布物、未確認事項を同じPRからたどれることを受け入れ条件にします。Codexのコードレビューを追加レビュアーとして使う場合も、来歴、契約、配布形態の最終判断は人が行います。
レビュアーは、コードの生成元を推測して承認しません。確認できた根拠と、確認できなかった範囲を分け、未確認範囲を公開から外すか、法務・責任者へ返します。ライセンス確認を自動化するほど、ツールが扱わない入力をPRテンプレートで明示することが重要です。
- —来歴:生成・採用・変更の記録と、類似コードの確認結果がある
- —依存:マニフェスト・ロックファイル・依存グラフの差分を照合した
- —表記:SPDX識別子と第三者一覧、NOTICEの対象範囲を確認した
- —配布:公開物と利用形態に対する確認者・承認者が決まっている
- —残課題:法務確認待ちや未確認の部品を公開対象から分けた
FAQ
よくある質問
Q. AIが書いたコードには、AI用のライセンスを付ければよいですか?
一つのライセンスを付けるだけでは不十分です。生成物の来歴、参照・コピーの兆候、追加依存、配布形態を分けて確認し、自社コードと第三者部品の条件を整理してください。法的な結論が必要な場合は専門家へ確認します。
Q. SPDXを使えばライセンス確認は自動で完了しますか?
完了しません。SPDXの識別子や仕様は記録をそろえる助けになりますが、取得元、バージョン、契約条件、配布形態、例外の確認は残ります。機械生成したNOTICEも人が対象範囲を確認します。
Q. GitHubのDependency graphが空なら依存問題はありませんか?
そうとは限りません。マニフェストやロックファイルで解析される範囲を確認し、手動でコピーしたコード、解析できない依存、生成物に埋め込まれた部品は別に調べます。表示結果を公開判断の唯一の根拠にしません。
Q. どの段階で法務へ相談しますか?
ライセンス本文が見つからない、似たコードの取得元を説明できない、配布条件の解釈が分かれる、顧客契約と第三者条件が衝突する場合は、公開前に相談します。確認待ちの対象は公開物から分けて管理します。