React、Next.js、microCMS、APIって??初心者向けにそれぞれの役割と関係をやさしく解説


Next.js・microCMS 初心者ノート

React、Next.js、microCMS、APIって?? 初心者向けにそれぞれの役割と関係をやさしく解説

React、Next.js、microCMS、APIはどうやってつながるのか初心者向けに図で解説

Next.jsとmicroCMSを勉強し始めると、 React、API、コンポーネント、データ取得など、 さまざまな言葉が一度に出てきます。
それぞれの説明を読んでも、 「結局、どれとどれがどうつながっているの?」と 頭の中で整理できないことがありました。
今回は、一つの記事がブラウザーへ表示されるまでの流れを使って、 4つの役割をやさしく整理します。

React Next.js microCMS API データ取得 初心者向け
01

4つの言葉が一度に出てきて混乱した

Next.jsとmicroCMSを使ったブログ制作を始めると、 次のような言葉が何度も登場します。

01 React

画面をコンポーネントで作る

02 Next.js

ページやデータ取得をまとめる

03 microCMS

記事や画像を管理する

04 API

サービス間でデータを渡す

一つずつ説明を読むと、 何となく役割は分かります。

ところが、実際のコードではすべてが一緒に登場します。

Next.jsのページで見かけるコード
import ArticleList
  from "@/components/ArticleList";

import { getArticles }
  from "@/libs/microcms";

export default async function BlogPage() {
  const data = await getArticles();

  return (
    <main>
      <ArticleList
        articles={data.contents}
      />
    </main>
  );
}
?

このコードのどこがReactで、どこがNext.js?

microCMSはどの部分にいるのでしょうか。
APIはどこで使われているのでしょうか。
dataは、どこから届いたのでしょうか。

これらは別々に動いているのではなく、 それぞれが違う役割を担当しながら 一つのWebページを作っています。

4つの技術を理解するときは、
「どれが一番偉いか」ではなく、 「誰が何を担当しているか」で考えると整理しやすくなります。

02

最初に全体像を見てみる

まずは細かいコードを読む前に、 記事が表示されるまでの全体像を見てみます。

CONTENT microCMS

管理画面に記事を保存する

APIで渡す
FRAMEWORK Next.js

記事データを取得する

Propsで渡す
UI React

記事を画面の形にする

HTMLとして表示
SCREEN ブラウザー

ユーザーが記事を読む

この流れの中で、 APIは独立した画面やサービスではありません。

microCMSとNext.jsの間で、 記事データを受け渡すための窓口として働きます。

名前
主な役割
今回のブログで担当すること
React
UIを作る
記事カードや一覧を表示する
Next.js
Webアプリ全体を構成する
ページ作成、ルーティング、データ取得
microCMS
コンテンツを管理する
記事タイトルや本文を保存する
API
データを受け渡す
microCMSの記事をNext.jsへ返す
03

Reactは画面を部品から作る

Reactは、Webページの見た目を 小さな部品に分けて作るために使います。

この小さな画面部品を、 コンポーネントと呼びます。

ブログページ
Header
ArticleCard
ArticleCard
ArticleCard
一つのページを部品に分ける
  • ヘッダー
  • 記事カード
  • 検索フォーム
  • フッター

例えば、記事カードは次のようなReactコンポーネントとして作れます。

React components/ArticleCard.tsx
type Props = {
  title: string;
  description: string;
};

export default function ArticleCard({
  title,
  description,
}: Props) {
  return (
    <article>
      <h2>{title}</h2>
      <p>{description}</p>
    </article>
  );
}

Reactは、このコンポーネントへ渡されたデータを使い、 画面に表示する形を作ります。

Reactの担当

Reactは、記事を保存する場所ではありません。 受け取った記事データを、 見出しや文章などのUIとして表示する役割を担当します。

04

Next.jsはWebサイト全体を動かす

Next.jsは、Reactを使って WebサイトやWebアプリを作るためのフレームワークです。

Reactだけでも画面は作れますが、 実際のWebサイトには画面以外の仕組みも必要です。

ROUTING URLとページをつなぐ

/blog/aboutを作る

DATA 外部データを取得する

microCMSのAPIを呼び出す

SERVER サーバー側で処理する

APIキーをブラウザーへ出さずに取得する

PAGE ページを組み立てる

Reactコンポーネントを配置する

App Routerでは、 フォルダとpage.tsxを使ってページを作ります。

Next.jsのフォルダ構成
src
├── app
│   ├── page.tsx
│   └── blog
│       ├── page.tsx
│       └── [id]
│           └── page.tsx
├── components
│   ├── ArticleCard.tsx
│   └── ArticleList.tsx
└── libs
    └── microcms.ts
app ページを作る
components Reactの画面部品
libs API接続などの共通処理
Next.jsの担当

Next.jsは、microCMSからデータを取得し、 どのURLで、どのReactコンポーネントを表示するかをまとめます。

05

microCMSはコンテンツを管理する

microCMSは、 記事やお知らせなどの内容を管理するための ヘッドレスCMSです。

管理画面では、記事タイトルや本文、 画像、カテゴリなどを登録します。

microCMS 管理画面
タイトル ReactとNext.jsの違い
概要 初心者向けに役割の違いを解説します。
本文 ReactはUIを作るためのライブラリで……
カテゴリ Next.js入門

一般的なWordPressテーマのように、 microCMS自身がWebページのデザインを表示するわけではありません。

microCMSはコンテンツを保存し、 外部から要求されたときにAPIでデータを返します。

microCMSがすること
  • 記事を保存する
  • 画像を管理する
  • カテゴリを管理する
  • APIでデータを返す
microCMSが直接しないこと
  • サイト全体のHTMLを作る
  • Next.jsのページを作る
  • Reactコンポーネントを表示する
  • サイトのCSSを決める
06

APIはデータの受け渡し窓口

APIは、 異なるサービスやプログラム同士が 情報をやり取りするための窓口です。

今回の場合は、 Next.jsがmicroCMSへ記事データを要求し、 microCMSがJSON形式で記事を返します。

Next.js 記事一覧をください GET /api/v1/blogs
リクエスト
microCMS 記事データを返します { contents: [...] }
REQUEST リクエスト

Next.jsからmicroCMSへのお願い

RESPONSE レスポンス

microCMSからNext.jsへの返事

JSON データ形式

記事情報を構造化して渡す形式

APIはデータそのものではなく、 データを要求したり受け取ったりするための仕組みです。

APIの担当

APIは、microCMSの管理画面とNext.jsを直接合体させるものではありません。 決められた方法でデータを受け渡す橋のような役割です。

07

4つがつながる順番

ここまでの役割を、 一つの記事が表示される順番で整理します。

  1. 1
    microCMSに記事を登録する

    タイトル、本文、画像などを管理画面へ入力します。

  2. 2
    Next.jsがAPIを呼び出す

    microCMSへ記事データを要求します。

  3. 3
    microCMSがJSONを返す

    記事タイトルや本文がデータとして返ります。

  4. 4
    Next.jsがデータを受け取る

    APIのレスポンスをdataなどの変数へ入れます。

  5. 5
    Reactコンポーネントへ渡す

    Propsを使って記事カードや一覧へ渡します。

  6. 6
    ブラウザーへ画面を表示する

    Reactが見出しや文章の形に組み立てます。

microCMSが記事を保存し、APIが運び、Next.jsが受け取り、
Reactが画面として表示する、と考えると全体像が見えてきます。

08

コードでつながりを確認する

ここからは、実際のコードを3つに分けて確認します。

1.microCMSへ接続する処理

API libs/microcms.ts
import {
  createClient,
} from "microcms-js-sdk";

export type Article = {
  id: string;
  title: string;
  description: string;
};

const client = createClient({
  serviceDomain:
    process.env.MICROCMS_SERVICE_DOMAIN!,
  apiKey:
    process.env.MICROCMS_API_KEY!,
});

export const getArticles = async () => {
  return client.getList<Article>({
    endpoint: "blogs",
  });
};

このファイルでは、 microCMSへ接続するためのクライアントと、 記事一覧を取得する関数を作っています。

2.Next.jsのページでデータを取得する

Next.js app/blog/page.tsx
import ArticleList
  from "@/components/ArticleList";

import { getArticles }
  from "@/libs/microcms";

export default async function BlogPage() {
  const data = await getArticles();

  return (
    <main>
      <h1>ブログ記事一覧</h1>

      <ArticleList
        articles={data.contents}
      />
    </main>
  );
}

getArticles()を実行すると、 microCMSのAPIから記事一覧が返ります。

3.Reactコンポーネントで表示する

React components/ArticleList.tsx
import type {
  Article,
} from "@/libs/microcms";

type Props = {
  articles: Article[];
};

export default function ArticleList({
  articles,
}: Props) {
  return (
    <div>
      {articles.map((article) => (
        <article key={article.id}>
          <h2>{article.title}</h2>
          <p>{article.description}</p>
        </article>
      ))}
    </div>
  );
}
microCMS接続 getArticles()
Next.jsで取得 const data = await getArticles()
Propsで渡す articles={data.contents}
Reactで表示 articles.map(...)
09

APIから返るデータの中身

microCMSのリストAPIからは、 記事配列だけでなく、件数などの情報も返ります。

APIレスポンスのイメージ
{
  "contents": [
    {
      "id": "article01",
      "title": "Reactの基本",
      "description":
        "コンポーネントについて解説します"
    },
    {
      "id": "article02",
      "title": "Next.jsの基本",
      "description":
        "ルーティングについて解説します"
    }
  ],
  "totalCount": 2,
  "offset": 0,
  "limit": 10
}

このレスポンス全体が、 先ほどのコードではdataへ入っています。

data APIレスポンス全体
data.contents 記事データの配列
data.totalCount 記事の総件数
data.contents[0] 最初の記事

そのため、記事一覧をReactコンポーネントへ渡すときは、 data.contentsを使用しています。

10

取得したデータをPropsで渡す

Next.jsのページで取得した記事データは、 Propsを使ってReactコンポーネントへ渡せます。

<ArticleList articles={data.contents} />
Props名 articles
実際に渡す値 data.contents

子コンポーネントでは、 関数の引数としてarticlesを受け取ります。

Propsの受け取り
export default function ArticleList({
  articles,
}: Props) {
  return (
    <div>
      {articles.map((article) => (
        <p key={article.id}>
          {article.title}
        </p>
      ))}
    </div>
  );
}
Reactとの接点

Next.jsで取得したデータがReactへ自動的に移動するのではありません。 JSXでPropsとして明示的に渡しています。

11

ブラウザーへ表示されるまで

ユーザーがブログ一覧ページへアクセスすると、 内部では次のような流れが進みます。

1 ユーザーがアクセス /blog
2 Next.jsがページを実行 BlogPage()
3 microCMS APIを呼ぶ getArticles()
4 記事データを受け取る data.contents
5 Reactで画面を作る <ArticleList />
6 ブラウザーへ表示 <article>...</article>
https://example.com/blog

ブログ記事一覧

Reactの基本

コンポーネントについて解説します。

Next.jsの基本

ルーティングについて解説します。

12

microCMSの記事を更新するとどうなる?

microCMSの管理画面で記事タイトルを変更すると、 保存されているコンテンツデータが更新されます。

変更前 React入門
microCMSで編集 React初心者入門
サイト表示 React初心者入門

次にNext.jsがAPIからデータを取得したときは、 更新後の記事タイトルが返ります。

ただし、実際にいつサイトへ反映されるかは、 Next.js側のキャッシュや再検証の設定によって変わります。

覚えておきたいこと

microCMSで更新した内容をAPIが返し、 Next.jsが新しいデータを取得できたときに Reactの表示内容も新しくなります。

13

APIキーはどこに書く?

microCMSのAPIへ接続するには、 サービスドメインやAPIキーを使用します。

これらはコードへ直接書かず、 環境変数として管理します。

ENV .env.local
MICROCMS_SERVICE_DOMAIN=your-service
MICROCMS_API_KEY=your-api-key
環境変数を読み取る
const client = createClient({
  serviceDomain:
    process.env.MICROCMS_SERVICE_DOMAIN!,
  apiKey:
    process.env.MICROCMS_API_KEY!,
});
避けたい コードへ直接書く apiKey: "abc123..."
基本 環境変数から読む process.env.MICROCMS_API_KEY

また、秘密にする必要があるAPIキーには、 ブラウザーへ公開される環境変数用の接頭辞を付けません。

14

よくあるつまずき

CHECK 01 ReactとNext.jsを同じものだと思っている

ReactはUIを作るライブラリで、 Next.jsはReactを使ったWebサイト制作を支えるフレームワークです。

CHECK 02 microCMSがページを表示すると思っている

microCMSは記事を保存してAPIで返します。 実際の画面はNext.jsとReact側で作ります。

CHECK 03 APIをデータベースだと思っている

APIは保存場所ではなく、 保存されたデータを要求・取得するための窓口です。

CHECK 04 dataが自動的にReactへ届くと思っている

取得したデータは、 JSXでPropsとしてコンポーネントへ渡します。

<ArticleList
  articles={data.contents}
/>
CHECK 05 APIキーをブラウザー側で使用している

秘密にするAPIキーは、 Server Componentなどサーバー側の処理で使用します。

CHECK 06 APIレスポンス全体と記事配列を混同している

リストAPIでは、 記事配列は通常data.contentsに入ります。

CHECK 07 取得関数へawaitを付けていない

非同期の取得関数は、 awaitして結果を受け取ります。

const data = await getArticles();

動かないときは、microCMS、API、Next.js、Reactのどこまで
データが届いているかを順番に確認すると原因を探しやすくなります。

15

どこで問題が起きているか調べる方法

記事が表示されないときは、 処理を小さく分けて確認します。

1 microCMS

記事が公開されているか

2 API

レスポンスが返っているか

3 Next.js

dataを取得できているか

4 Props

子へ正しく渡しているか

5 React

正しいプロパティを表示しているか

取得直後のデータを確認
const data = await getArticles();

console.log(data);
console.log(data.contents);
console.log(data.totalCount);

最初から「すべてが壊れている」と考えず、 どの段階までは正常かを確認することが大切です。

16

まとめ:4つは役割分担してつながっている

React、Next.js、microCMS、APIは、 似たものが4つ並んでいるわけではありません。

それぞれが異なる役割を担当しながら、 一つのWebサイトを作っています。

今回覚えておきたいこと

  • Reactはコンポーネントを使って画面を作る
  • Next.jsはページ、ルーティング、データ取得をまとめる
  • microCMSは記事や画像などのコンテンツを管理する
  • APIはmicroCMSとNext.jsの間でデータを受け渡す
  • Next.jsはAPIから返ったJSONを受け取る
  • 取得結果はdataなどの変数へ入る
  • ReactコンポーネントへはPropsでデータを渡す
  • Reactが受け取ったデータを画面として表示する
保存 microCMS
受け渡し API
取得・構成 Next.js
画面表示 React

コードの中でdataがどこから来たのか分からなくなったときは、 microCMSからAPIを通り、Next.jsで取得され、 PropsとしてReactへ渡されたという順番を思い出します。

Next.js・microCMS初心者の学習記録 microCMSが保存し、APIが運び、
Next.jsが受け取り、Reactが画面にします。


AILPENGINE。自動進化型AI-LP。公開後も、成果に合わせて進化する! 行動計測、分析、構成改善、成果最大化。自前計測、CTA位置最適化、レポート可視化。LP改善を相談する(相談無料)。

日本ドラフトのAIチャットボットで問い合わせ対応を効率化・自動化!24時間365日対応、簡単設定、マルチプラットフォーム対応で人件費・工数を削減。今すぐ無料で相談する

※当社は、当サイトに掲載する情報について、正確性・完全性・有用性その他一切の事項を保証するものではありません。
また、当サイトの情報をご利用いただいたことにより生じた損害、ならびに当サイトからリンクまたはバナー等を通じて移動した外部サイトにおいて提供される情報・サービス等により生じた損害について、当社は一切の責任を負いかねます。