d3 について
d3 は、D3.js を使う作業向けのスキルで、データ準備、可視化要素、操作、レイアウト、フレームワーク連携を扱います。D3 をチャートライブラリと見なさず、導入済みモジュールを確認して必要最小限の構成を選ぶ方法を示します。
主な機能
- 01必要な D3 モジュールとバージョンを確認
- 02スケール、シェイプ、データ準備を案内
- 03レイアウト、地理機能、操作を解説
- 04SVG、Canvas、フレームワーク連携に対応
- 05D3 の変更に適した検証を提案
活用シーン
- 01D3 モジュールで独自チャートを構築
- 02ブラシ、ズーム、ドラッグ操作を追加
- 03D3 の描画を React や Svelte に統合
- 04D3 の実装を更新または検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dobroslavradosavljevic/ skills --skill d3インストール後、Claude Code で/d3を入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/animation-frameworks.mdlayouts-geo.mdselection-interaction.mdsetup-data-scales.mdshapes-geometry.mdsource-map.md詳細
D3
D3.js(d3 またはモジュール単位の d3-*)に関わる作業(データ準備、スケール、シェイプ、セレクション/結合、軸、トランジション、ブラシ/ドラッグ/ズーム、フォース、階層、地理、ドロネー、フレームワークとの連携)では、このスキルを使用してください。
現行のアンブレラ系列は [email protected] として扱ってください(はじめに、API インデックス)。記憶に頼らず、公式の d3js.org モジュールページと npm で解決されたメジャーバージョンを優先してください。D3 は 約 30 個のモジュールからなるツールボックスであり、チャートライブラリではありません。エンコーディングは自分で組み合わせてください(または、独自の D3 が不要な場合は、より高水準のチャートスタックを選んでください)。
ワークフロー
- コードを変更する前に、ローカル環境の構成を確認します。
- アンブレラパッケージの
d3と、モジュール単位でインストールされたd3-*のバージョン。TypeScript の場合は@types/d3/@types/d3-*(DefinitelyTyped)。 - タスクで必要なのが DOM モジュール(selection、transition、call による axis、brush、drag、zoom)か、純粋な数学処理(array、scale、shape、interpolate、format など)か。
- レンダリング先:SVG、Canvas(
generator.context)、または宣言的 JSX の path/cx/cy属性。
- アンブレラパッケージの
- source-map.md から、パッケージの根拠情報とドキュメントの URL を更新します。
- インストール方法、データ準備、スケール、配色スキーム、色、interpolate については、setup-data-scales.md を使用します。
- line/area/arc/pie/stack/symbol/link、path、polygon、axis、contour/density、quadtree については、shapes-geometry.md を使用します。
- hierarchy、force、chord、geo、delaunay/voronoi については、layouts-geo.md を使用します。
- React/Svelte の DOM 競合ルールを含め、selection/join、brush、drag、zoom、dispatch については、selection-interaction.md を使用します。
- transitions/ease/timer、フレームワークのガイダンス、本番環境/SSR/canvas、v6 から v7 への注意点、AI による誤りについては、animation-frameworks.md を使用します。
実装上の判断
- タスクに必要な最小限のモジュール構成を優先してください。プロトタイピングでは
bun add d3を使用します。本番用の React チャートでは、多くの場合d3-scale+d3-shape+d3-arrayだけで十分です(DOM API を呼び出す場合は selection/axis も追加します)。 - 連続値の y 範囲は反転します(
[innerHeight, marginTop])。SVG のyは下方向に増加します。 - JSX での純粋な数学処理は問題ありません(scale、array、shape の path 文字列、format)。React では、DOM を変更する処理には refs + effects が必要です。対象は selection、
selection.call(axis)、transition、brush、drag、zoom です(公式の React ガイダンス)。 - 独自の exit アニメーションが必要な場合を除き、冗長な enter/update/exit よりも、最新の
selection.data(data, key).join(...)を優先してください。 - リスナーにはネイティブイベントを渡してください(D3 6 以降)。
d3.eventはありません。 - 非推奨の
d3-voronoiよりもd3-delaunay(Delaunay.from)を優先してください。 - 値をエンコードする階層レイアウトでは、
treemap/pack/partitionの前に.sum()(通常は.sort()も)を呼び出します。 - Force シミュレーションはティックごとに
node.x/node.yを変更します。"tick"(または React state)を使ってレンダリングを行い、アンマウント時にはstop()を呼び出してください。 - 帯域幅を使う棒には
.bandwidth()を使用します。カテゴリ別の線や散布図には、多くの場合scalePointを使用します。curveMonotoneXを使う前にデータをソートしてください。 d3.nestは使用しないでください(削除済みです)。group/rollup/groups/rollupsを使用してください。- 複数のチャートが同じドキュメントを共有する場合は、クリップ/グラデーション/マーカーに一意の SVG
idを使用してください。
検証
リポジトリに既存のチェックがある場合は、そちらを優先してください。D3 に関する重要な変更では、関連する項目を組み合わせて実施します。
- パッケージ/バージョンを確認し、
d3@7またはそれと揃ったモジュールのメジャーバージョンを使用します。TypeScript の場合は@types/d3を確認します。 - アクセサー、スケールの domain、join のキー型を型チェックします。
- 幅/高さを固定した、決定論的な SVG/Canvas のアサーションを行います(transition ではタイマーをモックし、テストでは force シミュレーションを停止します)。
- これらの API を変更する場合は、brush の domain フィルター、zoom の transform、drag のインタラクションテストを実施します。
- geo、force、hierarchy、contour、またはアンブレラパッケージ全体を追加する場合は、バンドルを監査します。
- 古い D3 からアップグレードする場合は、
d3.event、d3.nest、d3.voronoi、React 16 時代のパターンを移行時に確認します。
コメント
Markdown 対応