visx について
visx は、Airbnb の低レベルなチャートプリミティブで React の可視化を構築するためのスキルです。SVG の組み立て、専用レイアウト、操作、v3 から v4 への移行を案内します。
主な機能
- 01組み合わせ可能な SVG プリミティブ
- 02直交座標チャート向け XYChart
- 03専用の可視化レイアウト
- 04チャート操作の指針
- 05v3 から v4 への移行案内
活用シーン
- 01カスタム React チャートの構築
- 02直交座標の折れ線図や棒グラフの作成
- 03ツールチップ、ズーム、ブラシ操作の追加
- 04visx プロジェクトの v4 移行
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dobroslavradosavljevic/ skills --skill visxインストール後、Claude Code で/visxを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/guides-decoration.mdinteraction-layout.mdproduction-migration.mdsetup-core.mdsource-map.mdspecialized-viz.mdxychart-high-level.md詳細
visx
Airbnb visx(@visx/*)に関わる作業では、このスキルを使用してください。対象には、低レベルの React 可視化プリミティブ、@visx/xychart、インタラクションパッケージ、用途特化型レイアウト、v3 から v4 への移行が含まれます。
公開済みの安定版系列は 4.0.0(React 18/19)として扱ってください。パッケージルートからのインポート、インストール済みタグに対応するギャラリーのサンドボックス、古い深い階層からのインポート例よりも GitHub/visx.airbnb.tech を優先してください。4.1 のパッケージ(@visx/theme、@visx/a11y、@visx/chart、@visx/kernel、レジストリ)は、npm に公開されるまではインストール不可として扱ってください。
ワークフロー
- コードを変更する前に、ローカル環境の状況を確認してください。
- すべての
@visx/*のバージョンが同じメジャーバージョンにそろっていること(^4.0.0を推奨)。v3 と v4 を混在させないでください。 - React の peer dependency が
^18 || ^19であること(TypeScript を使用する場合は、対応する@types/react/@types/react-domも確認してください)。 - タスクが XYChart、プリミティブの組み合わせ、用途特化型レイアウト(geo/hierarchy/network/stats/…)のどれに該当するか。
- アニメーション関連の peer dependency は、
@visx/xychartまたは@visx/react-springからAnimated*をインポートする場合に限り、@react-spring/webを使用してください。
- すべての
- source-map.md を参照し、パッケージの根拠情報とドキュメントの URL を更新してください。
- インストール戦略、メンタルモデル、スケール、シェイプ、曲線、グリフ、マーカー、テキスト、defs(クリップ/パターン/グラデーション)、
@visx/vendorについては、setup-core.md を参照してください。 - 軸、グリッド、凡例、注釈、しきい値バンド、テーマ設定とアクセシビリティ(4.0 XYChart および 4.1 プレビュー)については、guides-decoration.md を参照してください。
- ParentSize、境界、
localPoint、ドラッグ、ブラシ、ズーム、ツールチップ/ポータルについては、interaction-layout.md を参照してください。 - stats、heatmap、hierarchy、network、sankey、chord、geo、voronoi/delaunay、wordcloud、kernel の補足情報については、specialized-viz.md を参照してください。
- XYChart の系列/プロバイダー/テーマ、react-spring、mock-data、
@visx/visxのアンブレラパッケージについては、xychart-high-level.md を参照してください。 - v3 から v4 への移行、判断ガイド、本番環境/SSR/アクセシビリティ/パフォーマンス、AI によるコード作成時の注意点については、production-migration.md を参照してください。
実装の判断
- visx は必要な機能がすべて揃ったチャートライブラリではありません。SVG を組み立てます:寸法 → スケール → マーク/ガイド → インタラクション。目的に応じて、必要最小限の
@visx/*セットを選んでください。 - **D3 は計算を行い、DOM は React が管理します。**スケールやシェイプファクトリーが数値やパスの
d文字列を生成し、コンポーネントが SVG を描画します。visx のマークツリーに d3 の選択やenter/exitを混在させないでください。 - 連続的な y 範囲は反転させます(
[innerHeight, 0])。SVG のyは下方向に増加します。 - パッケージのルートから名前付きインポートを使用します(
import { Bar } from '@visx/shape')。v4 のexportsでは@visx/*/lib/...からのディープインポートは使用しないでください。 - 意図せず D3 を推移的にインポートするのではなく、
@visx/vendor/d3-*(または独自に宣言したd3-*)を優先してください。意図がない限り、vendor 版とベアなd3-shape/d3-scaleを重複して使わないでください。 - 共通のツールチップ/テーマ/注釈を使う標準的な直交座標の折れ線/面/棒/グリフ/積み上げ/グループ化には XYChart を使用します。
xScale/yScaleには、実際の d3 スケールインスタンスではなくScaleConfigオブジェクト({ type: 'band' })を渡してください。 - 極座標、地理、階層、ネットワーク、統計、独自の SVG 構造、または最小限のバンドルには プリミティブを使用します。
- 新しい Voronoi/ヒットターゲットの実装では、従来の
@visx/voronoiよりも@visx/delaunayを優先してください。 @visx/networkは力学レイアウトを実行しません。x/yを指定してください(例:外部のd3-forceを使用)。@visx/kernelはKDE ではありません。密度の表示には、@visx/statsのビン/ViolinPlot、または外部の KDE と@visx/shapeを使用してください。- レスポンシブチャートは
ParentSize/useParentSizeでラップし、描画前にwidth < 10をチェックしてください。テスト/SSR では固定サイズを指定してください。 - スケール設定や負荷の高いレイアウトは、幅/高さ/データに基づいてメモ化してください。可変な d3 スケールは、再レンダリングをまたぐ際に慎重に扱ってください。
- グラデーション、パターン、マーカー、clipPaths、Threshold のクリップには、SVG の一意な
idを使用してください。特に、1 ページに複数のチャートがある場合は注意してください。 - チャートのセマンティクスを追加する際は、装飾的な要素(
Grid*、Axis*、背景)にaria-hiddenを設定してください。4.0.0 では XYChart のaccessibilityLabel/シリーズのフォーカスハンドラーを使用してください。
検証
リポジトリに既存のチェックがあれば、そちらを優先してください。visx に意味のある変更を加える場合は、関連する項目を含めてください。
@visx/*@^4と React 18/19 のピア依存関係が揃っていることを示すパッケージ/バージョンチェック(Animated*を使用する場合は@react-spring/webも対象)。- アクセサー、
ScaleInput、シリーズのDatum/dataKey、軸/グリッドの props、ツールチップの状態を対象とする型チェック。ディープインポートの型は使用しないでください。 - 固定の
width/heightを使った決定的な SVG アサーション(ParentSize/ツールチップのポータルを使う場合はResizeObserverをモックしてください)。 - これらの API を変更する場合は、ツールチップの表示/非表示、ブラシによるドメインフィルター、ズームのリセット、キーボードフォーカスのインタラクションテスト。
- テーマトークン、積み上げ/グループ化された棒、注釈の配置に関するビジュアルスモークテスト。
- umbrella の
@visx/visx、アニメーション、地理関連の TopoJSON、大規模な階層/ネットワークのデモを追加する場合は、バンドル/インポートの監査。 - ディープインポート、React 16/17 のピア依存関係、
withBoundingRectsにおけるnodeRefの不足、useParentSizeの後のparentRef.currentを対象とする移行スキャン。
コメント
Markdown 対応