TanStack Start: Next.jsの代替となる次世代フルスタックフレームワーク 🚀
Next.jsのuse client/use serverディレクティブと絶えず変化するキャッシュ方式に疲れていませんか?TanStack StartはViteベースの新しいフルスタックメタフレームワークで、より直感的で柔軟な開発体験を提供します。この記事では、実際のTodoリストアプリケーションを構築しながら、TanStack Startのすべてのコア機能を60分でマスターできるように解説します。

TanStack Startプロジェクトの作成
TanStack Startプロジェクトを始める最も簡単な方法は、CLIツールを使用することです。
npm create @tanstack/start@latest
プロジェクト設定オプション
- Tailwind CSS: スタイリングのためのユーティリティCSSフレームワーク
- ESLint: コード品質管理のためのリンター
- Drizzle: タイプセーフなデータベースORM
- Shadcn: 再利用可能なUIコンポーネントライブラリ
- Postgres: リレーショナルデータベース
💡 TanStack StartはVite上で動作し、
routeTree.gen.tsファイルを自動生成して、アプリケーション全体で完全な型安全性を提供します。

核心概念: サーバー関数 (Server Functions) 🎯
TanStack Startの最大の特徴はサーバー関数です。Next.jsのサーバーアクションと似ていますが、データ取得(GET)と更新(POST)の両方に使用できる点が異なります。
サーバー関数の種類比較
| 関数タイプ | 実行場所 | 主な用途 |
|---|---|---|
createServerFunction | サーバー & クライアント | データ取得/更新 (最も頻繁に使用) |
createServerOnlyFn | サーバーのみ | 機密データ処理、DB直接アクセス |
createClientOnlyFn | クライアントのみ | ローカルストレージ、ブラウザAPI使用 |
createIsomorphicFn | サーバー/クライアント分岐 | プラットフォーム別ロジック実装 |
サーバー関数の例 (データ取得)
const getTodos = createServerFunction({
method: 'GET',
handler: async () => {
return await db.query.todos.findMany();
}
});
サーバー関数の例 (データ作成)
const addTodo = createServerFunction({
method: 'POST',
inputValidator: z.object({
name: z.string().min(1)
}),
handler: async ({ data }) => {
await db.insert(todos).values({ name: data.name, isComplete: false });
throw redirect({ to: '/' });
}
});
🔑 クライアントからサーバー関数を呼び出す際は、
useServerFunctionフックでラップする必要があります。これによりリダイレクトとエラーハンドリングが正常に動作します。

TanStack Start vs Next.js: 主な違い
TanStack StartはNext.jsとは異なり、use client/use serverディレクティブが不要です。すべてのコンポーネントはデフォルトでサーバーとクライアントの両方で実行され、開発者が明示的に実行場所を制御します。
主な利点
- 直感的なデータフロー: サーバー関数による明確なクライアント-サーバー通信
- 完全な型安全性: 自動生成されたルートツリーによるエンドポイントとパラメーターの型保証
- 柔軟なレンダリング:
ClientOnlyコンポーネントによるクライアント専用レンダリング - Viteベース: 高速なHMR(Hot Module Replacement)とビルド速度
始め方
TanStack Startはまだ初期段階ですが、その可能性は非常に大きいです。Next.jsの複雑さに疲れた開発者は、今すぐ試してみてください。
📅 情報基準日: 2024-05-24
あわせて読みたい記事:
