このチュートリアルでは、フルスタックの Pages アプリケーションを作ります。アプリケーションには次が含まれます。
- Cloudflare Pages と React フレームワーク で作るフロントエンド。
- Pages Functions で作る JSON API。フロントエンドで取得して描画できるブログ投稿を返します。
API ではなくヘッドレス CMS でブログ本文を描画したい場合は、ヘッドレス CMS チュートリアル を参照してください。
まず、React フレームワークで新しい Pages アプリケーションを作成します。
ターミナルで、create-vite コマンドを使い、blog-frontend という新しい React プロジェクトを作成します。作成した blog-frontend ディレクトリへ移動し、ローカル開発サーバーを起動します。
npx create-vite -t react blog-frontend
cd blog-frontend
npm install
npm run devReact プロジェクトをセットアップする手順は次のとおりです。
blog-frontendディレクトリのルートで React Router ↗ をインストールします。
npm i react-router-dom@6yarn add react-router-dom@6pnpm add react-router-dom@6bun add react-router-dom@6src/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;srcディレクトリに、componentsという新しいフォルダーを作成します。componentsディレクトリに、posts.jsとpost.jsの 2 つのファイルを作成します。これらのファイルが、API からブログ投稿を読み込み、描画します。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;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;次に、ブログ本文を保存し、JSON API で取得する Pages Functions を作成します。
JSON API として動く Pages Function を作成する手順は次のとおりです。
blog-frontendディレクトリにfunctionsディレクトリを作成します。functionsに、apiというディレクトリを作成します。apiに、posts.jsファイルを作成します。posts.jsに次のコードを入れます。
import posts from "./post/data";
export function onRequestGet() {
return Response.json(posts);
}このコードはブログデータ(ステップ 8 で作る data.js)を取得し、パス /api/posts から JSON レスポンスとして返します。
apiディレクトリに、postというディレクトリを作成します。postディレクトリに、data.jsファイルを作成します。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;postディレクトリに、[[id]].jsファイルを作成します。[[id]].jsに次のコードを入れます。
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 を受け付ける 動的ルート です。
Pages アプリケーションと Pages Function を設定したら、Wrangler またはダッシュボードでプロジェクトをデプロイします。
blog-frontend ディレクトリで wrangler pages deploy を実行し、プロジェクトを Cloudflare ダッシュボードへデプロイします。
wrangler pages deploy blog-frontendCloudflare ダッシュボードからデプロイするには、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アプリケーションを Pages にデプロイする手順は次のとおりです。
-
Cloudflare ダッシュボードで Workers & Pages ページを開きます。
Workers & Pages を開く ↗ -
Create application > Pages > Import an existing Git repository を選択します。
-
作成した新しい GitHub リポジトリを選択し、Set up builds and deployments セクションで次の情報を入力します。
| 設定項目 | 値 |
|---|---|
| Production branch | main |
| Build command | npm run build |
| Build directory | build |
サイトの設定が終わったら、最初のデプロイを開始します。Cloudflare Pages が blog-frontend、プロジェクトの依存関係をインストールし、サイトをビルドする様子が表示されます。
このチュートリアルを完了すると、フルスタックの Pages アプリケーションができています。