このプロジェクトは、HonoバックエンドとNext.jsフロントエンドを使用したモダンなTODOアプリケーションのサンプルです。
- 🔐 Clerk認証システム - セキュアなユーザー認証
- 📋 Kanbanボード - ドラッグ&ドロップ対応のタスク管理
- 🎨 モダンUI - Shadcn/ui + Tailwind CSS
- 📚 Storybook - コンポーネントライブラリ
- 🔄 リアルタイム更新 - サーバーアクション使用
- 🎯 TypeScript - 完全型安全
- フロントエンド: Next.js 15 + React 19 (ポート3000)
- バックエンド: Hono API (統合)
- データベース: PostgreSQL (ポート5432)
- 認証: Clerk
- ORM: Prisma
- UI: Shadcn/ui + Tailwind CSS
- 開発: mise, Docker Compose, Storybook
- Node.js 22.10.0 (mise が自動管理)
- Docker & Docker Compose
- mise (タスクランナー)
- Clerk アカウント (認証用)
# 全ての依存関係をインストール
mise run install
Clerkの設定を行います:
# frontend/.env.local ファイルを作成
cp frontend/.env.local.example frontend/.env.local
frontend/.env.local
に以下を設定:
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
CLERK_SECRET_KEY=your_clerk_secret_key
# データベース起動 + Prismaクライアント生成 + マイグレーション実行
mise run dev_setup
# サンプルデータを投入
mise run db_seed
# フロントエンド開発サーバー (バックエンドAPIも含む)
mise run dev_frontend
以下のコマンドを別々のターミナルで実行できます:
# ターミナル1: フロントエンドサーバー
mise run dev_frontend
# ターミナル2: Storybookコンポーネント開発
mise run storybook
# ターミナル3: データベース管理UI
mise run db_studio
# ターミナル4: pgweb (データベースWebUI)
docker compose up pgweb
- アプリケーション: http://localhost:3000
- Storybook: http://localhost:6006
- Prisma Studio: http://localhost:5555
- pgweb: http://localhost:8081
# Storybook開発サーバー起動
mise run storybook
# Storybookビルド
mise run build_storybook
- Button
- Input
- その他のShadcn/uiコンポーネント
- すべてのAPIエンドポイントはClerk認証が必要
GET /api/todos
- ユーザーのTODO一覧取得POST /api/todos
- TODO作成PUT /api/todos/:id
- TODO更新DELETE /api/todos/:id
- TODO削除
GET /api/users
- ユーザー情報取得POST /api/users
- ユーザー作成
GET /api/auth/me
- 現在のユーザー情報取得
# 認証ヘッダー付きTODO取得
curl -H "Authorization: Bearer YOUR_CLERK_TOKEN" \
http://localhost:3000/api/todos
# TODO作成
curl -X POST http://localhost:3000/api/todos \
-H "Authorization: Bearer YOUR_CLERK_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"新しいTODO","description":"説明","status":"TODO"}'
mise run dev_frontend
- フロントエンド開発サーバー起動mise run dev_setup
- 開発環境セットアップmise run storybook
- Storybook開発サーバー起動
mise run db_setup
- PostgreSQLをDocker Composeで起動mise run db_migrate
- マイグレーション実行mise run db_generate
- Prismaクライアント生成mise run db_reset
- データベースリセットmise run db_seed
- シードデータ投入mise run db_studio
- Prisma Studio起動
mise run build_prisma
- Prismaパッケージビルドmise run build_backend
- バックエンドパッケージビルドmise run build_frontend
- フロントエンドビルドmise run build_storybook
- Storybookビルド
mise run install
- 全依存関係インストール
todo-sample-app/
├── frontend/ # Next.js フロントエンド
│ ├── src/
│ │ ├── app/ # App Router
│ │ │ ├── (authorized)/ # 認証が必要なページ
│ │ │ │ └── dashboard/ # メインダッシュボード
│ │ │ ├── api/ # API Routes (Honoと統合)
│ │ │ ├── sign-in/ # Clerk サインイン
│ │ │ └── sign-up/ # Clerk サインアップ
│ │ └── components/
│ │ └── kanban/ # Kanbanボードコンポーネント
│ └── package.json
├── backend/ # Hono APIルート
│ ├── src/
│ │ ├── routes/ # API ルート定義
│ │ └── app.ts # Hono アプリケーション
│ └── package.json
├── packages/
│ ├── prisma/ # データベース設定
│ │ ├── schema.prisma # スキーマ定義
│ │ └── seed.ts # シードデータ
│ └── components/ # 共有UIコンポーネント
│ ├── src/
│ │ └── components/
│ │ └── ui/ # Shadcn/ui コンポーネント
│ └── package.json
├── compose.yml # Docker Compose設定
└── mise.toml # タスク定義
model User {
id String @id @default(cuid())
email String @unique
emailVerified Boolean @default(false)
name String
image String?
todos Todo[]
}
model Todo {
id String @id @default(cuid())
title String
description String?
completed Boolean @default(false)
status TodoStatus @default(TODO) // TODO, IN_PROGRESS, DONE
userId String
user User @relation(fields: [userId], references: [id])
}
- TODO: 未着手
- IN_PROGRESS: 進行中
- DONE: 完了
# ポート使用確認
lsof -i :3000 # フロントエンド
lsof -i :5432 # PostgreSQL
lsof -i :6006 # Storybook
lsof -i :8081 # pgweb
# プロセス終了
kill -9 <PID>
# データベース再起動
docker compose down
mise run db_setup
- Clerk Dashboardで設定を確認
- 環境変数が正しく設定されているか確認
- ドメイン設定を確認
# クライアント再生成
mise run db_generate
mise run build_prisma
- Next.js 15 - フルスタックReactフレームワーク
- React 19 - UIライブラリ
- TypeScript - 型安全性
- Tailwind CSS - ユーティリティファーストCSS
- Shadcn/ui - UIコンポーネントライブラリ
- @dnd-kit - ドラッグ&ドロップ機能
- Clerk - 認証・ユーザー管理
- Hono - 高速・軽量Webフレームワーク
- Zod - バリデーション
- Clerk - 認証ミドルウェア
- PostgreSQL - リレーショナルデータベース
- Prisma - 次世代ORM
- mise - タスクランナー・バージョン管理
- Docker Compose - コンテナオーケストレーション
- Storybook - コンポーネント開発環境
- Biome - リンター・フォーマッター
- pgweb - データベースWeb管理ツール
- ✅ Clerk認証システム
- ✅ ユーザー登録・ログイン
- ✅ Kanbanスタイルのタスク管理
- ✅ ドラッグ&ドロップによるステータス変更
- ✅ TODO CRUD操作
- ✅ リアルタイム更新(サーバーアクション)
- ✅ レスポンシブUI
- ✅ エラーハンドリング
- ✅ 型安全なAPI
- ✅ 共有UIコンポーネント
- ✅ Storybook統合
- フロントエンドのNext.jsアプリケーション内でHono APIが統合されています
- すべてのAPI操作にはClerk認証が必要です
- ドラッグ&ドロップでTODOのステータスを変更できます
- サーバーアクションを使用してリアルタイムでUIが更新されます
- TypeScriptの厳格な型チェックが有効になっています