mcpField
C
charting

charting

github.com/claude-dev-suiteデータ・データベース4661 回インストール4 日前に更新
リポジトリ

charting について

フロントエンド開発者向けのチャート・データ可視化スキルです。Recharts、Chart.js、D3.jsなどを比較し、レスポンシブ対応や本番運用時の確認事項をまとめています。

主な機能

  1. 01チャートライブラリと用途の比較
  2. 02Recharts、Chart.js、D3.jsの例
  3. 03レスポンシブ設計と更新方法
  4. 04アクセシビリティと読み込み状態の確認
  5. 05大規模データの集約・サンプリング

活用シーン

  1. 01Reactダッシュボード用のライブラリ選定
  2. 02カスタムまたは複雑な可視化の構築
  3. 03チャートのレスポンシブ性とアクセシビリティの確認

インストール

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

$npx skills add https://github.com/claude-dev-suite/claude-dev-suite --skill charting

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

詳細

グラフ作成とデータ可視化

Recharts(React — 推奨)

import {
  LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer,
  BarChart, Bar, PieChart, Pie, Cell,
} from 'recharts';

const data = [
  { month: 'Jan', revenue: 4000, users: 240 },
  { month: 'Feb', revenue: 3000, users: 198 },
  { month: 'Mar', revenue: 5000, users: 300 },
];

function RevenueChart() {
  return (
    <ResponsiveContainer width="100%" height={300}>
      <LineChart data={data}>
        <CartesianGrid strokeDasharray="3 3" />
        <XAxis dataKey="month" />
        <YAxis />
        <Tooltip />
        <Line type="monotone" dataKey="revenue" stroke="#8884d8" strokeWidth={2} />
        <Line type="monotone" dataKey="users" stroke="#82ca9d" strokeWidth={2} />
      </LineChart>
    </ResponsiveContainer>
  );
}

// Bar Chart
function SalesChart() {
  return (
    <ResponsiveContainer width="100%" height={300}>
      <BarChart data={data}>
        <CartesianGrid strokeDasharray="3 3" />
        <XAxis dataKey="month" />
        <YAxis />
        <Tooltip />
        <Bar dataKey="revenue" fill="#8884d8" radius={[4, 4, 0, 0]} />
      </BarChart>
    </ResponsiveContainer>
  );
}

Chart.js(フレームワーク非依存)

import { Chart, registerables } from 'chart.js';
Chart.register(...registerables);

// With React wrapper
import { Line, Bar, Doughnut } from 'react-chartjs-2';

function SalesChart() {
  return (
    <Line
      data={{
        labels: ['Jan', 'Feb', 'Mar'],
        datasets: [{
          label: 'Revenue',
          data: [4000, 3000, 5000],
          borderColor: '#8884d8',
          tension: 0.3,
        }],
      }}
      options={{
        responsive: true,
        plugins: { legend: { position: 'top' } },
        scales: { y: { beginAtZero: true } },
      }}
    />
  );
}

D3.js(低レベル、最大限の制御)

import * as d3 from 'd3';

function createBarChart(container: HTMLElement, data: { label: string; value: number }[]) {
  const margin = { top: 20, right: 20, bottom: 30, left: 40 };
  const width = 600 - margin.left - margin.right;
  const height = 400 - margin.top - margin.bottom;

  const svg = d3.select(container).append('svg')
    .attr('viewBox', `0 0 ${width + margin.left + margin.right} ${height + margin.top + margin.bottom}`)
    .append('g').attr('transform', `translate(${margin.left},${margin.top})`);

  const x = d3.scaleBand().domain(data.map((d) => d.label)).range([0, width]).padding(0.2);
  const y = d3.scaleLinear().domain([0, d3.max(data, (d) => d.value)!]).range([height, 0]);

  svg.append('g').attr('transform', `translate(0,${height})`).call(d3.axisBottom(x));
  svg.append('g').call(d3.axisLeft(y));

  svg.selectAll('rect').data(data).join('rect')
    .attr('x', (d) => x(d.label)!)
    .attr('y', (d) => y(d.value))
    .attr('width', x.bandwidth())
    .attr('height', (d) => height - y(d.value))
    .attr('fill', '#8884d8')
    .attr('rx', 4);
}

ライブラリの選択

ライブラリ最適な用途学習コスト
RechartsReact ダッシュボード低
Chart.jsシンプルなグラフ、あらゆるフレームワーク低
D3.jsカスタム/複雑な可視化高
ECharts大規模データセット、地図中
NivoReact、豊富なグラフ種類低

アンチパターン

アンチパターン修正方法
ResponsiveContainer を使用しないレスポンシブなサイズ調整のため、常にグラフをラップします
データ変更時にグラフ全体を再レンダリングする再マウントではなく、グラフの更新メソッドを使用します
集計せずにデータポイントを増やしすぎるグラフ化する前にデータを集計/サンプリングします
非同期データの読み込み状態がない読み込み中はスケルトン/スピナーを表示します
ピクセル単位でサイズを固定する相対サイズ(%、viewBox)を使用します

本番環境向けチェックリスト

  • すべてのグラフをレスポンシブコンテナでラップする
  • 読み込み中と空の状態に対応する
  • アクセシビリティに配慮する:色のコントラスト、ARIA ラベル
  • 大規模データセット向けにデータを集計する
  • グラフ全体で一貫したカラーパレットを使用する
  • 読みやすいツールチップの書式を設定する

コメント