実践練習: ブログサイトの構築
このセクションでは、Remix を使用して簡単なブログプラットフォームを構築するプロジェクトを通じて、これまで学んだ内容の実践的な適用を示します。このプロジェクトは、ルーティング、データの取得、フォームの処理、スタイリング、そして状態管理を含みます。
プロジェクト概要
- 目的: 簡単なブログプラットフォームを構築し、記事の表示、新規作成、編集ができるようにします。
- 機能:
- 記事の一覧表示
- 記事の詳細表示
- 新規記事の投稿
- 記事の編集(オプション)
ステップ 1: プロジェクトのセットアップ
- まず、新しい Remix プロジェクトを作成します。
npx create-remix@latest my-blog
cd my-blog
npm install
ステップ 2: ルーティングとページの作成
app/routes/index.jsx
を編集して、ブログのホームページを作成します。
import { Link } from 'remix';
export default function Index() {
return (
<div>
<h1>ブログホームページ</h1>
<nav>
<Link to='/posts'>記事一覧</Link>
</nav>
</div>
);
}
app/routes/posts/index.jsx
で、記事の一覧を表示するページを作成します。
ステップ 3: データの取得と表示
loader
関数を使用して、記事データを取得し、一覧で表示します。
import { json, Link } from 'remix';
// 仮のデータ
const posts = [
{ id: 1, title: 'Remix入門', content: 'Remixは素晴らしい!' },
// 他の記事...
];
export const loader = () => {
return json({ posts });
};
export default function Posts() {
const { posts } = useLoaderData();
return (
<div>
<h1>記事一覧</h1>
<ul>
{posts.map((post) => (
<li key={post.id}>
<Link to={`/posts/${post.id}`}>{post.title}</Link>
</li>
))}
</ul>
</div>
);
}
ステップ 4: 新規記事の投稿
- フォームを使用して新規記事を投稿できるようにします。
action
関数を使ってフォームデータを処理します。
// app/routes/posts/new.jsx
import { redirect, Form } from 'remix';
export const action = async ({ request }) => {
// フォームデータの処理をシミュレーション
return redirect('/posts');
};
export default function NewPost() {
return (
<Form method='post'>
<div>
<label htmlFor='title'>タイトル:</label>
<input type='text' id='title' name='title' />
</div>
<div>
<label htmlFor='content'>内容:</label>
<textarea id='content' name='content' />
</div>
<button type='submit'>投稿</button>
</Form>
);
}
ステップ 5: スタイリングと最終調整
- CSS モジュールや Tailwind CSS を使用して、アプリケーションにスタイルを適用します。
ステップ 6: デプロイメント
- 前のセクションで説明した方法を使用して、アプリケーションを Verc
el や Netlify にデプロイします。
演習
- 演習 1: 記事の編集機能を追加します。
app/routes/posts/$postId/edit.jsx
にルートとページを作成し、記事を編集できるフォームを実装してください。 - 演習 2: 記事を保存するための実際のバックエンドサービス(例: Firebase, Supabase)を統合します。
loader
とaction
関数で API 呼び出しを行い、記事データの取得と更新を実現してください。