mcpField
R
react-tanstack-router

react-tanstack-router

github.com/fusengine開発3440 回インストール2 週間前に更新
リポジトリ

react-tanstack-router について

Reactのシングルページアプリ向けに、ファイルベースの型安全なルーティングとTanStack Queryによるデータ取得を扱うTanStack Routerスキルです。検索パラメーターの検証、ネストしたレイアウト、保護ルート、React Routerからの移行を説明し、Next.jsは対象外です。

主な機能

  1. 01ファイルベースの型安全なルーティング
  2. 02ZodとValibotによる検索パラメーター検証
  3. 03TanStack Query連携ローダー
  4. 04ネストしたレイアウトとルートコンテキスト
  5. 05保護ルートとプリロード
  6. 06React Routerからの移行ガイド

活用シーン

  1. 01React SPAのルート構成
  2. 02URLフィルターとページネーションの検証
  3. 03TanStack Queryによるルートデータ取得
  4. 04認証ルートとダッシュボードレイアウトの追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/fusengine/agents --skill react-tanstack-router

インストール後、Claude Code で/react-tanstack-routerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
auth-guards.md
code-splitting.md
components.md
devtools.md
error-handling.md
file-based-routing.md
hooks.md
installation.md
loaders.md
navigation.md
nested-routes.md
preloading.md
route-context.md
route-params.md
search-params.md
ssr.md
tanstack-query.md
typescript.md
references/templates/
auth-protected-routes.md
basic-setup.md
dashboard-layout.md
feature-module.md
search-filters.md

詳細

React SPA(Vite/Webpack/Rspack、Next.js ではない)向けに TanStack Router を実装します。自動生成される型安全性を備えたファイルベースルーティング、動的ルートパラメータ(`$postId`)、Zod/Valibot による search-params バリデーション、TanStack Query(`ensureQueryData`)と統合されたローダー(`Route.useLoaderData()`)、`Outlet` を用いたネストされたレイアウト、依存性注入のためのルートコンテキスト、`beforeLoad` ガードによる保護されたルート、intent/render 時のプリロードを扱います。

SOLID に基づくモジュール構成全体(modules/cores/lib/router/、interfaces//queries//components/ を備えた機能モジュール)、React Router からの移行(useParams()→Route.useParams()、loader→loader オプション)、エラーバウンダリ/404 処理をカバーします。状態管理(react-state)やフォーム(react-forms)はカバーしません — これらは別のスキルです。Next.js のルーティングには App Router(nextjs-16)を使用してください。このスキルではありません。

TanStack Router

ファイルベースルーティング、ローダー、search params バリデーション、TanStack Query との深い統合を備えた、React 向けの 100% 型安全なルーターです。

エージェントワークフロー(必須)

実装の前に、必ず 3 つのエージェントを並列で起動してください。それぞれ name を指定した Agent 呼び出し 1 回ずつです。

  1. fuse-ai-pilot:explore-codebase - 既存のルートとナビゲーションパターンを分析する
  2. fuse-ai-pilot:research-expert - Context7/Exa 経由で最新の TanStack Router ドキュメントを検証する
  3. mcp__context7__query-docs - ファイルベースルーティングと型安全なパターンを確認する

実装後は、検証のために fuse-ai-pilot:sniper を実行してください。


概要

なぜ TanStack Router なのか?

TanStack Router は、search params バリデーションを伴う型安全なルーティングを必要とする React SPA に推奨される選択肢です。

機能TanStack RouterReact Router v7
型安全性完全な推論自動生成
ファイルベースルーティング組み込みフレームワークモード
Search Params バリデーションZod、Valibot手動
プリロードIntent、render限定的
TanStack Query 統合ネイティブ手動
使用する場面
  • Vite、Webpack、または Rspack を使った React SPA → installation.md を参照
  • 型安全なルーティングが必要 → typescript.md を参照
  • Search params バリデーションが必要 → search-params.md を参照
  • データ取得に TanStack Query を使用 → tanstack-query.md を参照
  • Next.js ではない(代わりに App Router を使用)

重要なルール

  1. 常にファイルベースルーティングを使用する - 自動生成される型安全性 → file-based-routing.md
  2. 常に search params をバリデーションする - Zod v4 スキーマを validateSearch に直接渡す(zodValidator は Zod v3 のみ) → search-params.md
  3. 常に Route.useLoaderData() を使用する - グローバルの useLoaderData ではなく → hooks.md
  4. 常にルーターの型を登録する - declare module '@tanstack/react-router' → typescript.md
  5. useEffect よりもローダーを優先する - レンダリング前のデータ取得 → loaders.md
  6. TanStack Query を統合する - キャッシュ、ミューテーション、楽観的更新のために → tanstack-query.md
  7. SOLID アーキテクチャに従う - モジュール、インターフェース、ファイルサイズ制限 → solid-react skill

クイックリファレンス: 何を読むべきか

新しいプロジェクトを始める
  1. 設定のために installation.md を読む
  2. ベースとしてテンプレート basic-setup.md をコピーする
機能モジュール(posts、users など)を作成する
  1. templates/feature-module.md のアーキテクチャに従う
  2. クエリには tanstack-query.md のパターンを使用する
認証を実装する
  1. 概念については auth-guards.md を読む
  2. テンプレート auth-protected-routes.md をコピーする
フィルター/検索付きページの作成
  1. Zod バリデーションについて search-params.md を読む
  2. テンプレート search-filters.md をコピーする
ネストされたレイアウトを持つダッシュボードの作成
  1. 概念について nested-routes.md を読む
  2. テンプレート dashboard-layout.md をコピーする

プロジェクト構造(SOLID アーキテクチャ)

solid-react スキルの SOLID 原則に従った推奨構造です。

src/
├── modules/
│   ├── cores/                      # Shared between features
│   │   ├── lib/
│   │   │   ├── router/router.ts    # Router configuration
│   │   │   └── query/client.ts     # QueryClient configuration
│   │   ├── components/layouts/     # Shared layouts
│   │   └── interfaces/             # Shared types
│   └── [feature]/                  # Feature module
│       ├── src/
│       │   ├── interfaces/         # Module types
│       │   ├── queries/            # TanStack Query options
│       │   └── components/         # Module components
│       └── index.ts                # Public exports
├── routes/                         # Route definitions ONLY
│   ├── __root.tsx
│   └── [feature]/
└── routeTree.gen.ts               # Auto-generated (DO NOT MODIFY)

完全なテンプレート: templates/basic-setup.md


リファレンスガイド

概念(references/)- 概念に関するドキュメント
トピックリファレンス参照すべきタイミング
セットアップinstallation.mdVite/Webpack の設定、React Router の移行
ファイルルーティングfile-based-routing.md命名規則、routes/ の構造
URL パラメータroute-params.md動的ルート $postId、パース
検索パラメータsearch-params.mdZod バリデーション、URL フィルター、ページネーション
データ読み込みloaders.mdローダー、プリフェッチ、TanStack Query の統合
ナビゲーションnavigation.mdLink、useNavigate、リダイレクト
コンテキストroute-context.md依存性注入、QueryClient、ユーザー
レイアウトnested-routes.mdネストされたレイアウト、Outlet、パスなしルート
エラーerror-handling.mdエラーバウンダリ、404、保留状態
遅延読み込みcode-splitting.mdコード分割、バンドル最適化
プリロードpreloading.mdプリロードの意図/レンダリング、プリフェッチ
認証auth-guards.md保護されたルート、RBAC、ログインリダイレクト
TanStack Querytanstack-query.mdqueryOptions、ミューテーション、キャッシュ
SSRssr.mdサーバーサイドレンダリング、TanStack Start
TypeScripttypescript.md型登録、型推論、型安全性
DevToolsdevtools.mdRouter DevTools のセットアップ
Hooks APIhooks.mduseParams、useSearch、useNavigate など
コンポーネントcomponents.mdLink、Outlet、Navigate、RouterProvider
テンプレート(references/templates/)- コピー&ペースト可能な完全なコード
テンプレート使用するタイミング
basic-setup.mdSOLID アーキテクチャで新しいプロジェクトを開始する
feature-module.md完全なフィーチャーモジュール(インターフェース、クエリ、コンポーネント)を作成する
auth-protected-routes.mdログイン、保護されたルート、RBAC を実装する
search-filters.mdURL フィルター、ページネーション、ソートを備えたページ
dashboard-layout.mdサイドバー、タブ、ネストされたレイアウトを備えたダッシュボード

コアパターン

1. コンテキストを持つルートルート

依存性注入のためのルーターコンテキスト設定。

// src/routes/__root.tsx
export const Route = createRootRouteWithContext<RouterContext>()({
  component: RootComponent,
})

詳細: route-context.md テンプレート: templates/basic-setup.md

2. ローダーと TanStack Query を持つファイルルート

キャッシュを伴うデータ読み込みの推奨パターン。

// src/routes/posts/$postId.tsx
export const Route = createFileRoute('/posts/$postId')({
  loader: ({ context: { queryClient }, params }) =>
    queryClient.ensureQueryData(postQueryOptions(params.postId)),
  component: PostPage,
})

詳細: loaders.md、tanstack-query.md テンプレート: templates/feature-module.md

3. Zod バリデーションによる検索パラメータ

URL 経由の型安全なフィルターとページネーション。

// src/routes/posts/index.tsx
const searchSchema = z.object({
  page: z.number().min(1).default(1),
  sort: z.enum(['newest', 'oldest']).default('newest'),
})

export const Route = createFileRoute('/posts/')({
  validateSearch: searchSchema, // Zod v4 = Standard Schema, no adapter
})

詳細: search-params.md テンプレート: templates/search-filters.md

4. 保護されたルート

リダイレクトを伴う認証ガード。

// src/routes/_authenticated/_authenticated.tsx
export const Route = createFileRoute('/_authenticated')({
  beforeLoad: ({ context, location }) => {
    if (!context.user) {
      throw redirect({ to: '/login', search: { redirect: location.href } })
    }
  },
})

詳細: auth-guards.md テンプレート: templates/auth-protected-routes.md

5. Outlet を使ったネストされたレイアウト

ダッシュボード向けのネストされたレイアウト。

// src/routes/_dashboard/_dashboard.tsx
export const Route = createFileRoute('/_dashboard')({
  component: () => (
    <DashboardLayout>
      <Outlet />
    </DashboardLayout>
  ),
})

詳細: nested-routes.md テンプレート: templates/dashboard-layout.md


ベストプラクティス

推奨事項
パターン参照
Route API (Route.useParams()) を使用するhooks.md
Zod で検索パラメータをバリデーションするsearch-params.md
ローダーで ensureQueryData を使用するtanstack-query.md
リンクの意図に基づいてプリロードするpreloading.md
インターフェースを interfaces/ で分離するsolid-react skill
非推奨事項
アンチパターン理由代替手段
from を指定しない useLoaderData()型安全ではないRoute.useLoaderData()
フェッチに useEffect を使用する最適ではないローダーを使用する
検索パラメータをミューテートするイミュータビリティnavigate({ search: {...} })
エラーバウンダリを省略するUX の低下errorComponent を追加する
コンポーネント内にインターフェースを置く結合interfaces/ フォルダー

React Router からの移行

完全な移行ガイドについては installation.md を参照してください。

React RouterTanStack Router
useParams()Route.useParams()
useSearchParams()Route.useSearch()
useLoaderData()Route.useLoaderData()
loader 関数loader オプション
action 関数TanStack Query のミューテーション

バージョン履歴

  • v1.x - 頻繁なリリース(インクリメンタルなバージョニング)
  • 主なマイルストーン: Head/meta タグ、検索パラメータミドルウェア、Zod アダプター

コメント