ライセンス
ワークスペース内のLICENSE
ファイルとソースコードヘッダーを自動的に管理します。
このジェネレータは同期ジェネレータを登録し、lint
ターゲットの一部として実行されます。これにより、ソースファイルが所定のライセンス内容と形式に準拠していること、プロジェクトのLICENSE
ファイルが正しいこと、関連プロジェクトファイル(package.json
、pyproject.toml
)にライセンス情報が含まれていることが保証されます。
使用方法
ジェネレータの実行
- インストール Nx Console VSCode Plugin まだインストールしていない場合
- VSCodeでNxコンソールを開く
- クリック
Generate (UI)
"Common Nx Commands"セクションで - 検索
@aws/nx-plugin - license
- 必須パラメータを入力
- クリック
Generate
pnpm nx g @aws/nx-plugin:license
yarn nx g @aws/nx-plugin:license
npx nx g @aws/nx-plugin:license
bunx nx g @aws/nx-plugin:license
オプション
パラメータ | 型 | デフォルト | 説明 |
---|---|---|---|
license | string | Apache-2.0 | SPDX License Identifier for your chosen license |
copyrightHolder | string | Amazon.com, Inc. or its affiliates | The copyright holder, included in the LICENSE file and source file headers by default. |
ジェネレータの出力
ジェネレータは以下のファイルを作成または更新します:
- nx.json lintターゲットがライセンス同期ジェネレータを実行するよう設定
- aws-nx-plugin.config.mts ライセンス同期ジェネレータの設定ファイル
ライセンスヘッダーの内容と形式に関するデフォルト設定がaws-nx-plugin.config.mts
に追加され、複数のファイルタイプに適切なヘッダーが書き込まれます。必要に応じて設定セクションでカスタマイズ可能です。
ワークフロー
プロジェクトをビルドする度に(lint
ターゲットが実行されると)、ライセンス同期ジェネレータが設定に基づいてプロジェクトのライセンス整合性を確認します。同期が必要な変更を検出すると、以下のようなメッセージが表示されます:
NX ワークスペースが同期されていません
[@aws/nx-plugin:license#sync]: プロジェクトLICENSEファイルが同期されていません:- LICENSE- packages/<my-project>LICENSE
プロジェクトpackage.jsonファイルが同期されていません:- package.json
プロジェクトpyproject.tomlファイルが同期されていません:- pyproject.toml- packages/<my-python-project>/pyproject.toml
以下のソースファイルのライセンスヘッダーが同期されていません:- packages/<my-project>/src/index.ts- packages/<my-python-project>/main.py
CI環境ではエラーが発生します。
? 同期が必要な変更を適用してワークスペースを最新状態にしますか?はい、変更を同期してタスクを実行いいえ、同期せずにタスクを実行
はい
を選択して変更を同期します。
ライセンス同期の動作
ライセンス同期ジェネレータは3つの主要タスクを実行します:
1. ソースファイルのライセンスヘッダー同期
同期ジェネレータは、設定に基づきワークスペース内の全ソースコードファイルに適切なライセンスヘッダーが含まれることを保証します。ヘッダーはファイルの先頭ブロックコメントまたは連続した行コメントとして書き込まれます(shebang/hashbangが存在する場合はその後に配置)。
設定ファイルで対象ファイルの包含/除外ルールや、ファイルタイプ別のヘッダー内容/形式を随時更新可能です。詳細は設定セクションを参照してください。
2. LICENSEファイルの同期
同期ジェネレータは、ルートのLICENSE
ファイルが設定ライセンスに準拠していること、および全サブプロジェクトに正しいLICENSE
ファイルが存在することを保証します。
必要に応じて設定でプロジェクトを除外可能です。詳細は設定セクションを参照してください。
3. プロジェクトファイルのライセンス情報同期
同期ジェネレータは、package.json
とpyproject.toml
ファイルのlicense
フィールドが設定ライセンスに設定されていることを保証します。
必要に応じて設定でプロジェクトを除外可能です。詳細は設定セクションを参照してください。
設定
設定はワークスペースルートのaws-nx-plugin.config.mts
ファイルで定義します。
SPDXと著作権者
ライセンスはspdx
設定プロパティで随時更新可能です:
export default { license: { spdx: 'MIT', },} satisfies AwsNxPluginConfig;
同期ジェネレータ実行時、全LICENSE
ファイルとpackage.json
/pyproject.toml
ファイルが設定ライセンスに更新されます。
著作権者と著作年を追加設定可能です(一部LICENSEファイルに記載):
export default { license: { spdx: 'MIT', copyrightHolder: 'Amazon.com, Inc. or its affiliates', copyrightYear: 2025, },} satisfies AwsNxPluginConfig;
ライセンスヘッダー
内容
ライセンスヘッダーの内容は2通りの方法で設定可能です:
- インラインコンテンツ:
export default { license: { header: { content: { lines: [ 'Copyright: My Company, Incorporated.', 'Licensed under the MIT License', 'All rights reserved', ]; } // ... フォーマット設定 } }} satisfies AwsNxPluginConfig;
- ファイルからの読み込み:
export default { license: { header: { content: { filePath: 'license-header.txt'; // ワークスペースルートからの相対パス } // ... フォーマット設定 } }} satisfies AwsNxPluginConfig;
フォーマット
ファイルタイプ別にライセンスヘッダーのフォーマットをglobパターンで指定可能です。行コメント、ブロックコメント、またはその組み合わせを設定できます:
export default { license: { header: { content: { lines: ['Copyright notice here'], }, format: { // 行コメント '**/*.ts': { lineStart: '// ', }, // ブロックコメント '**/*.css': { blockStart: '/*', blockEnd: '*/', }, // 行プレフィックス付きブロックコメント '**/*.java': { blockStart: '/*', lineStart: ' * ', blockEnd: ' */', }, // ヘッダー/フッター付き行コメント '**/*.py': { blockStart: '# ------------', lineStart: '# ', blockEnd: '# ------------', }, }, }, },} satisfies AwsNxPluginConfig;
フォーマット設定でサポートするプロパティ:
blockStart
: ライセンスコンテンツ前に記述するテキスト(例:ブロックコメント開始)lineStart
: ライセンス各行の先頭に付加するテキストlineEnd
: ライセンス各行の末尾に付加するテキストblockEnd
: ライセンスコンテンツ後に記述するテキスト(例:ブロックコメント終了)
カスタムコメント構文
ネイティブサポートされないファイルタイプの場合、カスタムコメント構文を指定して既存ライセンスヘッダーを識別可能です:
export default { license: { header: { content: { lines: ['My license header'], }, format: { '**/*.xyz': { lineStart: '## ', }, }, commentSyntax: { xyz: { line: '##', // 行コメント構文の定義 }, abc: { block: { // ブロックコメント構文の定義 start: '<!--', end: '-->', }, }, }, }, },} satisfies AwsNxPluginConfig;
ファイルの除外
デフォルトではgitリポジトリで.gitignore
ファイルが適用され、バージョン管理下のファイルのみ同期対象となります。非git環境では明示的に除外しない限り全ファイルが対象です。
globパターンでライセンスヘッダー同期から除外するファイルを追加指定可能です:
export default { license: { header: { content: { lines: ['My license header'], }, format: { '**/*.ts': { lineStart: '// ', }, }, exclude: ['**/generated/**', '**/dist/**', 'some-specific-file.ts'], }, },} satisfies AwsNxPluginConfig;
プロジェクトファイルの同期除外
デフォルトで全LICENSE
、package.json
、pyproject.toml
ファイルが同期対象です。
globパターンで特定プロジェクト/ファイルの同期を除外可能です:
export default { license: { files: { exclude: [ // LICENSEファイル、package.json、pyproject.tomlの同期を除外 'packages/excluded-project', // LICENSEファイルの同期を除外(package.json/pyproject.tomlは同期) 'apps/internal/LICENSE', ]; } }} satisfies AwsNxPluginConfig;
ライセンス同期の無効化
ライセンス同期を無効化する手順:
aws-nx-plugin.config.mts
からlicense
セクションを削除(またはファイル自体を削除)targetDefaults.lint.syncGenerators
から@aws/nx-plugin:license#sync
ジェネレータを削除
再度有効化するにはlicense
ジェネレータを再実行します。