Skip to content

ワークスペース

@aws/nx-pluginで新しいワークスペースを作成すると、プリセットジェネレーターがAWS上での構築に適した合理的なデフォルト設定でNx monorepoをセットアップします。

Terminal window
pnpm 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にフォールバックします)。
  • 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ウェブサイトで確認できます。

Nxモノレポは1つ以上のプロジェクトで構成され、それぞれにproject.jsonファイルがあります。project.jsonは、プロジェクトのタスク(_ターゲット_と呼ばれます)を定義し、プロジェクトのビルド方法、ローカル実行方法、テスト方法などを指定します。また、プロジェクト内またはプロジェクト間のターゲット間の依存関係も定義します。

例えば、project.jsonは、すべての上流プロジェクトが最初にビルドされることに依存するbuildターゲットを定義する場合があります:

packages/my-project/project.json
{
"name": "@my-workspace/my-project",
"targets": {
"build": {
"executor": "@nx/js:tsc",
"dependsOn": ["^build"]
},
"test": {
"command": "vitest run"
}
}
}

TypeScriptおよびPythonプロジェクトのセットアップ方法の詳細については、ts#projectおよびpy#projectジェネレーターガイドを参照してください。

Nxは、以前に実行されたターゲットの出力をキャッシュし、入力が変更されていない場合はそれらを再生します。これにより、特にCIにおいて、ビルド、テスト、リントが劇的に高速化されます。古い動作や予期しない動作が発生した場合は、次のコマンドでキャッシュをリセットしてください:

Terminal window
pnpm nx reset

詳細については、Nxキャッシングドキュメントを参照してください。

デフォルトのモノレポセットアップは、NodeおよびPythonベースのプロジェクトの両方に対してシングルバージョンポリシーを使用します。

これは、モノレポ内のすべてのプロジェクトがデフォルトで同じバージョンの依存関係を使用することを意味し、同じモノレポ内のパッケージがバージョンの不一致の問題に遭遇することを減らします。

Nodeの観点からは、これはルートに単一のロックファイルがあり、すべての依存関係を含む単一のnode_modulesがあることを意味します。新しい依存関係を追加する必要がある場合は、ルートのpackage.jsonに追加してください。

Pythonの観点からは、これはモノレポのルートに単一の.venvがあり、すべての依存関係がそこにインストールされることを意味します。各Pythonプロジェクトには独自のpyproject.tomlがありますが、それらの依存関係のバージョンはUVワークスペースによって管理され、その後ルートのuv.lockファイルに書き出されます。

ワークスペース内のすべてのプロジェクトをビルド:

Terminal window
pnpm build

すべてのプロジェクトをLintして自動修正:

Terminal window
pnpm lint

すべてのプロジェクトでテストを実行:

Terminal window
pnpm test

ウェブサイトがある場合、それと接続されたすべてのコンポーネントをローカルで起動:

Terminal window
pnpm dev

同期ジェネレーターを実行します。これは例えばTypeScriptプロジェクト参照を同期します(詳細についてはts#projectジェネレーターガイドを参照してください):

Terminal window
pnpm nx sync

特定のプロジェクトの特定のターゲットを実行するには:

Terminal window
pnpm nx <target> <project>

例えば:

Terminal window
pnpm nx build website

これにより、選択したターゲットと、それが依存するターゲットが実行されます。

新しいワークスペースは、静的解析用のESLintとコードフォーマット用のPrettierで設定されています。lintを実行すると、両方がすべてのプロジェクトに適用されます。

新しいワークスペースには、各コミット前にステージングされたファイルをAWSクレデンシャルパターンでスキャンするgit-secretsプリコミットフックが含まれています。これにより、アクセスキー、シークレットキー、その他の機密情報を誤ってコミットすることを防ぎます。

git-secretsのパターンはegrep互換の正規表現を使用します。git-secretsが実際のクレデンシャルを含まないコミットをブロックした場合:

Terminal window
# 特定の正規表現パターンを許可
git secrets --add --allowed 'my-regex-pattern'
# リテラル文字列を許可(特殊文字はエスケープされます)
git secrets --add --allowed --literal 'my-literal+string'

リポジトリルートに.gitallowedファイルを作成し、1行に1つのegrep互換の正規表現を記述することもできます(バージョン管理を通じてチームと共有):

.gitallowed
# Allow test fixtures
tests/fixtures/.*
# Allow a specific string
EXAMPLE[A-Z]{16}

パターン管理の詳細については、git-secretsドキュメントを参照してください。

ワークスペースには、ルートにaws-nx-plugin.config.mtsファイルが付属しています。ジェネレーターはこのファイルを読み取って適切なデフォルト値を選択するため、毎回同じフラグを渡す必要がありません。特に便利な2つの設定があります:

// aws-nx-plugin.config.mts
import { AwsNxPluginConfig } from '@aws/nx-plugin';
export default {
iac: {
provider: 'CDK', // or 'Terraform'
},
containers: {
engine: 'docker', // or 'finch'
},
} satisfies AwsNxPluginConfig;
  • iac.provider — インフラストラクチャを生成するジェネレーター(例:ts#infrats#trpc-apipy#fast-api)で使用されるデフォルトのInfrastructure as Codeプロバイダー(CDKまたはTerraform)。--iacProviderフラグを受け入れるジェネレーターは、デフォルトでInheritに設定されており、この値を読み取ります。
  • containers.engine — 生成されたビルド/プッシュ/ログインコマンドに組み込まれるコンテナCLI(dockerまたはfinch)。CDKイメージアセットのビルドも、CDK_DOCKER環境変数を介してこれを取得します。詳細については、Dockerバンドリングガイドを参照してください。

いずれの設定もいつでも編集できます — 以降のジェネレーター実行で新しい値が適用されます。