tanstack-query-best-practices について
React アプリを開発する人向けの TanStack Query 実践ガイドです。データ取得、キャッシュ、ミューテーション、サーバー状態の同期を優先度別のルールと良否の例で解説します。
主な機能
- 01クエリキーの整理とキャッシュ
- 02ミューテーション、楽観的更新、エラー処理
- 03プリフェッチと並列クエリ
- 04無限クエリと SSR 連携
- 05パフォーマンスとオフライン対応
活用シーン
- 01新機能のデータ取得設計
- 02キャッシュやクエリキー設定の見直し
- 03ミューテーションと楽観的更新の実装
- 04SSR のハイドレーションやページネーションの問題調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ deckardger/ tanstack-agent-skills --skill tanstack-query-best-practicesインストール後、Claude Code で/tanstack-query-best-practicesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
rules/cache-defaults.mdcache-gc-time.mdcache-invalidation.mdcache-placeholder-vs-initial.mdcache-stale-time.mderr-error-boundaries.mderr-fallback-data.mderr-retry-config.mdinf-loading-guards.mdinf-max-pages.mdinf-page-params.mdmut-error-handling.mdmut-invalidate-queries.mdmut-loading-states.mdmut-mutation-state.mdmut-optimistic-updates.mdmut-rollback-context.mdnetwork-mode.mdparallel-use-queries.mdperf-notify-change-props.mdperf-placeholder-data.mdperf-select-transform.mdperf-structural-sharing.mdpersist-queries.mdpf-ensure-query-data.mdpf-intent-prefetch.mdpf-route-prefetch.mdpf-stale-time-config.mdqk-array-structure.mdqk-factory-pattern.md詳細
TanStack Query のベストプラクティス
React アプリケーションで TanStack Query(React Query)のパターンを実装するための包括的なガイドラインです。これらのルールは、データ取得、キャッシュ、ミューテーション、サーバー状態の同期を最適化します。
適用するタイミング
- 新しいデータ取得ロジックを作成するとき
- クエリ設定を行うとき
- ミューテーションと楽観的更新を実装するとき
- キャッシュ戦略を設定するとき
- SSR/SSG と統合するとき
- 既存のデータ取得コードをリファクタリングするとき
優先度別のルールカテゴリ
| 優先度 | カテゴリ | ルール | 影響 |
|---|---|---|---|
| CRITICAL | クエリキー | 5 ルール | キャッシュの不具合やデータの不整合を防ぎます |
| CRITICAL | キャッシュ | 5 ルール | パフォーマンスとデータの鮮度を最適化します |
| HIGH | ミューテーション | 6 ルール | データの整合性と UI の一貫性を確保します |
| HIGH | エラー処理 | 3 ルール | ユーザー体験の低下を防ぎます |
| MEDIUM | プリフェッチ | 4 ルール | 体感パフォーマンスを向上させます |
| MEDIUM | 並列クエリ | 2 ルール | 動的な並列データ取得を可能にします |
| MEDIUM | 無限クエリ | 3 ルール | ページネーションの不具合を防ぎます |
| MEDIUM | SSR 統合 | 4 ルール | 適切なハイドレーションを可能にします |
| LOW | パフォーマンス | 4 ルール | 不要な再レンダリングを減らします |
| LOW | オフラインサポート | 2 ルール | オフラインファーストのパターンを可能にします |
クイックリファレンス
クエリキー(プレフィックス:qk-)
qk-array-structure— クエリキーには常に配列を使用しますqk-include-dependencies— クエリが依存するすべての変数を含めますqk-hierarchical-organization— キーを階層的に整理します(エンティティ → ID → フィルター)qk-factory-pattern— 複雑なアプリケーションではクエリキーファクトリーを使用しますqk-serializable— すべてのキー要素が JSON シリアライズ可能であることを確認します
キャッシュ(プレフィックス:cache-)
cache-stale-time— データの変動性に応じて適切な staleTime を設定しますcache-gc-time— 非アクティブなクエリを保持する gcTime を設定しますcache-defaults— QueryClient レベルで適切なデフォルト値を設定しますcache-invalidation— 広範なパターンよりも対象を絞った無効化を使用しますcache-placeholder-vs-initial— placeholder データと initial データの違いを理解します
ミューテーション(プレフィックス:mut-)
mut-invalidate-queries— ミューテーション後は、関連するクエリを必ず無効化しますmut-optimistic-updates— 応答性の高い UI を実現するため、楽観的更新を実装しますmut-rollback-context— onMutate からロールバック用のコンテキストを渡しますmut-error-handling— ミューテーションのエラーを適切に処理しますmut-loading-states— ミューテーションの読み込み状態には isPending を使用しますmut-mutation-state— コンポーネント間で状態を追跡するには useMutationState を使用します
エラー処理(プレフィックス:err-)
err-error-boundaries— useQueryErrorResetBoundary とエラーバウンダリーを使用しますerr-retry-config— リトライロジックを適切に設定しますerr-fallback-data— 適切な場合はフォールバックデータを提供します
プリフェッチ(プレフィックス:pf-)
pf-intent-prefetch— ユーザーの操作意図(ホバー、フォーカス)に応じてプリフェッチしますpf-route-prefetch— ルート遷移中にデータをプリフェッチしますpf-stale-time-config— プリフェッチ時に staleTime を設定しますpf-ensure-query-data— 条件付きのプリフェッチには ensureQueryData を使用します
無限クエリ(プレフィックス:inf-)
inf-page-params— 必ず getNextPageParam を指定しますinf-loading-guards— 追加データを取得する前に isFetchingNextPage を確認しますinf-max-pages— 大規模なデータセットでは maxPages の使用を検討します
SSR 統合(プレフィックス:ssr-)
ssr-dehydration— SSR では dehydrate/hydrate パターンを使用しますssr-client-per-request— リクエストごとに QueryClient を作成しますssr-stale-time-server— サーバーでは staleTime を長めに設定しますssr-hydration-boundary— HydrationBoundary でラップします
並列クエリ(プレフィックス:parallel-)
parallel-use-queries— 動的な並列クエリには useQueries を使用しますquery-cancellation— クエリのキャンセルを適切に実装します
パフォーマンス (プレフィックス: perf-)
perf-select-transform— select を使ってデータを変換/フィルタリングするperf-structural-sharing— 構造的共有を活用するperf-notify-change-props— notifyOnChangeProps で再レンダリングを制限するperf-placeholder-data— placeholderData を使って UI を即時表示する
オフラインサポート (プレフィックス: offline-)
network-mode— オフラインサポート用にネットワークモードを設定するpersist-queries— オフラインサポート用にクエリの永続化を設定する
使用方法
rules/ ディレクトリ内の各ルールファイルには以下が含まれます。
- 説明 — このパターンが重要な理由
- 悪い例 — 避けるべきアンチパターン
- 良い例 — 推奨される実装
- コンテキスト — このルールを適用すべき場合、または省略すべき場合
完全なリファレンス
詳細なガイダンスとコード例については、rules/ ディレクトリ内の個別のルールファイルを参照してください。
コメント
Markdown 対応