Skip to content

AIダンジョンゲーム

モジュール1: モノレポのセットアップ

新しいモノレポを作成することから始めます。任意のディレクトリ内で次のコマンドを実行してください:

Terminal window
npx create-nx-workspace@~21.0.3 dungeon-adventure --pm=pnpm --preset=@aws/nx-plugin --ci=skip

これにより、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を使用してさまざまなサブプロジェクトを作成する準備が整いました。

Game API

最初に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

ファイルツリーに新しいファイルが生成されているはずです。

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

Story API

次にStory APIを作成します。以下の手順でStoryApiというFast APIを作成します:

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

ファイルツリーに新しいファイルが生成されているはずです。

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

Game UI: ウェブサイト

ゲーム操作用のUIを作成します。以下の手順でGameUIウェブサイトを作成します:

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

ファイルツリーに新しいファイルが生成されているはずです。

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

Game UI: 認証

Amazon Cognitoによる認証を設定します:

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

ファイルツリーが更新されます。

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

Game UI: Story API接続

Story APIへの接続を設定します:

  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.story_api
  6. クリック Generate

ファイルツリーが更新されます。

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

Game UI: Game API接続

Game APIへの接続を設定します:

  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

ファイルツリーが更新されます。

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

Game 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

ファイルツリーが更新されます。

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

インフラストラクチャの更新

packages/infra/src/stacks/application-stack.tsを更新してコンストラクトをインスタンス化します:

import {
GameApi,
GameUI,
StoryApi,
UserIdentity,
} from ':dungeon-adventure/common-constructs';
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class ApplicationStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// The code that defines your stack goes here
const userIdentity = new UserIdentity(this, 'UserIdentity');
const gameApi = new GameApi(this, 'GameApi', {
integrations: GameApi.defaultIntegrations(this).build(),
});
const storyApi = new StoryApi(this, 'StoryApi', {
integrations: StoryApi.defaultIntegrations(this).build(),
});
// grant our authenticated role access to invoke our APIs
[storyApi, gameApi].forEach((api) =>
api.grantInvokeAccess(userIdentity.identityPool.authenticatedRole),
);
// Ensure this is instantiated last so our runtime-config.json can be automatically configured
new GameUI(this, 'GameUI');
}
}

APIのデフォルト統合を設定しています。各操作が個別のLambda関数にマッピングされます。

コードのビルド

初回コードビルドの実行
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...
? 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

Yes, sync the changes and run the tasksを選択してください。TypeScript参照が自動設定されます。

ビルド成果物はdist/フォルダに生成されます。クリーンアップにはdist/を削除します。

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