Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Pages Functions でフロントエンド向け API を作る

最終更新 Markdown で表示Agent セットアップ

このチュートリアルでは、フルスタックの Pages アプリケーションを作ります。アプリケーションには次が含まれます。

API ではなくヘッドレス CMS でブログ本文を描画したい場合は、ヘッドレス CMS チュートリアル を参照してください。

動画チュートリアル

1. フロントエンドを作る

まず、React フレームワークで新しい Pages アプリケーションを作成します。

新しい React プロジェクトを作成する

ターミナルで、create-vite コマンドを使い、blog-frontend という新しい React プロジェクトを作成します。作成した blog-frontend ディレクトリへ移動し、ローカル開発サーバーを起動します。

新しい React アプリケーションを作成するsh
npx create-vite -t react blog-frontend
cd blog-frontend
npm install
npm run dev

React プロジェクトをセットアップする

React プロジェクトをセットアップする手順は次のとおりです。

  1. blog-frontend ディレクトリのルートで React Router をインストールします。

npm i react-router-dom@6
s

  1. src/App.js の内容を空にします。次のコードをコピーして貼り付け、React Router を App.js へ取り込み、2 つのルートを持つ新しいルーターを設定します。
import { Routes, Route } from "react-router-dom";

import Posts from "./components/posts";
import Post from "./components/post";

function App() {
	return (
		<Routes>
			<Route path="/" element={<Posts />} />
			<Route path="/posts/:id" element={<Post />} />
		</Routes>
	);
}

export default App;
  1. src ディレクトリに、components という新しいフォルダーを作成します。
  2. components ディレクトリに、posts.jspost.js の 2 つのファイルを作成します。これらのファイルが、API からブログ投稿を読み込み、描画します。
  3. posts.js に次のコードを入れます。
import React, { useEffect, useState } from "react";
import { Link } from "react-router-dom";

const Posts = () => {
	const [posts, setPosts] = useState([]);

	useEffect(() => {
		const getPosts = async () => {
			const resp = await fetch("/api/posts");
			const postsResp = await resp.json();
			setPosts(postsResp);
		};

		getPosts();
	}, []);

	return (
		<div>
			<h1>Posts</h1>
			{posts.map((post) => (
				<div key={post.id}>
					<h2>
						<Link to={`/posts/${post.id}`}>{post.title}</Link>
					</h2>
				</div>
			))}
		</div>
	);
};

export default Posts;
  1. post.js に次のコードを入れます。
import React, { useEffect, useState } from "react";
import { Link, useParams } from "react-router-dom";

const Post = () => {
	const [post, setPost] = useState({});
	const { id } = useParams();

	useEffect(() => {
		const getPost = async () => {
			const resp = await fetch(`/api/post/${id}`);
			const postResp = await resp.json();
			setPost(postResp);
		};

		getPost();
	}, [id]);

	if (!Object.keys(post).length) return <div />;

	return (
		<div>
			<h1>{post.title}</h1>
			<p>{post.text}</p>
			<p>
				<em>Published {new Date(post.published_at).toLocaleString()}</em>
			</p>
			<p>
				<Link to="/">Go back</Link>
			</p>
		</div>
	);
};

export default Post;

2. API を作る

次に、ブログ本文を保存し、JSON API で取得する Pages Functions を作成します。

Pages Function を書く

JSON API として動く Pages Function を作成する手順は次のとおりです。

  1. blog-frontend ディレクトリに functions ディレクトリを作成します。
  2. functions に、api というディレクトリを作成します。
  3. api に、posts.js ファイルを作成します。
  4. posts.js に次のコードを入れます。
import posts from "./post/data";

export function onRequestGet() {
	return Response.json(posts);
}

このコードはブログデータ(ステップ 8 で作る data.js)を取得し、パス /api/posts から JSON レスポンスとして返します。

  1. api ディレクトリに、post というディレクトリを作成します。
  2. post ディレクトリに、data.js ファイルを作成します。
  3. data.js に次のコードを入れます。ブログ本文、ブログタイトル、その他のブログ情報がここに入ります。
const posts = [
	{
		id: 1,
		title: "My first blog post",
		text: "Hello world! This is my first blog post on my new Cloudflare Workers + Pages blog.",
		published_at: new Date("2020-10-23"),
	},
	{
		id: 2,
		title: "Updating my blog",
		text: "It's my second blog post! I'm still writing and publishing using Cloudflare Workers + Pages :)",
		published_at: new Date("2020-10-26"),
	},
];

export default posts;
  1. post ディレクトリに、[[id]].js ファイルを作成します。
  2. [[id]].js に次のコードを入れます。
[[id]].jsjs
import posts from "./data";

export function onRequestGet(context) {
	const id = context.params.id;

	if (!id) {
		return new Response("Not found", { status: 404 });
	}

	const post = posts.find((post) => post.id === Number(id));

	if (!post) {
		return new Response("Not found", { status: 404 });
	}

	return Response.json(post);
}

[[id]].js は、ブログ投稿の id を受け付ける 動的ルート です。

3. デプロイする

Pages アプリケーションと Pages Function を設定したら、Wrangler またはダッシュボードでプロジェクトをデプロイします。

Wrangler でデプロイする

blog-frontend ディレクトリで wrangler pages deploy を実行し、プロジェクトを Cloudflare ダッシュボードへデプロイします。

wrangler pages deploy blog-frontend

ダッシュボードからデプロイする

Cloudflare ダッシュボードからデプロイするには、Pages プロジェクト用の新しい Git リポジトリを作成し、その Git リポジトリを Cloudflare に接続します。このチュートリアルでは Git プロバイダーとして GitHub を使います。

新しいリポジトリを作成する

repo.new を開き、新しい GitHub リポジトリを作成します。リポジトリを作成したら、ターミナルで次のコマンドを実行し、ローカルのアプリケーションを GitHub へ準備してプッシュします。

git init
git remote add origin https://github.com/<YOUR-GH-USERNAME>/<REPOSITORY-NAME>
git add .
git commit -m "Initial commit"
git branch -M main
git push -u origin main

Cloudflare Pages でデプロイする

アプリケーションを Pages にデプロイする手順は次のとおりです。

  1. Cloudflare ダッシュボードで Workers & Pages ページを開きます。

    Workers & Pages を開く ↗
  2. Create application > Pages > Import an existing Git repository を選択します。

  3. 作成した新しい GitHub リポジトリを選択し、Set up builds and deployments セクションで次の情報を入力します。

設定項目
Production branch main
Build command npm run build
Build directory build

サイトの設定が終わったら、最初のデプロイを開始します。Cloudflare Pages が blog-frontend、プロジェクトの依存関係をインストールし、サイトをビルドする様子が表示されます。

このチュートリアルを完了すると、フルスタックの Pages アプリケーションができています。

関連リソース

役に立ちましたか?