ワークスペース
@aws/nx-pluginで新しいワークスペースを作成すると、プリセットジェネレーターがAWS上での構築に適した合理的なデフォルト設定でNx monorepoをセットアップします。
ワークスペースの作成
Section titled “ワークスペースの作成”pnpm create @aws/nx-workspace my-projectyarn create @aws/nx-workspace my-projectnpm create @aws/nx-workspace -- my-projectbun create @aws/nx-workspace my-project| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
| addTsPlugin | boolean | true | tsプラグインを追加するかどうか。 |
| iacProvider | string | CDK | 優先するIaCプロバイダー。 |
| gitSecrets | boolean | true | AWSの認証情報のコミットを防ぐためにgit-secretsを設定するかどうか。 |
| containerEngine | string | infer | ビルド/プッシュ/ログインに使用するコンテナエンジン。'infer'はdockerがインストールされている場合はdockerを選択し、それ以外の場合はfinchを選択します(どちらもインストールされていない場合はdockerにフォールバックします)。 |
ワークスペース構造
Section titled “ワークスペース構造”Directorypackages/ プロジェクトはここに配置されます
- …
- package.json モノレポのルートpackage.json
- nx.json Nx設定(共通ターゲット、同期ジェネレーター、キャッシング)
- tsconfig.base.json ルートTypeScript設定
- aws-nx-plugin.config.mts Nx Plugin for AWS設定
Directory.git-secrets/ クレデンシャルスキャン用のベンダー化されたgit-secrets bashスクリプト
- …
Directory.husky/ Gitフック
- …
Nxは、モノレポ向けの言語に依存しないビルドシステムで、任意のプログラミング言語で書かれたプロジェクト間の依存関係と、それらをビルドするためのタスクを管理します。詳細はNxウェブサイトで確認できます。
プロジェクト
Section titled “プロジェクト”Nxモノレポは1つ以上のプロジェクトで構成され、それぞれにproject.jsonファイルがあります。project.jsonは、プロジェクトのタスク(_ターゲット_と呼ばれます)を定義し、プロジェクトのビルド方法、ローカル実行方法、テスト方法などを指定します。また、プロジェクト内またはプロジェクト間のターゲット間の依存関係も定義します。
例えば、project.jsonは、すべての上流プロジェクトが最初にビルドされることに依存するbuildターゲットを定義する場合があります:
{ "name": "@my-workspace/my-project", "targets": { "build": { "executor": "@nx/js:tsc", "dependsOn": ["^build"] }, "test": { "command": "vitest run" } }}TypeScriptおよびPythonプロジェクトのセットアップ方法の詳細については、ts#projectおよびpy#projectジェネレーターガイドを参照してください。
キャッシング
Section titled “キャッシング”Nxは、以前に実行されたターゲットの出力をキャッシュし、入力が変更されていない場合はそれらを再生します。これにより、特にCIにおいて、ビルド、テスト、リントが劇的に高速化されます。古い動作や予期しない動作が発生した場合は、次のコマンドでキャッシュをリセットしてください:
pnpm nx resetyarn nx resetnpx nx resetbunx nx reset詳細については、Nxキャッシングドキュメントを参照してください。
シングルバージョンポリシー
Section titled “シングルバージョンポリシー”デフォルトのモノレポセットアップは、NodeおよびPythonベースのプロジェクトの両方に対してシングルバージョンポリシーを使用します。
これは、モノレポ内のすべてのプロジェクトがデフォルトで同じバージョンの依存関係を使用することを意味し、同じモノレポ内のパッケージがバージョンの不一致の問題に遭遇することを減らします。
Nodeの観点からは、これはルートに単一のロックファイルがあり、すべての依存関係を含む単一のnode_modulesがあることを意味します。新しい依存関係を追加する必要がある場合は、ルートのpackage.jsonに追加してください。
Pythonの観点からは、これはモノレポのルートに単一の.venvがあり、すべての依存関係がそこにインストールされることを意味します。各Pythonプロジェクトには独自のpyproject.tomlがありますが、それらの依存関係のバージョンはUVワークスペースによって管理され、その後ルートのuv.lockファイルに書き出されます。
一般的なコマンド
Section titled “一般的なコマンド”ワークスペース内のすべてのプロジェクトをビルド:
pnpm buildyarn buildnpm run buildbun buildすべてのプロジェクトをLintして自動修正:
pnpm lintyarn lintnpm run lintbun lintすべてのプロジェクトでテストを実行:
pnpm testyarn testnpm run testbun testウェブサイトがある場合、それと接続されたすべてのコンポーネントをローカルで起動:
pnpm devyarn devnpm run devbun dev同期ジェネレーターを実行します。これは例えばTypeScriptプロジェクト参照を同期します(詳細についてはts#projectジェネレーターガイドを参照してください):
pnpm nx syncyarn nx syncnpx nx syncbunx nx sync特定のターゲットの実行
Section titled “特定のターゲットの実行”特定のプロジェクトの特定のターゲットを実行するには:
pnpm nx <target> <project>yarn nx <target> <project>npx nx <target> <project>bunx nx <target> <project>例えば:
pnpm nx build websiteyarn nx build websitenpx nx build websitebunx nx build websiteこれにより、選択したターゲットと、それが依存するターゲットが実行されます。
含まれるもの
Section titled “含まれるもの”Linting
Section titled “Linting”新しいワークスペースは、静的解析用のESLintとコードフォーマット用のPrettierで設定されています。lintを実行すると、両方がすべてのプロジェクトに適用されます。
Git Secrets
Section titled “Git Secrets”新しいワークスペースには、各コミット前にステージングされたファイルをAWSクレデンシャルパターンでスキャンするgit-secretsプリコミットフックが含まれています。これにより、アクセスキー、シークレットキー、その他の機密情報を誤ってコミットすることを防ぎます。
誤検知の抑制
Section titled “誤検知の抑制”git-secretsのパターンはegrep互換の正規表現を使用します。git-secretsが実際のクレデンシャルを含まないコミットをブロックした場合:
# 特定の正規表現パターンを許可git secrets --add --allowed 'my-regex-pattern'
# リテラル文字列を許可(特殊文字はエスケープされます)git secrets --add --allowed --literal 'my-literal+string'リポジトリルートに.gitallowedファイルを作成し、1行に1つのegrep互換の正規表現を記述することもできます(バージョン管理を通じてチームと共有):
# Allow test fixturestests/fixtures/.*# Allow a specific stringEXAMPLE[A-Z]{16}パターン管理の詳細については、git-secretsドキュメントを参照してください。
Nx Plugin for AWS設定
Section titled “Nx Plugin for AWS設定”ワークスペースには、ルートにaws-nx-plugin.config.mtsファイルが付属しています。ジェネレーターはこのファイルを読み取って適切なデフォルト値を選択するため、毎回同じフラグを渡す必要がありません。特に便利な2つの設定があります:
// aws-nx-plugin.config.mtsimport { AwsNxPluginConfig } from '@aws/nx-plugin';
export default { iac: { provider: 'CDK', // or 'Terraform' }, containers: { engine: 'docker', // or 'finch' },} satisfies AwsNxPluginConfig;iac.provider— インフラストラクチャを生成するジェネレーター(例:ts#infra、ts#trpc-api、py#fast-api)で使用されるデフォルトのInfrastructure as Codeプロバイダー(CDKまたはTerraform)。--iacProviderフラグを受け入れるジェネレーターは、デフォルトでInheritに設定されており、この値を読み取ります。containers.engine— 生成されたビルド/プッシュ/ログインコマンドに組み込まれるコンテナCLI(dockerまたはfinch)。CDKイメージアセットのビルドも、CDK_DOCKER環境変数を介してこれを取得します。詳細については、Dockerバンドリングガイドを参照してください。
いずれの設定もいつでも編集できます — 以降のジェネレーター実行で新しい値が適用されます。