Skip to content

Reactウェブサイト

Filter this guidePick generator option values to hide sections that don't apply.

このジェネレータはReactウェブサイトを新規作成し、デフォルトでshadcn/uiの設定と、静的ウェブサイトをクラウドにデプロイするためのAWS CDKまたはTerraformインフラストラクチャ(S3ホスティング、CloudFront配信、WAF保護)を構成します。

生成されるアプリケーションはビルドツールとバンドラーにViteを使用し、型安全なルーティングにTanStack Routerを採用しています。

新しいReactウェブサイトは2つの方法で生成できます:

  1. インストール Nx Console VSCode Plugin まだインストールしていない場合
  2. VSCodeでNxコンソールを開く
  3. クリック Generate (UI) "Common Nx Commands"セクションで
  4. 検索 @aws/nx-plugin - ts#website
  5. 必須パラメータを入力
    • クリック Generate
    パラメータデフォルト説明
    name 必須string-アプリケーションの名前。
    framework reactreact使用するフロントエンドフレームワーク。
    directory stringpackages新しいアプリケーションのディレクトリ。
    subDirectory string-プロジェクトが配置されるサブディレクトリ。デフォルトではプロジェクト名になります。
    ux none | cloudscape | shadcnshadcn優先するUXプロバイダー。
    tailwind booleantrueユーティリティファーストのスタイリングのためにTailwindCSSを有効にします。
    tanstackRouter booleantrue型安全なルーティングのためにTanstackルーターを有効にします。
    infra cloudfront-s3 | nonecloudfront-s3ウェブサイトをデプロイするインフラストラクチャのタイプ。
    iac inherit | cdk | terraforminherit優先するIaCプロバイダー。デフォルトでは、初期選択から継承されます。
    preferInstallDependencies booleantrueジェネレーター実行後に依存関係のインストールを優先するかどうか。複数のジェネレーターをバッチ処理する際にインストールを延期する場合はfalseに設定します(後続のジェネレーターがNxプロジェクトグラフを計算できるよう、必要に応じてインストールは実行されます)。最後に一度だけインストールします。

    ジェネレータは<directory>/<name>ディレクトリに以下のプロジェクト構造を作成します:

    • index.html HTMLエントリポイント
    • public 静的アセット
    • Directorysrc
      • main.tsx Reactセットアップを含むアプリケーションエントリポイント
      • config.ts アプリケーション設定(ロゴなど)
      • Directorycomponents
        • AppLayout 全体のレイアウトとナビゲーションバー用コンポーネント
      • Directoryhooks
        • useAppLayout.tsx ネストされたコンポーネントからAppLayoutを調整するフック(Cloudscapeのみ)
      • Directoryroutes
        • index.tsx TanStack Router用のサンプルルート(ページ)
      • styles.css グローバルスタイル
    • vite.config.mts ViteとVitestの設定
    • tsconfig.json ソースとテスト用の基本TypeScript設定
    • tsconfig.app.json ソースコード用TypeScript設定
    • tsconfig.spec.json テスト用TypeScript設定

    このジェネレータは選択した iacProvider に基づいてInfrastructure as Codeを生成するため、packages/common に関連するCDKコンストラクトまたはTerraformモジュールを含むプロジェクトを作成します。

    共通のInfrastructure as Codeプロジェクトは以下の構造を持ちます:

    • Directorypackages/common/constructs
      • Directorysrc
        • Directoryapp/ プロジェクト/ジェネレータ固有のインフラストラクチャ用コンストラクト
        • Directorycore/ app 内のコンストラクトで再利用される汎用コンストラクト
        • index.ts app からコンストラクトをエクスポートするエントリーポイント
      • project.json プロジェクトのビルドターゲットと設定

    ジェネレータは選択したiacProviderに基づいてウェブサイトをデプロイするためのインフラストラクチャコードを作成します:

    • Directorypackages/common/constructs/src
      • Directoryapp
        • Directorystatic-websites
          • <name>.ts ウェブサイト固有のインフラストラクチャ
      • Directorycore
        • static-website.ts 汎用StaticWebsiteコンストラクト

    デプロイされたウェブサイトは以下のアーキテクチャを持ちます:

    Web BrowserWAFCloudFrontStatic Assets(S3)

    CloudFrontディストリビューションは、すべてのレスポンスにStrict-Transport-SecurityX-Content-Type-OptionsX-Frame-Options: DENYReferrer-Policy、およびContent-Security-Policyを設定するレスポンスヘッダーポリシーを適用します。

    デフォルトのContent-Security-Policyが適用されます。これはXSSやクリックジャッキングを軽減するためにスクリプトとフレーミングを制限しつつ、デプロイ時にのみURLが判明するAWSサービスエンドポイント(API Gateway、Cognito、Bedrock AgentCoreなど)をウェブサイトが呼び出せるようHTTPSおよびWSS接続を許可します。ポリシーを調整する場合(例えばconnect-srcを特定のオリジンに絞り込む場合)、生成されたstatic-website.ts(CDK)またはstatic-website.tf(Terraform)のcontent_security_policy値を編集してください。

    runtime-config.jsonCache-Control: no-cacheで配信されるため、ブラウザは再デプロイ後に古いキャッシュコピーではなく常に最新の設定を取得します。

    ReactドキュメントはReact開発の基本を学ぶのに適しています。

    ux = cloudscape

    Cloudscapeドキュメントでは利用可能なコンポーネントとその使用方法を確認できます。

    ux = shadcn

    shadcn/uiドキュメントでは利用可能なコンポーネントとその使用方法を確認できます。

    ウェブサイトにはデフォルトでTanStack Routerが設定されています。新しいルートを簡単に追加できます:

    1. ローカル開発サーバーを起動
    2. src/routesに新しい<page-name>.tsxファイルを作成(ファイルツリー内の位置がパスを表す)
    3. RouteRouteComponentが自動生成されます。ここでページの構築を開始できます

    ページ間の移動にはLinkコンポーネントまたはuseNavigateフックを使用します:

    import { Link, useNavigate } from '@tanstack/react-router';
    export const MyComponent = () => {
    const navigate = useNavigate();
    const submit = async () => {
    const id = await ...
    // 非同期処理後のリダイレクトに`navigate`を使用
    navigate({ to: '/products/$id', { params: { id }} });
    };
    return (
    <>
    <Link to="/products">キャンセル</Link>
    <Button onClick={submit}>送信</Button>
    </>
    )
    };

    詳細はTanStack Routerドキュメントを参照してください。

    インフラストラクチャからの設定はランタイム設定を通じてウェブサイトに提供されます。これにより、デプロイ時まで不明なAPI URLなどの詳細情報にアクセス可能になります。

    RuntimeConfig CDKコンストラクトを使用して設定の追加・取得が可能です。@aws/nx-pluginジェネレータ(ts#trpc-apipy#fast-apiなど)で生成されたCDKコンストラクトは自動的にRuntimeConfigに値を追加します。

    ウェブサイトCDKコンストラクトはランタイム設定のconnection名前空間をruntime-config.jsonファイルとしてS3バケットのルートにデプロイします。

    packages/infra/src/stacks/application-stack.ts
    import { Stack } from 'aws-cdk-lib';
    import { Construct } from 'constructs';
    import { MyWebsite, MyApi } from ':my-scope/common-constructs';
    export class ApplicationStack extends Stack {
    constructor(scope: Construct, id: string) {
    super(scope, id);
    // Webサイトは任意の場所で宣言可能 — ランタイム設定は遅延解決されます
    new MyWebsite(this, 'MyWebsite');
    // RuntimeConfigに自動的に値を追加
    new MyApi(this, 'MyApi', {
    integrations: MyApi.defaultIntegrations(this).build(),
    });
    }
    }

    ウェブサイトではuseRuntimeConfigフックを使用してランタイム設定値を取得できます:

    import { useRuntimeConfig } from '../hooks/useRuntimeConfig';
    const MyComponent = () => {
    const runtimeConfig = useRuntimeConfig();
    // ランタイム設定値にアクセス
    const apiUrl = runtimeConfig.apis.MyApi;
    };

    ローカル開発サーバーを実行する際、バックエンドURLや認証設定などを認識させるため、publicディレクトリにruntime-config.jsonファイルが必要です。

    ウェブサイトプロジェクトにはデプロイ済みアプリケーションからruntime-config.jsonを取得するload:runtime-configターゲットが設定されています:

    Terminal window
    pnpm nx run <my-website>:"load:runtime-config"

    ローカル開発の標準コマンドはdevです。これは1つのコマンドでウェブサイト(および接続したAPIのローカルサーバー)を起動します:

    Terminal window
    pnpm nx dev <my-website>

    devは以下で説明するserve-localターゲットのエイリアスです。serveserve-localは、アプリケーションのどの部分をローカルで実行し、どの部分をデプロイ済みのAWSインフラストラクチャに向けるかを制御する必要がある場合に引き続き利用できます。接続されたプロジェクト全体でのローカル開発の概要、および複数のコンポーネントを持つプロジェクトでdevがどのように動作するかについては、ローカル開発ガイドを参照してください。

    serveターゲットはウェブサイトのローカル開発サーバーを起動します。このターゲットを使用するには、ウェブサイトが連携するインフラストラクチャのデプロイとローカルランタイム設定の読み込みが必要です。

    次のコマンドで実行できます:

    Terminal window
    pnpm nx serve <my-website>

    このターゲットは「本番」デプロイされたAPIと連携しながらウェブサイトを変更する場合に有用です。

    devターゲットはViteのMODElocal-devに設定したローカル開発サーバーを起動し、接続ジェネレータで接続したAPIのローカルサーバーも同時に起動します。

    このターゲットでサーバーを起動すると、runtime-config.jsonがローカルAPIのURLを指すように自動的に上書きされます。

    次のコマンドで実行できます:

    Terminal window
    pnpm nx dev <my-website>

    このターゲットはウェブサイトとAPIを同時に開発する際の迅速な反復処理に適しています。

    モック認証

    このモードで実行しruntime-config.jsonが存在しない場合、ts#website#authジェネレータでCognito認証を設定していても、ログインがスキップされローカルサーバーへのリクエストに認証ヘッダーが含まれません。

    serve-localで認証を有効化するには、インフラストラクチャをデプロイしランタイム設定を読み込んでください。

    buildターゲットでウェブサイトをビルドできます。これはbundlecompiletestlintターゲットを実行し、型チェック、バンドル、テスト、リンターを実行します。

    Terminal window
    pnpm nx build <my-website>

    bundleターゲットはViteを使用して本番用バンドルをルートのdist/packages/<my-website>/bundleディレクトリに生成します。これはウェブサイトインフラストラクチャで使用されるデプロイ可能なアーティファクトです。単独で実行することもできます:

    Terminal window
    pnpm nx bundle <my-website>

    テストの作成方法は標準的なTypeScriptプロジェクトと同様です。詳細はTypeScriptプロジェクトガイドを参照してください。

    React固有のテストにはReact Testing Libraryが事前にインストールされています。使用方法はReact Testing Libraryドキュメントを参照してください。

    テストはtestターゲットで実行できます:

    Terminal window
    pnpm nx test <my-website>

    Reactウェブサイトジェネレータは選択したiacProviderに基づいてCDKまたはTerraformのインフラストラクチャコードを作成します。これを使用してウェブサイトをデプロイできます。

    ウェブサイトのデプロイには、CDKアプリケーション作成用のts#infraジェネレータの使用を推奨します。

    packages/common/constructsに生成されたCDKコンストラクトを使用してウェブサイトをデプロイできます。

    packages/infra/src/stacks/application-stack.ts
    import { Stack } from 'aws-cdk-lib';
    import { Construct } from 'constructs';
    import { MyWebsite } from ':my-scope/common-constructs';
    export class ApplicationStack extends Stack {
    constructor(scope: Construct, id: string) {
    super(scope, id);
    new MyWebsite(this, 'MyWebsite');
    }
    }

    この設定では以下が構成されます:

    1. 静的ウェブサイトファイルホスティング用S3バケット
    2. グローバルコンテンツ配信用CloudFrontディストリビューション
    3. セキュリティ保護用WAF Web ACL
    4. 安全なS3アクセスのためのOrigin Access Control
    5. ウェブサイトファイルとランタイム設定の自動デプロイ

    connectionジェネレータを使用して、このプロジェクトをワークスペース内の他のプロジェクトと統合できます。このプロジェクトに関連する接続は以下の通りです:

    tRPC
    React to tRPCReactウェブサイトからtRPC APIを呼び出す
    FastAPI
    React to FastAPIReactウェブサイトからPython FastAPIを呼び出す
    Smithy
    React to Smithy APIReactウェブサイトからSmithy APIを呼び出す
    Strands AgentsPython
    React to Python AgentReactウェブサイトからPython Agentを呼び出す
    Strands AgentsTypeScript
    React to TypeScript AgentReactウェブサイトからTypeScript Agentを呼び出す
    CopilotKit
    React to AG-UI AgentCopilotKit経由でAG-UIプロトコルを公開するAgentをReactウェブサイトから呼び出す

    id>