SPDX とは
SPDX(Software Package Data Exchange)は Linux Foundation 傘下のプロジェクトで、ソフトウェアの構成要素とライセンス情報を機械が読める形で表現するための標準です。2021年に国際標準 ISO/IEC 5962:2021 になりました。その中で最も広く使われているのが SPDX ライセンスリストの短い識別子です。「MIT License」「The MIT license」「MIT ライセンス」のようにばらばらな名前の代わりに、MIT の一つで書こうという約束です。
ファイルヘッダーの2行
ソースファイルの先頭に次の2行をコメントとして入れれば、人もツールもそのファイルの著作権者とライセンスをすぐに把握できます。
// SPDX-FileCopyrightText: 2026 Jane Doe <jane@example.com>
// SPDX-License-Identifier: MIT
SPDX-License-Identifierには、ライセンス識別子または式(MIT OR Apache-2.0)を書きます。SPDX-FileCopyrightTextは著作権表示です。複数人であれば行を複数書きます。- 長いライセンス告知文の代わりにこの一行だけを置く方式を、Linux カーネルが2017年から導入し、数千行に及ぶ重複した定型文を減らしました。
生成ツールのファイルヘッダータブは、この2行を7種類のコメント形式で作成します。
廃止された識別子に注意
SPDX ライセンスリスト 3.0(2017年12月)から、GNU ライセンスのバージョン条項を識別子に明示するように変わりました。
| 廃止された識別子 | 現在の識別子 |
|---|---|
GPL-2.0 | GPL-2.0-only |
GPL-2.0+ | GPL-2.0-or-later |
GPL-3.0 | GPL-3.0-only |
LGPL-2.1 | LGPL-2.1-only |
AGPL-3.0 | AGPL-3.0-only |
単に GPL-3.0 と書くと、「only」なのか「or later」なのかがわからないからです。2つの方式の違いは only vs or-later にまとめました。
パッケージのメタデータ
ほとんどのパッケージマネージャーは SPDX 識別子や式を受け付けます。
| エコシステム | ファイル | 例 |
|---|---|---|
| npm | package.json | "license": "MIT" · 非公開は "UNLICENSED" |
| Rust | Cargo.toml | license = "MIT OR Apache-2.0" |
| Python | pyproject.toml | license = "Apache-2.0" (PEP 639) |
| Maven | pom.xml | <licenses> の中に名前と URL |
npm の UNLICENSED は「Unlicense」とはまったく違う意味で、利用を許可しない非公開パッケージであることを示します。つづりが似ているため、間違いがよく起こります。
REUSE: リポジトリ全体を機械が読めるように
欧州自由ソフトウェア財団(FSFE)の REUSE 仕様は、SPDX ヘッダーをリポジトリ全体に一貫して適用する方法を定めています。
- すべてのライセンス原文を
LICENSES/フォルダーにSPDX識別子.txtという名前で置きます(例:LICENSES/MIT.txt)。 - 各ファイルに
SPDX-FileCopyrightTextとSPDX-License-Identifierを入れます。 - コメントを入れられないファイル(画像、JSON など)は、
ファイル名.licenseという隣接ファイルか、リポジトリのルートのREUSE.tomlに情報を書きます。 reuse lintツールで漏れたファイルがないか検査します。
実務のヒント
- 識別子は大文字・小文字を区別し、一覧にあるとおりに書きます(
apache2ではなくApache-2.0)。 - 一覧にない独自のライセンスは
LicenseRef-という接頭辞で書きます(例:LicenseRef-Proprietary)。 - 識別子だけで原文がなければ、表示義務を果たしたとは言いにくいです。原文のファイルは別途置きます。
この記事は一般的な情報であり、法的助言ではありません。重要な決定は専門家にご相談ください。
参考資料
- SPDX License List — https://spdx.org/licenses/
- SPDX Specification, Annex: Using SPDX short identifiers in source files — https://spdx.github.io/spdx-spec/v2.3/using-SPDX-short-identifiers-in-source-files/
- REUSE Specification — https://reuse.software/spec/
- npm Docs, package.json license — https://docs.npmjs.com/cli/configuring-npm/package-json#license
- PEP 639 — https://peps.python.org/pep-0639/