Skip to content

モノレポのセットアップ

新しいモノレポを作成するには、任意のディレクトリ内で次のコマンドを実行してください:

Terminal window
npx create-nx-workspace@21.6.5 dungeon-adventure --pm=pnpm --preset=@aws/nx-plugin --iacProvider=CDK --ci=skip --aiAgents

これによりdungeon-adventureディレクトリ内にNXモノレポがセットアップされます。VSCodeでディレクトリを開くと、次のファイル構造が表示されます:

  • Directory.nx/
  • Directory.vscode/
  • Directorynode_modules/
  • Directorypackages/ サブプロジェクトが配置される場所
  • .gitignore
  • .npmrc
  • .prettierignore
  • .prettierrc
  • nx.json Nx CLIとモノレポのデフォルト設定
  • package.json 全Node依存関係の定義
  • pnpm-lock.yaml または bun.lock, yarn.lock, package-lock.json(パッケージマネージャー依存)
  • pnpm-workspace.yaml(pnpm使用時)
  • README.md
  • tsconfig.base.json 全Nodeベースサブプロジェクトが継承
  • tsconfig.json
  • aws-nx-plugin.config.mts Nx Plugin for AWSの設定

これで@aws/nx-pluginを使用して様々なサブプロジェクトを作成できるようになりました。

まず、Game APIを作成します。これを行うには、次の手順でGameApiというtRPC APIを作成します:

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

ファイルツリーに新しいファイルが表示されます。

詳細を確認するにはここをクリック

タスク3: ストーリーエージェントを作成する

Section titled “タスク3: ストーリーエージェントを作成する”

次にストーリーエージェントを作成しましょう。

ストーリーエージェント: Pythonプロジェクト

Section titled “ストーリーエージェント: Pythonプロジェクト”

Pythonプロジェクトを作成するには:

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

ファイルツリーに新しいファイルが表示されます。

詳細を確認するにはここをクリック

ストーリーエージェント: Strandsエージェント

Section titled “ストーリーエージェント: Strandsエージェント”

py#strands-agentジェネレーターを使用してプロジェクトにStrandsエージェントを追加するには:

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

ファイルツリーに新しいファイルが表示されます。

詳細を確認するにはここをクリック

タスク4: インベントリツールをセットアップする

Section titled “タスク4: インベントリツールをセットアップする”

インベントリ: TypeScriptプロジェクト

Section titled “インベントリ: TypeScriptプロジェクト”

ストーリーエージェントがプレイヤーのインベントリを管理するためのツールを提供するMCPサーバーを作成しましょう。

まず、TypeScriptプロジェクトを作成します:

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

これにより、空のTypeScriptプロジェクトが作成されます。

詳細を確認するにはここをクリック

次に、TypeScriptプロジェクトにMCPサーバーを追加します:

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

これによりMCPサーバーが追加されます。

詳細を確認するにはここをクリック

タスク5: ユーザーインターフェース(UI)を作成する

Section titled “タスク5: ユーザーインターフェース(UI)を作成する”

このタスクでは、ゲームとやり取りできるUIを作成します。

UIを作成するには、次の手順でGameUIというウェブサイトを作成します:

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

ファイルツリーに新しいファイルが表示されます。

詳細を確認するにはここをクリック

次の手順を使用して、Amazon Cognito経由の認証アクセスを要求するようにGame UIを設定しましょう:

  1. インストール Nx Console VSCode Plugin まだインストールしていない場合
  2. VSCodeでNxコンソールを開く
  3. クリック Generate (UI) "Common Nx Commands"セクションで
  4. 検索 @aws/nx-plugin - ts#react-website#auth
  5. 必須パラメータを入力
    • cognitoDomain: game-ui
    • project: @dungeon-adventure/game-ui
    • allowSignup: true
  6. クリック Generate

ファイルツリーに新しいファイルが表示/変更されます。

詳細を確認するにはここをクリック

以前に作成したGame APIに接続するようにGame UIを設定しましょう。

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

ファイルツリーに新しいファイルが表示/変更されます。

詳細を確認するにはここをクリック

ゲームUI: インフラストラクチャー

Section titled “ゲームUI: インフラストラクチャー”

CDKインフラストラクチャーの最終サブプロジェクトを作成しましょう。

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

ファイルツリーに新しいファイルが表示/変更されます。

詳細を確認するにはここをクリック

タスク6: インフラストラクチャーを更新する

Section titled “タスク6: インフラストラクチャーを更新する”

生成されたコンストラクトの一部をインスタンス化するために、packages/infra/src/stacks/application-stack.tsを更新しましょう:

import {
GameApi,
GameUI,
InventoryMcpServer,
RuntimeConfig,
StoryAgent,
UserIdentity,
} from ':dungeon-adventure/common-constructs';
import { Stack, StackProps, CfnOutput } from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class ApplicationStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
const userIdentity = new UserIdentity(this, 'UserIdentity');
const gameApi = new GameApi(this, 'GameApi', {
integrations: GameApi.defaultIntegrations(this).build(),
});
const { userPool, userPoolClient } = userIdentity;
const mcpServer = new InventoryMcpServer(this, 'InventoryMcpServer');
// Use Cognito for user authentication with the agent
const storyAgent = new StoryAgent(this, 'StoryAgent', {
authorizerConfiguration: {
customJwtAuthorizer: {
discoveryUrl: `https://cognito-idp.${Stack.of(userPool).region}.amazonaws.com/${userPool.userPoolId}/.well-known/openid-configuration`,
allowedAudience: [userPoolClient.userPoolClientId],
},
},
environment: {
INVENTORY_MCP_ARN: mcpServer.agentCoreRuntime.arn,
},
});
// Add the Story Agent ARN to runtime-config.json so it can be referenced by the website
RuntimeConfig.ensure(this).config.agentArn =
storyAgent.agentCoreRuntime.arn;
new CfnOutput(this, 'StoryAgentArn', {
value: storyAgent.agentCoreRuntime.arn,
});
new CfnOutput(this, 'InventoryMcpArn', {
value: mcpServer.agentCoreRuntime.arn,
});
// Grant the agent permissions to invoke our mcp server
mcpServer.agentCoreRuntime.grantInvoke(storyAgent.agentCoreRuntime);
// Grant the authenticated role access to invoke the api
gameApi.grantInvokeAccess(userIdentity.identityPool.authenticatedRole);
// Ensure this is instantiated last so our runtime-config.json can be automatically configured
new GameUI(this, 'GameUI');
}
}
初めてコードをビルドする時が来ました

コマンドラインを使用して、次を実行します:

Terminal window
pnpm nx run-many --target build --all

次のプロンプトが表示されます:

Terminal window
NX The workspace is out of sync
[@nx/js:typescript-sync]: Some TypeScript configuration files are missing project references to the projects they depend on or contain outdated project references.
This will result in an error in CI.
? Would you like to sync the identified changes to get your workspace up to date?
Yes, sync the changes and run the tasks
No, run the tasks without syncing the changes

このメッセージは、NXが自動的に更新できるファイルを検出したことを示しています。この場合、参照プロジェクトにTypeScript参照が設定されていないtsconfig.jsonファイルを指しています。

Yes, sync the changes and run the tasksオプションを選択して続行します。同期ジェネレーターが不足しているTypeScript参照を自動的に追加するため、IDEに関連するすべてのインポートエラーが自動的に解決されることに気付くはずです!

すべてのビルド成果物は、モノレポのルートにあるdist/フォルダ内で利用できるようになりました。これは、@aws/nx-pluginによって生成されたプロジェクトを使用する場合の標準的な慣行であり、生成されたファイルでファイルツリーが汚染されることはありません。ファイルをクリーンにしたい場合は、生成されたファイルがファイルツリー全体に散らばることを心配せずにdist/フォルダを削除してください。

おめでとうございます!AIダンジョンアドベンチャーゲームのコアの実装を開始するために必要なすべてのサブプロジェクトを作成しました。🎉🎉🎉