#next-js (1)
現状技術スタック
フロントエンド: Next.js 14.2.35 (App Router) + React 18.3.1 + TypeScript 5.x スタイリング: Tailwind CSS v3 + SCSS Module(microCMSリッチテキスト用) 状態管理: Zustand(2ストア) CMS: microCMS BaaS: Firebase(Firestore, Functions, Auth) デプロイ: Google App Engine
ページ構成: 約50ページ(LeanGoコーポレート、dejamサービス、ad-future)、動的ルート多数
移行のネック項目
| 項目 | 影響度 | 課題 | 解決策 |
|---|---|---|---|
| ISR (revalidateTag) | 高 | Next.js固有、microCMS Webhook対応が必要 | Astro APIルートでWebhook受信→オンデマンドリビルド |
| breakpoint検出 | 高 | useLayoutEffect でwindowサイズ判定、全体ローディング | CSSメディアクエリで代替、JS削減可能 |
| Firestoreクライアント | 中 | /dejam/website/ のみ | client:load Island に分離 |
| Firebase Functions | 中 | httpsCallable(‘sendMail’) | Astro APIエンドポイント or SSRで代替 |
| HubSpotフォーム | 中 | クライアント専用インタラクション | Astro Componentで Island化 |
Astro採用の優位性
Astro Islands パターン:
- ページ全体をJSで制御せず、インタラクティブ必須部分のみを「島」として独立
- ページの大部分は静的HTMLで高速配信、フォーム/カルーセル等のみJS送信
Next.jsと比較した利点:
- ファイル形式がHTML的 → デザイナーが読める
- 概念が少ない → HTML + Tailwind で完結、React hooks/Server-Client判断不要
- Claude Code との相性 → 生成コードがシンプル、副作用少、スコープ局所
- 役割分離が自然 → 静的部分(デザイナー) vs Islands/API(エンジニア)
- サイト特性に合致 → 90%以上が静的 → ゼロJS配信で最高速
データフェッチング戦略
- microCMS: Content Collections + ISR相当(オンデマンドビルド)
- JSON: readFileSync → Astro loaders に置換
- Firestore: Client Islands のみ(useEffect内で直接呼び出し)
- Firebase Functions: Astro SSR APIエンドポイントに移行
デザイナー・エンジニア作業領域分離
| 領域 | 対象 | 担当 |
|---|---|---|
| 静的マークアップ + Tailwind | ほぼ全ページ | デザイナー(.astro) |
| Islands(React/Svelte) | フォーム、カルーセル、Firestore | エンジニア |
| API, デプロイ, CMS連携 | 機能実装 | エンジニア |
リスク・注意点
- テスト未整備 → 移行時のリグレッション検知は手動確認に依存
- GAEデプロイ対応 → Node adapter 検証が必須
- breakpoint検出の移行 → CSSメディアクエリ設計の見直し
結論
大半が静的生成可能で、クライアントJS が限定的。Astro Islands は本件の要件と完全マッチ。ビルドキャッシング戦略の設計が鍵。