tanstack-router について
TanStack RouterとTypeScriptでReact SPAを構築する開発者向けのリファレンススキルです。ファイルベースのルーティング、型安全なナビゲーション、ルートデータの取得、Cloudflare Workersへのデプロイを扱います。
主な機能
- 01型安全なナビゲーションのパターン
- 02ファイルベースのルート設定
- 03データ取得用ルートローダー
- 04TanStack Queryとの連携
- 05Cloudflare Workersのデプロイガイド
- 06テンプレートとトラブルシューティング資料
活用シーン
- 01React SPAでファイルベースルーティングを設定
- 02型付きパラメーターでルートデータを取得
- 03ルートローダーとTanStack Queryを連携
- 04Cloudflare Workers向けにプロジェクトを設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ secondsky/ claude-skills --skill tanstack-routerインストール後、Claude Code で/tanstack-routerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/common-errors.mdtemplates/package.jsonroute-examples.tsxvite.config.ts詳細
TanStack Router スキル
TanStack Router を使用して、Cloudflare Workers へのデプロイに最適化された、型安全なファイルベースルーティングを React SPA に構築します。
このスキルを使用するタイミング
次の内容に言及すると自動的に起動します:
- 「TanStack Router」または「型安全なルーティング」
- 「ファイルベースルーティング」または「ルート設定」
- TypeScript を重視した「React のルーティング」
- 「ルートローダー」または「ルートでのデータ読み込み」
- 「Cloudflare Workers のルーティング」
次の用途でこのスキルを使用します:
- 型安全なナビゲーションを備えた SPA の構築
- ファイルベースルーティング(Next.js のようなもの)の実装
- ルート単位のデータ読み込みが必要な場合
- ルーティングと TanStack Query の統合
- Cloudflare Workers へのデプロイ
- React Router より優れた TypeScript サポートが必要な場合
クイックスタート
インストール
bun add @tanstack/react-router @tanstack/router-devtools
bun add -d @tanstack/router-plugin
最新バージョン: v1.170.18(2026-08-03 に確認済み)
Vite の設定
// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { TanStackRouterVite } from '@tanstack/router-plugin/vite'
export default defineConfig({
plugins: [
TanStackRouterVite(), // MUST come before react()
react(),
],
})
基本設定
// src/routes/__root.tsx
import { createRootRoute, Outlet } from '@tanstack/react-router'
export const Route = createRootRoute({
component: () => (
<div>
<nav>
<Link to="/">Home</Link>
<Link to="/about">About</Link>
</nav>
<hr />
<Outlet />
</div>
),
})
// src/routes/index.tsx
import { createFileRoute } from '@tanstack/react-router'
export const Route = createFileRoute('/')({
component: () => <h1>Home Page</h1>,
})
// src/routes/about.tsx
import { createFileRoute } from '@tanstack/react-router'
export const Route = createFileRoute('/about')({
component: () => <h1>About Page</h1>,
})
// src/main.tsx
import { createRouter, RouterProvider } from '@tanstack/react-router'
import { routeTree } from './routeTree.gen' // Auto-generated
const router = createRouter({ routeTree })
function App() {
return <RouterProvider router={router} />
}
主な機能
1. 型安全なナビゲーション
// Fully typed!
<Link to="/posts/$postId" params={{ postId: '123' }} />
// TypeScript error if route doesn't exist
<Link to="/invalid-route" /> // ❌ Error!
2. ルートローダー(データ取得)
// src/routes/posts.$postId.tsx
export const Route = createFileRoute('/posts/$postId')({
loader: async ({ params }) => {
const post = await fetchPost(params.postId) // Fully typed!
return { post }
},
component: ({ useLoaderData }) => {
const { post } = useLoaderData()
return <h1>{post.title}</h1>
},
})
3. TanStack Query との統合
import { queryOptions } from '@tanstack/react-query'
const postQueryOptions = (postId: string) =>
queryOptions({
queryKey: ['posts', postId],
queryFn: () => fetchPost(postId),
})
export const Route = createFileRoute('/posts/$postId')({
loader: ({ context: { queryClient }, params }) =>
queryClient.ensureQueryData(postQueryOptions(params.postId)),
component: () => {
const { postId } = Route.useParams()
const { data: post } = useQuery(postQueryOptions(postId))
return <h1>{post.title}</h1>
},
})
よくあるエラーと解決策
エラー 1:Devtools の依存関係の解決
問題: @tanstack/router-devtools-core が見つからず、ビルドに失敗します。
解決策:
bun add @tanstack/router-devtools
エラー 2:Vite プラグインの順序
問題: ルートが自動生成されません。
解決策: TanStackRouterVite は react() より前に配置する必要があります:
plugins: [
TanStackRouterVite(), // First!
react(),
]
エラー 3:型登録の不足
問題: Link to に型が付与されません。
解決策:
// src/routeTree.gen.ts is auto-generated
// Import it in main.tsx to register types
import { routeTree } from './routeTree.gen'
エラー 4:ローダーが実行されない
問題: ナビゲーション時にローダー関数が呼び出されません。
解決策: ルートが Route をエクスポートしていることを確認します:
export const Route = createFileRoute('/path')({ loader: ... })
エラー 5:フォームによるメモリリーク
問題: TanStack Form と Router を使用すると、本番環境でクラッシュします。
解決策: 既知の問題です(#5734)。回避策として、代わりに React Hook Form を使用するか、修正をお待ちください。
Cloudflare Workers へのデプロイ
Vite の設定
import { defineConfig } from 'vite'
import { TanStackRouterVite } from '@tanstack/router-plugin/vite'
import { cloudflare } from '@cloudflare/vite-plugin'
export default defineConfig({
plugins: [
TanStackRouterVite(),
react(),
cloudflare(),
],
})
API バックエンドのパターン
// functions/api/posts.ts
export async function onRequestGet({ env }) {
const { results } = await env.DB.prepare('SELECT * FROM posts').all()
return Response.json(results)
}
// Client-side route
export const Route = createFileRoute('/posts')({
loader: async () => {
const posts = await fetch('/api/posts').then(r => r.json())
return { posts }
},
})
テンプレート
すべてのテンプレートは ~/.claude/skills/tanstack-router/templates/ にあります:
- package.json - 依存関係とバージョン
- vite.config.ts - Vite プラグインの設定
- basic-routes/ - ファイルベースルーティングの構成
- route-with-loader.tsx - データ読み込みの例
- query-integration.tsx - TanStack Query のパターン
- nested-routes/ - レイアウトのパターン
- cloudflare-deployment.md - Workers のセットアップガイド
リファレンスドキュメント
詳細なガイドは ~/.claude/skills/tanstack-router/references/ にあります:
- file-based-routing.md - ルート構成の規約
- type-safety.md - TypeScript のパターン
- data-loading.md - ローダーと TanStack Query
- cloudflare-workers.md - デプロイガイド
- common-errors.md - 解決策付きの 7 件以上のエラー
- migration-guide.md - React Router からの移行
既存のスキルとの統合
次のスキルと連携します:
- tanstack-query - データ取得に推奨
- tanstack-table - ルートのデータを表示
- cloudflare-worker-base - API バックエンド
- tailwind-v4-shadcn - UI のスタイリング
トークン効率
スキルなし: 約 10k トークン、40~50 分、3~4 件のエラー
スキルあり: 約 4k トークン、15~20 分、エラー 0 件
削減量: トークン 60%、時間 65%
本番環境での検証
次の環境でテスト済み:
- React 19.2、Vite 7.3、TypeScript 5.9
- Cloudflare Workers(Wrangler 4.0)
- TanStack Query v5.101.4
スタックの互換性:
- ✅ Cloudflare Workers + Static Assets
- ✅ TanStack Query との統合
- ✅ TypeScript の strict モード
最終更新日: 2026-08-03 ライブラリのバージョン: @tanstack/react-router v1.170.18