👀

【実戦】Next.js 14 × AWSオープンソースで作る次世代Webアプリ

に公開

はじめに

フロントエンド開発の最新トレンドであるNext.js 14のApp Routerと、AWSが公開しているオープンソースプロジェクトを組み合わせたアプリケーション開発手法を解説します。2024年現在で最も生産性の高い技術スタックの一つです。

技術選定の理由

技術 採用理由
Next.js 14 デフォルト高速化・React Server Components
AWS Amplify フルスタックデプロイ統合
OpenSearch UI 検索UXの迅速実装
CloudScape 一貫性あるAWS風UI

セットアップ手順

1. プロジェクト初期化

npx create-next-app@latest my-app --typescript --tailwind
cd my-app
npm install @aws-amplify/ui-react @aws-amplify/auth @opensearch-project/opensearch-ui

2. Amplify設定

// src/amplify-config.ts
import { Amplify } from 'aws-amplify';

Amplify.configure({
  Auth: {
    region: 'ap-northeast-1',
    userPoolId: process.env.NEXT_PUBLIC_USER_POOL_ID,
    userPoolWebClientId: process.env.NEXT_PUBLIC_CLIENT_ID
  },
  API: {
    endpoints: [
      {
        name: 'main-api',
        endpoint: process.env.NEXT_PUBLIC_API_URL,
        region: process.env.NEXT_PUBLIC_REGION
      }
    ]
  }
});

コア機能実装

検索UI統合(OpenSearch UI)

// src/app/search/page.tsx
import { SearchBox, Results } from '@opensearch-project/opensearch-ui';

export default function SearchPage() {
  return (
    <div className="container mx-auto p-4">
      <SearchBox 
        query={q}
        onSearch={(query) => setQ(query)}
        searchAsYouType={true}
      />
      <Results 
        results={data?.hits?.hits || []}
        resultView={(hit) => (
          <div key={hit._id}>
            <h3>{hit._source.title}</h3>
            <p>{hit._source.description}</p>
          </div>
        )}
      />
    </div>
  );
}

認証フロー(Amplify UI)

// src/app/auth/sign-in.tsx
import { Authenticator } from '@aws-amplify/ui-react';

export default function SignInPage() {
  return (
    <div className="max-w-md mx-auto mt-10">
      <Authenticator
        loginMechanisms={['email']}
        socialProviders={['google']}
      />
    </div>
  );
}

パフォーマンス最適化

Next.js設定

// next.config.js
const nextConfig = {
  experimental: {
    optimizePackageImports: [
      '@aws-amplify/ui-react',
      '@opensearch-project/opensearch-ui'
    ]
  }
};

バンドル分析

npm install @next/bundle-analyzer
npx next build --analyze

デプロイフロー(Amplify Hosting)

  1. GitHubリポジトリと連携
  2. ビルド設定自動検出
  3. プレビュー環境付きCI/CD
# amplify.yml
version: 1
frontend:
  phases:
    preBuild:
      commands:
        - npm ci
    build:
      commands:
        - npm run build
  artifacts:
    baseDirectory: .next
    files:
      - '**/*'
  cache:
    paths:
      - node_modules/**/*

ベンチマーク結果

当社プロジェクトでの計測(東京リージョン):

指標 数値
ページロード 1.2s
Cold Start 1.8s
バンドルサイズ 142kB
TTI 1.5s

トラブルシューティング

よくあるエラー1:CSR/SSRの不一致

解決策

'use client'; // クライアントコンポーネント明示

よくあるエラー2:認証状態の遅延

解決策

const { user, isLoading } = useAuthenticator(context => [context.user]);
if (isLoading) return <LoadingSkeleton />;

発展的な活用

  • Gen2機能:Amplifyのコードレスバックエンド連携
  • Edge Functions:地域最適化
  • Analytics:Amplifyでユーザー行動追跡

まとめ

Next.jsとAWSオープンソースの組み合わせは、エンタープライズ級のアプリケーションを個人開発者の速度で実現可能にします。本記事のテンプレートをベースに、ぜひ独自のアプリケーション開発にお役立てください。

Discussion