← 戻る

Astro移行の可行性と戦略分析


現状技術スタック

フロントエンド: 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 FunctionshttpsCallable(‘sendMail’)Astro APIエンドポイント or SSRで代替
HubSpotフォームクライアント専用インタラクションAstro Componentで Island化

Astro採用の優位性

Astro Islands パターン:

  • ページ全体をJSで制御せず、インタラクティブ必須部分のみを「島」として独立
  • ページの大部分は静的HTMLで高速配信、フォーム/カルーセル等のみJS送信

Next.jsと比較した利点:

  1. ファイル形式がHTML的 → デザイナーが読める
  2. 概念が少ない → HTML + Tailwind で完結、React hooks/Server-Client判断不要
  3. Claude Code との相性 → 生成コードがシンプル、副作用少、スコープ局所
  4. 役割分離が自然 → 静的部分(デザイナー) vs Islands/API(エンジニア)
  5. サイト特性に合致 → 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 は本件の要件と完全マッチ。ビルドキャッシング戦略の設計が鍵。