react-flow について
React Flow(@xyflow/react v12+)でインタラクティブなノード型 UI を構築、カスタマイズ、デバッグ、最適化するためのリファレンススキルです。バージョンに応じたガイドを含み、状態管理、レイアウト、アクセシビリティ、テスト、高度なパターンを扱います。
主な機能
- 01React Flow のセットアップと移行ガイド
- 02カスタムノード、エッジ、操作
- 03状態管理と TypeScript のパターン
- 04レイアウト、スタイル、性能のガイド
- 05アクセシビリティと E2E テストの資料
- 06トラブルシューティングと応用レシピ
活用シーン
- 01編集可能なノード型 UI の構築
- 02空白キャンバスやエッジ欠落の原因調査
- 03カスタムノード、レイアウト、操作の追加
- 04既存フローのテストと最適化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ framara/ react-flow-skill --skill react-flowインストール後、Claude Code で/react-flowを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitignoreCLAUDE.mdLICENSEREADME.md.github/workflows/verify.ymlevals/README.mdevals/cases/keyboard-editor/prompt.mdevals/cases/repair-flow/prompt.mdevals/cases/repair-flow/starter/App.tsxevals/controls/keyboard-editor/App.cssApp.tsxevals/controls/repair-flow/App.tsxevals/results/2026-09-28.mdreferences/e2e-testing.mdadvanced-patterns.mdcustom-edges.mdaccessibility.mdcustom-nodes.mdfundamentals.mdcomponents-and-hooks.mdinteractivity.mdlayouting.mdmigration.mdperformance-and-styling.mdstate-management.mdrecipes.mdssr-and-hydration.mdtypescript.mdscripts/check-docs.mjscheck-evals.mjs詳細
React Flow
概要
このスキルでは、React Flow(@xyflow/react v12+)を使用して、インタラクティブなノードベース UI を構築、カスタマイズ、デバッグ、最適化します。基本的なセットアップから、計算フロー、サブフロー、外部レイアウトとの連携といった高度なパターンまで扱います。
バージョンとソースに関する方針
@xyflow/react 12.12.0 に基づき、2026-09-28 にガイダンスを確認しています。API を適用する前に、対象プロジェクトにインストールされているバージョンとロックファイルを確認してください。「v12+」であっても、すべてのマイナーリリースにすべての機能が含まれているとは限りません。タスクで変更が必要な場合を除き、プロジェクトの状態とスタイルの選択を維持してください。
特定のガイドや API ページを探すには、公式ドキュメントのインデックスを使用してください。バージョンによって動作が異なる場合は、リリースノートと、インストール済みパッケージの宣言やソースを確認してください。タスクに関連するリファレンスのみを読みます。インポートが省略された例や ... を含む例は、単体で動作するアプリケーションではなく、統合の概要を示すものです。
エージェントの動作契約(以下のルールに従ってください)
- v12 のプロジェクトでは、
@xyflow/reactからインポートします。レガシープロジェクトを保守する場合は、移行が作業範囲に含まれるまでは、インストール済みの API に従ってください。 - スタイルシートを必ずインポートします。
import '@xyflow/react/dist/style.css'(デフォルトのビジュアルスタイルを置き換える場合はbase.css)を使用します。 <ReactFlow>の親コンテナーは、幅と高さが必ず 0 より大きくなるようにしてください(明示的なサイズ指定、またはサイズが設定された flex/grid レイアウトを使用します)。nodeTypesとedgeTypesのオブジェクトは、再レンダリングを防ぐため、コンポーネント本体の外で定義するか、useMemoでラップします。- アプリケーション固有のコンテンツやハンドルにはカスタムノードを使用します。シンプルなラベル付きグラフには組み込みノードを使用できます。
- カスタムノード内のインタラクティブな要素(入力欄、ボタン、セレクト)には
nodragクラスを使用します。 - カスタムノード内のスクロール可能な要素には
nowheelクラスを使用し、ズームへの干渉を防ぎます。 - ハンドルを非表示にする場合は、
visibility: hiddenまたはopacity: 0を使用します。寸法の計算が機能しなくなるため、display: noneは使用しないでください。 - ノードに同じ種類のハンドルを複数配置する場合は、必ず一意の
idプロパティを割り当てます。 - ハンドルを追加、削除、または再配置した後は、effect 内などで DOM の更新後に
useUpdateNodeInternalsを呼び出します。 - ノードやエッジの状態を更新するときは、必ず新しいオブジェクトを作成します。変更は React Flow に検知されません。
- 複雑なアプリケーションでは、制御フローを優先してください。編集可能な制御要素では
onNodesChangeとonEdgesChangeを接続し、ユーザーが接続を作成できる場合にのみonConnectを追加します。
最初の 60 秒(初期確認テンプレート)
- リクエストから目的を特定します。新しいフローのセットアップ、カスタムノード/エッジ、状態管理、レイアウト、パフォーマンス、スタイリング、E2E テスト、高度なパターン(元に戻す/やり直し、コピー/貼り付け、計算フロー、コラボレーション)、またはデバッグのいずれかを確認します。
- プロジェクトを調べ、以下の情報を確認します。不足している情報が解決策に影響する場合にのみ、質問してください。
- React Flow のバージョン(v12+ では
@xyflow/reactを使用します) - TypeScript または JavaScript
- 状態管理の方法(ローカル状態、Zustand、Redux)
- 想定されるノード数(パフォーマンス戦略に影響します)
- スタイリングの方法(CSS、Tailwind、styled-components)
- React Flow のバージョン(v12+ では
- 速やかに分岐して対応します。
- レガシー版の
reactflowまたはreact-flow-rendererからの移行 → パッケージ名の変更、インポートの変更、API の違い - キャンバスが空、またはノードが表示されない → コンテナーのサイズ、または CSS のインポート漏れ
- エッジが表示されない → ハンドルの不足、CSS の不足、またはハンドルに
display: noneが設定されている - 再レンダリングや動作の遅延 →
nodeTypesがコンポーネント内で定義されている、またはメモ化が不足している - ノードを接続できない →
onConnectハンドラーまたはハンドル設定の不足 - レイアウト/配置 → 外部レイアウトライブラリとの連携(dagre、elkjs)
- 型エラー → Node/Edge 型に対する TypeScript のジェネリックパターン
- レガシー版の
ルーティングマップ(適切なリファレンスをすばやく確認)
reactflowまたはreact-flow-rendererから@xyflow/reactv12 への移行 ->references/migration.md- インストール、セットアップ、最初のフロー、ノード/エッジオブジェクト ->
references/fundamentals.md - カスタムノードコンポーネント、Handle、複数のハンドル、ドラッグハンドル ->
references/custom-nodes.md - カスタムエッジコンポーネント、パスユーティリティ、エッジラベル、マーカー ->
references/custom-edges.md - イベントハンドラー、コールバック、接続の検証、選択、キーボード ->
references/interactivity.md - 制御型と非制御型、Zustand 統合、状態更新パターン ->
references/state-management.md - Node/Edge の型、ジェネリクス、共用体型、型ガード ->
references/typescript.md - 外部レイアウトライブラリ(dagre、elkjs、d3)、サブフロー、親子関係 ->
references/layouting.md - 背景、Controls、MiniMap、Panel、NodeToolbar、NodeResizer、フック ->
references/components-and-hooks.md - メモ化、レンダリングの最適化、テーマ設定、CSS 変数、Tailwind ->
references/performance-and-styling.md - キーボード操作、アクセシブルな名前、フォーカス管理、支援技術 ->
references/accessibility.md - サーバーサイドレンダリング、初期ジオメトリ、ハイドレーション、Next.js の境界 ->
references/ssr-and-hydration.md - よくあるエラー、デバッグ、エッジの表示問題、Zustand の警告 ->
references/troubleshooting.md - Playwright の E2E テスト、フローセレクター、ドラッグ/ビューポート/接続のテスト ->
references/e2e-testing.md - 元に戻す/やり直し、コピー/貼り付け、計算済みフロー、動的ハンドル、保存/復元、コラボレーション ->
references/advanced-patterns.md - コンテキストメニューからのノード追加、ドラッグ&ドロップ式サイドバー、詳細パネル、画像としてエクスポート ->
references/recipes.md
よくある落とし穴 -> 次に確認すること
- エラーなしでキャンバスが真っ白 -> 親コンテナに高さがありません。明示的に
height: 100vhなどを設定してください。 nodeTypes/edgeTypesの警告 -> オブジェクト定義をコンポーネント本体の外に移動するか、useMemoでラップしてください。- エッジは描画されるが、位置がずれている -> ハンドルに
display: noneが使われています。opacity: 0に変更してください。 - ノード内の入力欄を操作できない -> 操作可能な要素に
className="nodrag"を追加してください。 - ドラッグ後にノードが元の位置に戻る ->
onNodesChangeが接続されていないか、変更が正しく適用されていません。 - 接続線は表示されるが、エッジが作成されない ->
onConnectハンドラーがないか、addEdgeを呼び出していません。 - 同じ側にある複数のハンドルが重なる -> CSS(
topのオフセット)で位置を調整し、一意のidを割り当ててください。 - 状態の更新がノードに反映されない -> 新しいオブジェクトではなく、ミューテーションを作成しています。スプレッド構文が必要です。
- Zustand のコンテキスト警告 ->
@xyflow/reactが複数のバージョンでインストールされているか、<ReactFlowProvider>がありません。 - 「Parent node not found」警告とともにサブフローの子がずれた位置に表示される ->
nodes配列で親ノードが子ノードより前にあることを確認してください。
確認チェックリスト
@xyflow/react/dist/style.css(またはbase.cssとカスタムスタイル)がインポートされていることを確認します。- 親コンテナの幅と高さがゼロ以外に解決されることを確認します。
nodeTypes/edgeTypesが安定した参照であること(コンポーネントの外で定義するか、メモ化する)を確認します。- 接続が必要なカスタムノードに、適切な
type、position、ID を持つ<Handle>コンポーネントが使われていることを確認します。 - ノード内の操作可能な要素に
nodragクラスがあることを確認します。 - 制御型フローでは、編集可能な要素に対して
onNodesChange/onEdgesChangeが接続され、接続の作成が有効な場合はonConnectが接続されていることを確認します。 - 状態の更新で新しいノード/エッジオブジェクトが作成されること(ミューテーションがないこと)を確認します。
- 型安全性のために、フックとコールバックに TypeScript のジェネリクスが適用されていることを確認します。
- パフォーマンスが重要なフローでは、カスタムノード/エッジコンポーネントが
React.memoでメモ化されていることを確認します。
例を変更した場合は、スニペット全体の型チェックを行い、実際のブラウザーで該当する操作を試してください。コンパイルだけでは、ハンドル、エッジのジオメトリ、ドラッグ、ビューポート内での表示は検証できません。
References
references/migration.mdreferences/fundamentals.mdreferences/custom-nodes.mdreferences/custom-edges.mdreferences/interactivity.mdreferences/state-management.mdreferences/typescript.mdreferences/layouting.mdreferences/components-and-hooks.mdreferences/performance-and-styling.mdreferences/troubleshooting.mdreferences/e2e-testing.mdreferences/advanced-patterns.mdreferences/recipes.mdreferences/accessibility.mdreferences/ssr-and-hydration.md