2026年に報告されたCVEは、1日あたり前年比131%増加しています。

依存関係

オープンソースライセンスコンプライアンス

オープンソースは無料で使えますが、無条件ではありません。すべてのパッケージにはライセンスがあり、オープンソースライセンスコンプライアンスとは、製品にどのライセンスが含まれているかを把握し、それらが求める条件を満たすことです。そうしたライセンスの大半は、チームの誰も選んでいない依存関係を通じて入り込みます。

更新日

このページは一般的な情報であり、法的助言ではありません。特定の製品に関する判断については、弁護士にご相談ください。

オープンソースライセンスの種類

種類 例 主に求められること
パーミッシブ MIT、BSD、Apache-2.0 著作権表示とライセンス表示を残す。Apache-2.0には特許に関する条項もある。
弱いコピーレフト LGPL、MPL-2.0 ライセンスされたコンポーネント自体への変更を共有する
強いコピーレフト GPL-2.0、GPL-3.0 それと一緒に配布するソフトウェアを、ソースとともに同じ条件で提供しなければならない
ネットワークコピーレフト AGPL-3.0 強いコピーレフトと同じで、さらにユーザーがネットワーク経由でソフトウェアを利用する場合にも適用される
ソースアベイラブル BUSL、SSPL オープンソースではない:ソースは公開されているが、利用が制限される

コピーレフトライセンスとは?

コピーレフトライセンスは、配布するものが同じ条件のままであることを条件に、ソフトウェアの使用、変更、共有を認めるライセンスです。オープンソースをオープンなまま保つための仕組みです。商用製品にとってのリスクは、強いコピーレフトのコンポーネントを自社のコードにリンクすると、自社のコードも公開しなければならないのかという問題が生じうることです。

それが当てはまるかどうかは、コンポーネントの使い方と製品の提供方法によって決まります。顧客に配布するソフトウェアは社内ツールよりも影響を受けやすく、SaaS製品は通常GPLの配布条件は回避できますが、AGPLの条件は回避できません。

よくあるコンプライアンスリスク

  • 推移的なライセンス。パーミッシブなパッケージが、コピーレフトのパッケージに依存していることがあります。直接の依存関係だけを確認していると、これを見落とします。
  • 表示の欠落。ほとんどのライセンスは帰属表示を残すことを求めており、表示ファイルの入れ忘れが最もよくある違反です。
  • ライセンスの変更。プロジェクトは新しいバージョンでライセンスを変更することがあるため、アップグレードによって条件が変わる可能性があります。
  • 宣言と実態の違い。パッケージのメタデータが誤っていたり不完全だったりすることがあり、ベンダリングされたコードが独自のライセンスを持つこともあります。
  • デューデリジェンス。買収を検討する企業や大口顧客は、多くの場合急な期限でライセンスのインベントリを求めてきます。

準拠を保つ方法

  1. ポリシーを定める。製品の種類ごとに、許可するライセンス、レビューが必要なライセンス、禁止するライセンスを決めます。
  2. インベントリを作成する。SBOMは、推移的依存関係を含め、各コンポーネントをそのライセンスとともに一覧にします。
  3. 自動でチェックする。CIでポリシーを適用し、新しい依存関係が監査の段階ではなく、追加された時点で失敗するようにします。
  4. 義務を果たす。表示ファイルを生成し、ライセンスが求める場合はソースを提供します。
  5. 記録を残す。インベントリをリリースごとに保存します。問われるのはたいてい、すでに出荷したバージョンについてだからです。

ライセンスコンプライアンスソフトウェアの役割

ライセンスコンプライアンスは、ソフトウェアコンポジション解析の標準的な一部です。ツールはコンポーネントを特定し、そのライセンスを報告し、ポリシー違反を指摘します。ツールによって深さが異なります。

  • 宣言ライセンス:ほとんどのツールは、各パッケージがメタデータで宣言している内容を読み取ります。高速で、一般的なケースをカバーできます。
  • 詳細なライセンススキャン:FOSSAとBlack Duckはコード内のライセンス文も解析し、帰属表示レポートや法務レビューを支援します。CRACIとFOSSAの比較とCRACIとBlack Duckの比較をご覧ください。
  • 無料のツール:多くのSBOMジェネレーターとSCAスキャナーは、宣言ライセンスを無料で報告します。おすすめのSCAツールをご覧ください。

CRACIの位置付け

CRACIはビルドの中で宣言ライセンスを扱います。GitHub Actionsのランナーとして、ジョブが取り込むすべてのパッケージを記録し、それぞれに宣言ライセンスが付くため、コピーレフトライセンスを製品に入り込む前に検出できます。ライセンスポリシーのルールでライセンスに応じてビルドをブロックでき、CycloneDXとSPDXのSBOMエクスポートには各コンポーネントの宣言ライセンスが含まれます。CRACIはパッケージが宣言する内容をもとに動作するため、法務レビューのワークフローやライセンス文の解析が必要な場合は、専門ツールを併用してください。

オープンソースライセンスコンプライアンスに関するよくあるご質問

オープンソースライセンスコンプライアンスとは何ですか?

使用するソフトウェアにどのオープンソースライセンスが適用されるかを把握し、表示を残す、ソースコードを共有するといった条件を満たすことです。

コピーレフトライセンスとは何ですか?

配布するものが同じ条件のままであることを条件に、ソフトウェアの使用と変更を認めるライセンスです。最もよく知られた例はGPLです。

GPLのコードを商用ソフトウェアで使えますか?

使えます。ただし、それを含むソフトウェアを配布する場合、そのソフトウェアのソースをGPLで提供しなければならない可能性があります。コードの組み合わせ方が重要になるため、個別のケースについては法的助言を受けてください。

コピーレフトはSaaSにも適用されますか?

GPLの条件は一般に配布によって発生し、SaaSは通常それを回避します。AGPLは、ネットワーク経由でソフトウェアを利用するユーザーにも条件を広げることで、そのギャップを埋めています。

商用利用に最も安全なオープンソースライセンスは何ですか?

MIT、BSD、Apache-2.0などのパーミッシブライセンスが、求める条件が最も少ないものです。それでも表示は残す必要があります。

依存関係のライセンスはどう確認すればよいですか?

推移的依存関係と宣言ライセンスを含むSBOMを生成するか、SCAツールを使います。CIでポリシーを適用し、新たな違反があればビルドが失敗するようにします。

出荷前にコピーレフトを検出する

GitHub Actionsのジョブが取り込んだすべてのパッケージの宣言ライセンスを確認し、ポリシーに応じてビルドをブロックしましょう。

デモを予約