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.json/pyproject.tomlファイルが設定ライセンスに更新されます。

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

    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;

    フォーマット

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

    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環境では明示的に除外しない限り全ファイルが対象です。

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

    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ファイルが同期対象です。

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

    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ジェネレータを再実行します。