0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

自社サイトやイベントサイトを作っていると、FAQ(よくある質問) を更新しやすい仕組みが必要になります。

  • コードにベタ書きしたくない
  • 非エンジニアでも更新できるようにしたい
  • 表示側はNext.jsなどで自由にデザインしたい

そこで今回は microCMSでFAQ管理を行い、さらに Cloudflare Pages 上でNext.jsサイトとして公開するところまで構築した内容をまとめます。

結論:microCMS × Cloudflare Pages の相性は最高

Cloudflare Pagesは以下の理由でmicroCMSとの相性がとても良いです。

  • 静的サイトとして爆速で配信できる
  • SSR/ISR が Cloudflare Functions(edge)で動作する
  • microCMSのAPIへグローバルな低レイテンシでアクセス可能
  • APIキーを Cloudflare Pages の環境変数として安全に管理できる
  • デプロイもGit pushだけで完結

「ヘッドレスCMS × 先端ホスティング」の最強組み合わせでした。

実装の全体像

実装フローは以下の4ステップです。

  1. microCMSでFAQスキーマを作成
  2. FAQデータを登録
  3. Next.js(App Router)でFAQページを作成
  4. Cloudflare Pagesにデプロイ

1. microCMSでFAQ APIモデルを作成

スキーマ例

フィールド名 タイプ 用途
question テキスト 質問
answer リッチエディタ 回答
category セレクト or テキスト カテゴリ(任意)

GUIでポチポチ作れます。

2. FAQエントリを登録する

例:

  • Q: サイトの対応ブラウザを教えてください
  • A: 最新のChrome/Edge/Safariを推奨します。

3. Next.js(App Router)で実装

/app
 └ faq/
     └ page.tsx

/app/faq/page.tsx

import type { Metadata } from "next";

export const metadata: Metadata = {
  title: "FAQ",
};

type FAQ = {
  id: string;
  question: string;
  answer: string;
  category?: string;
};

export default async function FAQPage() {
  const res = await fetch(
    "https://YOUR_SERVICE.microcms.io/api/v1/faq",
    {
      headers: {
        "X-MICROCMS-API-KEY": process.env.MICROCMS_API_KEY!,
      },
      // Cloudflare Pages では "force-cache" or "no-store" が安定
      cache: "no-store",
    }
  );

  const data: { contents: FAQ[] } = await res.json();

  return (
    <main className="max-w-3xl mx-auto p-6">
      <h1 className="text-3xl font-bold mb-6">FAQ</h1>

      <div className="space-y-4">
        {data.contents.map((faq) => (
          <details key={faq.id} className="border rounded p-4">
            <summary className="cursor-pointer font-semibold">
              {faq.question}
            </summary>
            <div
              className="mt-2 prose"
              dangerouslySetInnerHTML={{ __html: faq.answer }}
            />
          </details>
        ))}
      </div>
    </main>
  );
}

4. Cloudflare Pages にデプロイする

① GitHub と Cloudflare Pages を連携する

Cloudflare Pages → Create Project
→ GitHubリポジトリを選択
→ ビルド設定:

設定項目
Framework preset Next.js
Build command npm run build or bun run build
Build output .vercel/output(自動設定されることが多い)
Node バージョン 18 or 20

② microCMS APIキーを環境変数に設定

Pages → Settings → Environment Variables に設定:

MICROCMS_API_KEY = xxxxxxxxxxxxx

Next.js 側では process.env.MICROCMS_API_KEY で参照できます。

③ Edge Runtime との相性

App Router かつ cache: 'no-store' を使うと、Cloudflare Functions(Edge)上で動作します。

メリット:

  • microCMS がグローバルCDNなので edge と相性抜群
  • 毎回フレッシュなFAQを取得できる

Cloudflare Pagesで運用してみた感想

よかった点

  • デプロイが速い(10秒〜20秒)
  • microCMS の API が edge 経由でかなり高速に取得できる
  • APIキーが環境変数にしっかり隠せる
  • 動的・静的どちらも対応できる
  • Preview URL が自動で生成され、確認が楽

注意点

  • fetch の cache モードを force-cacheno-store に合わせる必要がある
  • preview と production で環境変数を分けておくのが良い

まとめ:microCMS × Cloudflare Pages × Next.js はFAQに最適

今回の構成で感じたのは、

FAQの「変更頻度の高さ」×「Web表示自由度の高さ」×「高速配信」をすべて満たす最高の組み合わせ

ということです。

  • microCMS → FAQ 更新が最も楽
  • Next.js → フロントの柔軟性が高い
  • Cloudflare Pages → 高速・安い・デプロイが楽

👉 FAQページをCMS運用したいなら、この構成だけで十分戦える と実感しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?