Skip to content

ライセンス

ワークスペース内のLICENSEファイルとソースコードヘッダーを自動的に管理します。

このジェネレータは同期ジェネレータを登録し、lintターゲットの一部として実行されます。これにより、ソースファイルが指定されたライセンスの内容と形式に準拠していることを保証し、プロジェクトのLICENSEファイルが正しいことを確認するとともに、関連するプロジェクトファイル(package.jsonpyproject.toml)にライセンス情報が含まれるようにします。

使い方

ジェネレータの実行

  1. インストール Nx Console VSCode Plugin まだインストールしていない場合
  2. VSCodeでNxコンソールを開く
  3. クリック Generate (UI) "Common Nx Commands"セクションで
  4. 検索 @aws/nx-plugin - license
  5. 必須パラメータを入力
    • クリック Generate

    オプション

    パラメータ デフォルト 説明
    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ターゲットが実行されると)、ライセンス同期ジェネレータが設定に基づいてプロジェクトのライセンスをチェックします。ライセンス同期動作で説明するように、同期が必要な変更を検出すると次のようなメッセージが表示されます:

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

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

    ファイルタイプごとの対象ファイルやヘッダー内容・形式は設定で変更可能です。詳細は設定セクションを参照してください。

    2. LICENSEファイルの同期

    同期ジェネレータは、ルートのLICENSEファイルが設定されたライセンスに一致することを保証し、ワークスペース内のすべてのサブプロジェクトにも正しいLICENSEファイルが存在するようにします。

    プロジェクトの除外設定が可能です。詳細は設定セクションを参照してください。

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

    同期ジェネレータは、package.jsonpyproject.tomlファイルのlicenseフィールドが設定されたライセンスに一致するようにします。

    プロジェクトの除外設定が可能です。詳細は設定セクションを参照してください。

    設定

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

    SPDXと著作権者

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

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

    同期ジェネレータ実行時、すべてのLICENSEファイル、package.jsonpyproject.tomlファイルが設定されたライセンスに更新されます。

    著作権者と著作権年も追加設定可能です:

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

    ライセンスヘッダー

    内容

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

    1. インラインコンテンツ:
    aws-nx-plugin.config.mts
    export default {
    license: {
    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: {
    header: {
    content: {
    filePath: 'license-header.txt'; // ワークスペースルートからの相対パス
    }
    // ... フォーマット設定
    }
    }
    } satisfies AwsNxPluginConfig;

    フォーマット

    ファイルタイプごとにグロブパターンでライセンスヘッダーのフォーマットを指定可能です:

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

    カスタムコメント構文

    ネイティブでサポートされていないファイルタイプ向けに、カスタムコメント構文を定義可能です:

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

    ファイルの除外

    デフォルトでgitリポジトリの場合、バージョン管理対象外のファイルを同期しないよう.gitignoreが適用されます。git以外のリポジトリでは、明示的に除外しない限りすべてのファイルが対象になります。

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

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

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

    デフォルトですべてのLICENSEpackage.jsonpyproject.tomlファイルが同期対象となります。

    グロブパターンで特定のプロジェクトやファイルを同期から除外可能です:

    aws-nx-plugin.config.mts
    export default {
    license: {
    files: {
    exclude: [
    // LICENSEファイル、package.json、pyproject.tomlを同期しない
    'packages/excluded-project',
    // LICENSEファイルは同期しないが、package.json/pyproject.tomlは同期する
    'apps/internal/LICENSE',
    ];
    }
    }
    } satisfies AwsNxPluginConfig;

    ライセンス同期の無効化

    ライセンス同期を無効化するには:

    1. aws-nx-plugin.config.mtsからlicenseセクションを削除(またはファイル自体を削除)
    2. targetDefaults.lint.syncGeneratorsから@aws/nx-plugin:license#syncジェネレータを削除

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