⛳

CloudFront + S3 環境で MicroCMS を試してみた!

に公開

はじめに

前回 CloudFront + S3 環境で React(SSG) を実行しましたが、せっかくなら CMS を使って、ページの更新ができないかなと思い挑戦してみました。

対象読者

  • これからヘッドレス CMS にチャレンジしてみようと思ってる方

前提条件

  • 執筆時点(2025年12月)の情報を元に作成しています。開発される際は最新の MicroCMS 情報をご確認ください。
  • 個人検証用のため MicroCMS は無料で利用できる Hobby プランを利用しています。
    開発の際は、適宜プランを選択してください。
  • 開発環境、CloudFront + S3 環境、デプロイ方法などは前回記事の通りです。試される場合は予めご用意ください。

ヘッドレス CMS とは

ヘッドレス CMS(Content Management System)とは、コンテンツ管理機能に特化し、表現層(「ヘッド」)を持たない CMS です。

従来の CMS(WordPress など)では、コンテンツ管理と表示が一体となっていました。一方、ヘッドレス CMS はコンテンツ管理機能のみを提供し、API を通じてコンテンツを配信します。フロントエンドは React、Vue.js、Next.js など自由に選択でき、デスクトップ、モバイル、Web など複数のプラットフォームに同じコンテンツを配信できるという利点があります。

ヘッドレス CMS の主な特徴は以下の通りです。

  • API ベースの配信: REST API または GraphQL でコンテンツを取得
  • フレームワーク非依存: フロントエンド技術を自由に選択可能
  • マルチチャネル対応: 一度作成したコンテンツを複数の媒体で利用
  • スケーラビリティ: 静的サイト生成(SSG)と組み合わせて高速配信が可能

なぜ MicroCMS を選択したか

今回ヘッドレス CMS として MicroCMS を選択した理由は、以下の通りです。

  • 日本製である
    MicroCMS は日本で開発されたサービスです。国内企業による開発のため、セキュリティやサポートが日本の文脈で提供されており、安心感があります。

  • 日本語マニュアルが豊富
    公式ドキュメントやチュートリアルが充実した日本語で提供されています。英語のみのサービスと異なり、つまずいた際の情報収集が容易です。

  • 無料プランが充実
    開発や小規模なプロジェクトには無料プランで十分です。本番運用時にアップグレードを検討するという使い方ができます。

MicroCMS の設定方法

ここでは MicroCMS の基本的な設定手順を説明します。

1. MicroCMS への登録

公式サイトにアクセスし、アカウントを作成します。
アカウント登録

2. サービス作成

  • 管理画面のトップページにアクセスし、画面右上の[+ 追加]ボタンをクリックします。
    追加

  • [+ 追加]ボタンをクリックし、[一から作成する]をクリックします。
    ※本記事では[テンプレートから選ぶ]は利用しませんので詳しくは公式サイトで!
    サービス選択

  • サービス名とサービスIDを入力し、[サービスを作成する]ボタンをクリックします。
    ※実際は初期値が入力されていますので適宜変更してください。初期値のままでもよいです。
    サービス情報入力

  • サービスの作成は完了です。
    サービス作成完了

  • コンテンツ API の設定
    コンテンツ APIとは MicroCMS からデータの取得や登録を行うための基本的なAPIです。
    データの取得のみを行う場合は、GET だけ許可したほうがセキュリティ的にも良さそうです。
    コンテンツ API

3. API スキーマの定義

  • 管理画面左側のメニュー内で、「コンテンツ(API)」項目の3点リーダーをクリックし[新しいAPIを作成]をクリックします。
    新しいAPIを作成

  • APIの作成画面から[自分で決める]をクリックします。
    自分で決める

  • API の基本情報を入力します。
    ※下記サンプルプログラムは API 名を articles と設定した状態です。
    APIの基本情報

  • API の型は「リスト形式」をクリックします。
    APIの型

  • 下記表の通り API スキーマを定義します。

フィールド名 フィールド ID 型
タイトル title テキストフィールド
本文 body リッチエディタ

注: publishedAt はシステムフィールドとして自動的に生成されるため、個別で作成する必要はありません。
APIスキーマ

  • [作成]をクリックすると、APIの作成が完了します。

4. コンテンツの作成

  • 左メニューにある作成した API をクリックします。
    右上または中央にある[+ 追加]ボタンをクリックします。クリックすると、コンテンツ作成画面に移動します。
    API画面

  • テスト用に以下の内容を入力し[公開]をクリックして公開します。

フィールド 入力値
タイトル React と MicroCMS で始めるヘッドレス CMS
本文 この記事では MicroCMS の基本的な使い方を説明します。

コンテンツ作成画面

API レスポンス例
上記の設定でコンテンツを作成すると、以下のような JSON が返されます。

{
    "contents": [
        {
            "id": "xxxxxxx",
            "createdAt": "2025-12-01T02:56:41.199Z",
            "updatedAt": "2025-12-01T02:56:41.199Z",
            "publishedAt": "2025-12-01T02:56:41.199Z",
            "revisedAt": "2025-12-01T02:56:41.199Z",
            "title": "React と MicroCMS で始めるヘッドレス CMS",
            "body": "<p>この記事では MicroCMS の基本的な使い方を説明します。</p>"
        }
    ],
    "totalCount": 1,
    "offset": 0,
    "limit": 10
}

React プログラム作成

5. 環境構築

前回記事のステップ 3 まで行ってください。

6. 環境変数ファイルの作成

フロントエンドから API 呼び出しに使用するため、プロジェクトのルートに .env.local ファイルを作成し、以下の内容を記述します。
本番環境では、.env.local をリポジトリにコミットせず、ホスティングサービスの環境変数設定から設定してください。

NEXT_PUBLIC_MICROCMS_SERVICE_ID=your_service_id
NEXT_PUBLIC_MICROCMS_API_KEY=your_api_key
  • NEXT_PUBLIC_MICROCMS_SERVICE_ID の確認方法

MicroCMS 管理画面の左サイドバーから「API」を選択します。API 一覧画面に表示されるエンドポイント URL を確認してください。

エンドポイント URL の形式: https://myblog.microcms.io/api/v1/articles

NEXT_PUBLIC_MICROCMS_SERVICE_ID はこの URL に含まれるサービス ID です。上記エンドポイントの場合、NEXT_PUBLIC_MICROCMS_SERVICE_ID は myblog です。

  • NEXT_PUBLIC_MICROCMS_API_KEY の確認方法

MicroCMS 管理画面の左サイドバーから「設定」を選択します。設定画面の「API キー管理」セクションを確認してください。

7. サンプルプログラム

以下は MicroCMS から記事データを取得し、React で表示するサンプルコードです。
※サンプルプログラムはリッチテキストエディタの情報をエンコードせずそのまま出力していますので、開発する場合は適宜エンコード処理を追加してください。

app/page.tsx
'use client';

import { useEffect, useState } from 'react';

interface Article {
  id: string;
  title: string;
  body: string;
  publishedAt: string;
}

export default function Home() {
  const [articles, setArticles] = useState<Article[]>([]);
  const [loading, setLoading] = useState<boolean>(true);
  const [error, setError] = useState<string | null>(null);

  useEffect(() => {
    const fetchArticles = async () => {
      try {
        const svc = process.env.NEXT_PUBLIC_MICROCMS_SERVICE_ID;
        const key = process.env.NEXT_PUBLIC_MICROCMS_API_KEY;

        if (!svc || !key) {
          throw new Error('環境変数が設定されていません');
        }

        const response = await fetch(
          `https://${svc}.microcms.io/api/v1/articles`,
          {
            headers: {
              'X-MICROCMS-API-KEY': key,
            } as HeadersInit,
          }
        );

        if (!response.ok) {
          throw new Error('記事の取得に失敗しました');
        }

        const data = await response.json();
        setArticles(data.contents);
      } catch (err) {
        const errorMessage =
          err instanceof Error ? err.message : '不明なエラーが発生しました';
        setError(errorMessage);
      } finally {
        setLoading(false);
      }
    };

    fetchArticles();
  }, []);

  if (loading) {
    return <p>読み込み中...</p>;
  }

  if (error) {
    return <p>エラー: {error}</p>;
  }

  if (articles.length === 0) {
    return <p>記事がありません</p>;
  }

  return (
    <div>
      <h1>ブログ記事</h1>
      <ul>
        {articles.map((article) => (
          <li key={article.id}>
            <h2>{article.title}</h2>
            <p>{article.body}</p>
            <small>
              {new Date(article.publishedAt).toLocaleDateString('ja-JP')}
            </small>
          </li>
        ))}
      </ul>
    </div>
  );
}

8. 動作確認とデプロイ

前回記事のステップ 6 から確認を行ってください。

確認すること要点

  • http://localhost:3000/ で MicroCMS の情報が表示されるか
  • 正常にビルドが行えるか
  • out フォルダの中身を S3 にアップロードし、CloudFront 経由で MicroCMS の情報が表示されるか

ローカルテスト結果ローカルテスト結果

補足

今回 MicroCMS は無料で利用できる Hobby プランを利用しています。
上位のプランでは、API の IP 制限など利用できるようになりますので、適宜調整してみてください。

まとめ

ヘッドレス CMS は静的サイト生成と組み合わせることで、管理の柔軟性と配信の高速性を両立させる強力なアーキテクチャです。MicroCMS は国内ユーザーにとって取り組みやすいサービスです。ぜひチャレンジしてみてください。
この記事が、誰かのお役に立てば幸いです。

参考サイト

株式会社グローバルネットコア 有志コミュニティ(β)

Discussion