Claude Code + React / Hono のフルスタック Micro アプリケーション
npm workspaces によるモノレポ構成。フロントエンド(React)とバックエンド(Hono + MySQL)で構成されます。
Dev Container(Docker Compose)での起動を推奨します。VS Code の「Reopen in Container」で起動すると、MySQL・Mailhog を含む開発環境が自動的にセットアップされます。
コンテナ起動後、以下の手順を順番に実行してください。
npm installDrizzle のマイグレーションを適用してテーブルを作成します。
npm run db:migrate -w backendユーザー 50 件・お知らせ 15 件・成績 3,000 件のサンプルデータを投入します。
npm run db:seed -w backendフロントエンドとバックエンドをそれぞれ別ターミナルで起動します。
# バックエンド(http://localhost:3000)
npm run dev:backend
# フロントエンド(http://localhost:5173)
npm run devブラウザで http://localhost:5173 を開き、以下のアカウントでログインします。
| メールアドレス | パスワード | ロール |
|---|---|---|
admin@example.com |
password123 |
管理者 |
taro.yamada@example.com |
password123 |
メンバー |
シードで作成したすべてのユーザーのパスワードは
password123です。
ログイン後、「パスワード変更」から変更できます。
# バックエンド(http://localhost:3000)
npm run dev:backend
# フロントエンド(http://localhost:5173)
npm run dev| コマンド | 説明 |
|---|---|
npm run dev |
フロントエンド開発サーバを起動 |
npm run dev:backend |
バックエンド開発サーバを起動 |
npm run build |
フロントエンド + バックエンドを本番ビルド |
npm run lint |
フロントエンド ESLint を実行 |
npm run preview |
フロントエンドビルド成果物のローカルプレビュー |
npm test -w frontend |
フロントエンドのユニットテストを実行(Jest) |
npm run db:migrate -w backend |
DB マイグレーションを適用 |
npm run db:seed -w backend |
サンプルデータを投入 |
npm run db:generate -w backend |
スキーマ変更からマイグレーションファイルを生成 |
npm run db:studio -w backend |
Drizzle Studio(DB GUI)を起動 |
バックエンド起動後、以下の URL で Swagger UI を確認できます。
| URL | 内容 |
|---|---|
| http://localhost:3000/docs | Swagger UI |
| http://localhost:3000/openapi.json | OpenAPI スペック(JSON) |
「Authorize」ボタンに /api/auth/login で取得した JWT を入力することで、認証が必要なエンドポイントも試せます。
開発環境ではメール送信に Mailhog を使用します。パスワードリセットメールなど、アプリが送信したメールは以下の URL で確認できます。
| URL | 内容 |
|---|---|
| http://localhost:8025 | Mailhog Web UI |
Claude Code スキルを使った設計 → 実装のフローです。
/design-doc 要件をヒアリングしながら設計書(docs/)を対話的に作成
↓
/implement-design docs/ の設計書を読み込んで backend + frontend を実装
| スキル | 起動ワード例 | 説明 |
|---|---|---|
/design-doc |
「〇〇の設計書を作成して」 | 機能設計書・画面設計書・API設計書・DB設計書を順番に作成 |
/implement-design |
「〇〇の設計書を実装して」 | docs/ の設計書を読み込んで backend + frontend を実装 |
/add-feature |
「〇〇機能を追加して」 | 設計書なしで CRUD 機能を一式追加(ヒアリングベース) |
claude-micro-app/
├── package.json # npm workspaces の定義
├── docs/ # 設計書(features / screens / api / database)
├── frontend/ # React アプリ(Vite + React 18 + TypeScript)
└── backend/ # Hono API サーバ(Node.js + TypeScript)
features-based(機能スライス型) アーキテクチャを採用。1機能 = 1フォルダで凝集度を高く保ちます。
frontend/src/
├── app/ # ルーター・ナビゲーション設定
├── features/ # 機能スライス(機能ごとに components / hooks / index.ts)
├── shared/ # 機能横断の共通部品
├── index.css
└── main.tsx # エントリ + ErrorBoundary
features-based で統一。各機能が routes / service / repository の 3 層で構成されます。
backend/src/
├── features/ # 機能スライス(routes / service / repository)
│ ├── auth/ # 認証・パスワード変更・パスワードリセット
│ ├── users/ # ユーザー管理(管理者専用)
│ ├── grades/ # 成績管理
│ ├── announcements/ # お知らせ管理
│ └── batches/ # バッチジョブ管理(管理者専用)
├── db/ # Drizzle ORM スキーマ・接続設定
├── shared/ # 共通ミドルウェア・エラー・型定義
├── lib/ # JWT・パスワードユーティリティ
├── app.ts # Hono アプリ生成・ルーティング登録
└── index.ts # サーバ起動エントリ
| 項目 | フロントエンド | バックエンド |
|---|---|---|
| 言語 | TypeScript | TypeScript |
| フレームワーク | React 18 | Hono |
| ビルド | Vite | tsc |
| DB | — | MySQL 8.0 + Drizzle ORM |
| 認証 | — | JWT(Bearer トークン) |
| バリデーション | — | Zod |
| API ドキュメント | — | Swagger UI(@hono/zod-openapi) |
ログイン
POST /api/auth/loginでメールアドレスとパスワードを送信して JWT を取得- 以降のリクエストは
Authorization: Bearer <token>ヘッダで認証 - 管理者専用エンドポイントはさらに
role: adminを検証
パスワードリセット
POST /api/auth/reset-password/requestにメールアドレスを送信(未登録でも同じ 200 を返す)- 登録済みの場合、1 時間有効なリセットリンクをメール送信
- リンクから遷移した画面で
POST /api/auth/reset-password/confirmに新パスワードを送信