Skip to content

ライセンス

ワークスペース全体のライセンスを管理:自分のコード用にLICENSEファイルとソースコードヘッダーを同期(license.source)し、すべての依存関係がライセンス許可リストに準拠していることを確認(license.dependencies)します。

  1. インストール Nx Console VSCode Plugin まだインストールしていない場合
  2. VSCodeでNxコンソールを開く
  3. クリック Generate (UI) "Common Nx Commands"セクションで
  4. 検索 @aws/nx-plugin - license
  5. 必須パラメータを入力
    • クリック Generate
    パラメータデフォルト説明
    license Apache-2.0 | MIT | ASLApache-2.0選択したライセンスのSPDXライセンス識別子
    copyrightHolder stringAmazon.com, Inc. or its affiliates著作権者。デフォルトでLICENSEファイルとソースファイルのヘッダーに含まれます。
    dependencyCheck booleantrue設定された許可リストの外側のライセンスを宣言する依存関係が存在する場合に失敗するlicense-checkターゲットを設定します。
    preferInstallDependencies booleantrueジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。

    ジェネレータは以下のファイルを作成または更新します:

    • nx.json lintターゲットがライセンス同期ジェネレータを実行し、license-checkターゲットに依存するよう設定
    • aws-nx-plugin.config.mts ライセンスソース同期(license.source)と依存関係チェック(license.dependencies)の設定ファイル

    ライセンスヘッダーとファイル

    Section titled “ライセンスヘッダーとファイル”

    このジェネレータは同期ジェネレータを登録し、lintターゲットの一部として実行されます。これにより、ソースファイルに正しいライセンスヘッダーが含まれること、プロジェクトにLICENSEファイルが存在すること、package.jsonpyproject.tomlにライセンスメタデータが設定されることが保証されます。

    プロジェクトをビルドする度に(lintターゲットが実行されると)、ライセンス同期ジェネレータが設定に基づいてプロジェクトのライセンス整合性を確認します。同期が必要な変更を検出すると、以下のようなメッセージが表示されます:

    Terminal window
    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. ソースファイルのライセンスヘッダー同期

    Section titled “1. ソースファイルのライセンスヘッダー同期”

    同期ジェネレータは、設定に基づきワークスペース内の全ソースコードファイルに適切なライセンスヘッダーが含まれることを保証します。ヘッダーはファイルの先頭ブロックコメントまたは連続した行コメントとして書き込まれます(shebang/hashbangが存在する場合はその後に配置)。

    同期ジェネレータは、ルートのLICENSEファイルが設定ライセンスに準拠していること、および全サブプロジェクトに正しいLICENSEファイルが存在することを保証します。

    3. プロジェクトファイルのライセンス情報同期

    Section titled “3. プロジェクトファイルのライセンス情報同期”

    同期ジェネレータは、package.jsonpyproject.tomlファイルのlicenseフィールドが設定ライセンスに設定されていることを保証します。

    設定はワークスペースルートのaws-nx-plugin.config.mtsファイルで定義します。

    ライセンスはspdx設定プロパティで随時更新可能です:

    aws-nx-plugin.config.mts
    export default {
    license: {
    source: {
    spdx: 'MIT',
    },
    },
    } satisfies AwsNxPluginConfig;

    同期ジェネレータ実行時、全LICENSEファイルとpackage.json/pyproject.tomlファイルが設定ライセンスに更新されます。

    著作権者と著作年を追加設定可能です(一部LICENSEファイルに記載):

    aws-nx-plugin.config.mts
    export default {
    license: {
    source: {
    spdx: 'MIT',
    copyrightHolder: 'Amazon.com, Inc. or its affiliates',
    copyrightYear: 2025,
    },
    },
    } satisfies AwsNxPluginConfig;

    ライセンスヘッダーの内容は2通りの方法で設定可能です:

    1. インラインコンテンツ:
    aws-nx-plugin.config.mts
    export default {
    license: {
    source: {
    header: {
    content: {
    lines: [
    'Copyright: My Company, Incorporated.',
    'Licensed under the MIT License',
    'All rights reserved',
    ];
    }
    // ... フォーマット設定
    }
    }
    }
    } satisfies AwsNxPluginConfig;
    1. ファイルからの読み込み:
    aws-nx-plugin.config.mts
    export default {
    license: {
    source: {
    header: {
    content: {
    filePath: 'license-header.txt'; // ワークスペースルートからの相対パス
    }
    // ... フォーマット設定
    }
    }
    }
    } satisfies AwsNxPluginConfig;

    ファイルタイプ別にライセンスヘッダーのフォーマットをglobパターンで指定可能です。行コメント、ブロックコメント、またはその組み合わせを設定できます:

    aws-nx-plugin.config.mts
    export default {
    license: {
    source: {
    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: ライセンスコンテンツ後に記述するテキスト(例:ブロックコメント終了)

    ネイティブサポートされないファイルタイプの場合、カスタムコメント構文を指定して既存ライセンスヘッダーを識別可能です:

    aws-nx-plugin.config.mts
    export default {
    license: {
    source: {
    header: {
    content: {
    lines: ['My license header'],
    },
    format: {
    '**/*.xyz': {
    lineStart: '## ',
    },
    },
    commentSyntax: {
    xyz: {
    line: '##', // 行コメント構文の定義
    },
    abc: {
    block: {
    // ブロックコメント構文の定義
    start: '<!--',
    end: '-->',
    },
    },
    },
    },
    },
    },
    } satisfies AwsNxPluginConfig;

    ヘッダー同期からのファイル除外

    Section titled “ヘッダー同期からのファイル除外”

    デフォルトではgitリポジトリで.gitignoreファイルが適用され、バージョン管理下のファイルのみ同期対象となります。非git環境では明示的に除外しない限り全ファイルが対象です。

    globパターンでライセンスヘッダー同期から除外するファイルを追加指定可能です:

    aws-nx-plugin.config.mts
    export default {
    license: {
    source: {
    header: {
    content: {
    lines: ['My license header'],
    },
    format: {
    '**/*.ts': {
    lineStart: '// ',
    },
    },
    exclude: ['**/generated/**', '**/dist/**', 'some-specific-file.ts'],
    },
    },
    },
    } satisfies AwsNxPluginConfig;

    ファイル同期からのプロジェクト除外

    Section titled “ファイル同期からのプロジェクト除外”

    デフォルトで全LICENSEpackage.jsonpyproject.tomlファイルが同期対象です。

    globパターンで特定プロジェクト/ファイルの同期を除外可能です:

    aws-nx-plugin.config.mts
    export default {
    license: {
    source: {
    files: {
    exclude: [
    // LICENSEファイル、package.json、pyproject.tomlの同期を除外
    'packages/excluded-project',
    // LICENSEファイルの同期を除外(package.json/pyproject.tomlは同期)
    'apps/internal/LICENSE',
    ];
    }
    }
    }
    } satisfies AwsNxPluginConfig;

    ライセンスソース同期は、設定にlicense.sourceキーが存在することで有効になります。無効化する手順:

    1. aws-nx-plugin.config.mtsからlicense.sourceセクションを削除(依存関係ライセンスチェックを継続したい場合はlicense.dependenciesは残せます)
    2. 同期ジェネレータを完全に削除したい場合は、targetDefaults.lint.syncGeneratorsから@aws/nx-plugin:license#syncジェネレータを削除

    再度有効化するにはlicenseジェネレータを再実行します。

    依存関係のライセンスチェック

    Section titled “依存関係のライセンスチェック”

    licenseジェネレータは、プロジェクトの依存関係(または推移的依存関係)が許可リストにないライセンスを宣言している場合に失敗するlicense-checkターゲットも設定します。

    ジェネレータはルートのproject.jsonlicense-checkターゲットを書き込みます:

    project.json
    {
    "targets": {
    "license-check": {
    "executor": "@aws/nx-plugin:license-check",
    "cache": true,
    "inputs": [
    "{workspaceRoot}/pnpm-lock.yaml",
    "{workspaceRoot}/aws-nx-plugin.config.mts"
    ],
    "options": {}
    }
    }
    }

    inputsはワークスペースに合わせて計算されます:実際に存在するロックファイルのみが含まれ、aws-nx-plugin.config.mtsと、Python依存関係チェックが有効な場合(つまりPythonコレクターが設定されている場合)は{workspaceRoot}/**/uv.lockグロブが追加されます。

    チェックを直接実行できます:

    Terminal window
    pnpm nx license-check

    結果はロックファイルとaws-nx-plugin.config.mtsに対してキャッシュされます — 変更がない場合、再実行は即座に完了します。

    コレクターがスキャン対象を決定します。npmCollectorlicense-checker-rseidelsohnを使用し、pythonCollectorpip-licensesを使用します。インストールされた依存関係が見つからない場合、チェックは検査対象なしで成功します。

    依存関係ライセンスチェックは、ワークスペース内の任意のプロジェクトをlintまたはbuildする際に自動的に実行されます。licenseジェネレータは各プロジェクトのlintターゲットがルートのlicense-checkターゲットに依存するよう配線し、プロジェクトジェネレータ(ts#*py#*)も実行時に同様の配線を行います — そのため、ジェネレータの実行順序に関係なくチェックが配線されます。

    つまり、チェックを明示的に実行する必要はありませんが、license-checkターゲットで実行することもできます:

    Terminal window
    pnpm nx license-check

    配線は各プロジェクトのlintターゲット上のクロスプロジェクトdependsOnで、ルートのlicense-checkターゲットを指します。lintまたはbuild中にチェックをスキップするには、LICENSE_DEPENDENCY_CHECK=skip環境変数を設定します:

    Terminal window
    pnpm LICENSE_DEPENDENCY_CHECK=skip lint

    デフォルトでは、チェックは一般的な寛容なライセンス(MIT、Apache-2.0、BSD、ISCなど)の組み込みセットを使用します。これはDEFAULT_LICENSE_ALLOWLISTとしてエクスポートされています。設定で拡張または上書きできます:

    aws-nx-plugin.config.mts
    import { AwsNxPluginConfig } from '@aws/nx-plugin';
    import { DEFAULT_LICENSE_ALLOWLIST } from '@aws/nx-plugin/sdk/license';
    export default {
    license: {
    // ...
    dependencies: {
    allow: [...DEFAULT_LICENSE_ALLOWLIST, { spdxId: 'LGPL-2.1-or-later', fullName: 'GNU Lesser General Public License v2.1 or later', aliases: [] }],
    exceptions: [
    { package: 'some-package', reason: 'Audited manually — ships MIT text without SPDX field' },
    ],
    },
    },
    } satisfies AwsNxPluginConfig;
    View the full list of licenses in DEFAULT_LICENSE_ALLOWLIST

    許可リストを制限するには、DEFAULT_LICENSE_ALLOWLISTを独自の配列に置き換えます。拡張するには、デフォルトをスプレッドしてエントリを追加します。エントリはSPDX ID、完全なライセンス名、またはリストされたエイリアスのいずれかで照合されます(大文字小文字を区別しません)。

    チェックに失敗するパッケージにはexceptionsを使用します — ライセンスが許可リストにない場合、または検出可能なライセンスメタデータなしで提供される場合です。reasonフィールドは必須で、レビュアーが例外が付与された理由を確認できるようにします。

    exceptions: [
    {
    package: 'union',
    version: '0.5.0',
    reason: 'Package ships verbatim MIT text without declaring license',
    },
    ];

    問題のあるメタデータを持つ依存関係を導入するジェネレータ(例:MCPサーバージェネレータ)は、実行時に必要な例外を自動的に設定に追加します。

    コレクターは依存関係を検出し、ライセンスメタデータを抽出します。組み込みコレクターはnpmCollector()node_modulesをスキャン)とpythonCollector()(Python仮想環境をスキャン)です。ライセンスジェネレータはデフォルトでnpmCollector()を設定し、Pythonプロジェクトが存在する場合はpythonCollector()を追加します。

    カスタムコレクターを実装するには、LicenseCollectorインターフェースに準拠します:

    import type { LicenseCollector } from '@aws/nx-plugin/sdk/license';
    const myCollector = (): LicenseCollector => ({
    name: 'my-ecosystem',
    traceCommand: 'my-tool why <package>',
    async collect({ workspaceRoot }) {
    return [
    { name: 'some-dep', version: '1.0.0', rawLicense: 'MIT', ecosystem: 'my-ecosystem' },
    ];
    },
    });

    license.dependenciesは、オプションのonDependencyコールバックを受け入れます。これは、チェックに合格するか失敗するかに関係なく、発見されたすべての依存関係に対して一度呼び出されます。{ package, spdx }を受け取り、packageはパッケージ名、spdxは解決されたSPDXライセンス式です。例外のspdxは生の宣言ライセンスよりも優先され、ライセンスが宣言されていない場合はspdxが空文字列になることがあります。

    これは、プロジェクト全体のすべてのライセンスを出力する便利な方法です。license-checkターゲットを実行して出力を確認します:

    aws-nx-plugin.config.mts
    import { AwsNxPluginConfig } from '@aws/nx-plugin';
    import { DEFAULT_LICENSE_ALLOWLIST } from '@aws/nx-plugin/sdk/license';
    export default {
    license: {
    dependencies: {
    allow: DEFAULT_LICENSE_ALLOWLIST,
    onDependency: ({ package: pkg, spdx }) => {
    console.log(`${pkg} - ${spdx}`);
    },
    },
    },
    } satisfies AwsNxPluginConfig;

    依存関係ライセンスチェックは、設定にlicense.dependenciesキーが存在することで有効になります。

    単一実行でチェックを無効にするには、LICENSE_DEPENDENCY_CHECK=skip環境変数を設定します:

    Terminal window
    pnpm LICENSE_DEPENDENCY_CHECK=skip lint

    恒久的に無効にするには、aws-nx-plugin.config.mtsの設定からlicense.dependenciesキーを削除します。また、--dependencyCheck=falselicenseジェネレータを再実行して、それなしでスキャフォールドすることもできます。