chart.js は Canvas ベースの軽量な图表ライブラリで、フレームワークに依存しません。react-chartjs-2 はその Chart.js を React で使いやすいようにラップしたコンポーネントです。recharts は D3 を基盤としつつ、React のコンポーネント構造で图表を構築できる宣言的なライブラリです。一方、react-vis は Uber によって開発されましたが、現在はメンテナンスが停止しており、新規プロジェクトでの使用は推奨されません。これらはすべて Web アプリケーションでデータを視覚化する目的で使用されますが、描画エンジン(Canvas vs SVG)、アーキテクチャ、および保守状況に大きな違いがあります。
データ可視化は現代の Web アプリケーションに不可欠な要素です。React 生態系には多くの图表ライブラリが存在しますが、chart.js、react-chartjs-2、react-vis、recharts はその中でも特に知名度が高い選択肢です。しかし、これらは内部構造、描画方式、そして保守状況において大きく異なります。本稿では、経験豊富なフロントエンド開発者の視点から、これらの技術的な違いと適切な選定基準を解説します。
图表ライブラリを選ぶ際、最も重要な技術的決定の一つが描画エンジンです。これはパフォーマンスとカスタマイズ性に直接影響します。
chart.js と react-chartjs-2 は HTML5 Canvas を使用します。
// chart.js / react-chartjs-2 (Canvas based)
// 設定オブジェクトを通じて全体を制御する
const data = {
labels: ['Red', 'Blue', 'Yellow'],
datasets: [{
label: 'My Dataset',
data: [12, 19, 3],
backgroundColor: 'rgba(255, 99, 132, 0.2)',
}]
};
// Canvas コンテキストに直接描画されるため、DOM 要素としては存在しない
recharts と react-vis は SVG を使用します。
// recharts (SVG based)
// 各要素が React コンポーネントとして定義される
<BarChart width={500} height={300} data={data}>
<XAxis dataKey="name" />
<YAxis />
<Tooltip />
<Bar dataKey="value" fill="#8884d8" />
</BarChart>
// react-vis (SVG based)
// 同様に SVG コンポーネントを組み合わせる
<XYPlot width={500} height={300}>
<XAxis />
<YAxis />
<BarSeries data={data} />
</XYPlot>
ライブラリの使い勝手は、API が「設定オブジェクト」か「宣言的コンポーネント」かによって決まります。
chart.js と react-chartjs-2 は設定オブジェクト中心です。
// react-chartjs-2
// options オブジェクト内で細かく設定する
const options = {
responsive: true,
plugins: {
legend: { position: 'top' },
tooltip: { enabled: true }
}
};
<Bar data={data} options={options} />
recharts は JSX を使った宣言的アプローチです。
// recharts
// 子コンポーネントで構造を表現する
<LineChart data={data}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="name" />
<YAxis />
<Tooltip />
<Line type="monotone" dataKey="value" stroke="#8884d8" />
</LineChart>
react-vis も宣言的ですが、独自のコンポーネント構造を持ちます。
XYPlot をラッパーとし、その中に系列を配置します。// react-vis
// 独自のコンポーネント階層を持つ
<XYPlot width={300} height={300}>
<VerticalGridLines />
<HorizontalGridLines />
<XAxis />
<YAxis />
<BarSeries data={data} />
</XYPlot>
ライブラリの選定において、メンテナンス状況は機能以上に重要です。
react-vis は非推奨(Deprecated)です。
recharts や chart.js への移行が強く推奨されます。chart.js / react-chartjs-2 と recharts は活発にメンテナンスされています。
現代の Web アプリでは、さまざまな画面サイズへの対応が必須です。
chart.js / react-chartjs-2
// react-chartjs-2 (Plugin usage)
// キャンバス描画後のフックを利用してカスタム描画を行う
const customPlugin = {
id: 'customPlugin',
afterDraw: (chart) => {
// Canvas コンテキストに直接アクセスして描画
const ctx = chart.ctx;
ctx.fillText('Custom Text', 10, 10);
}
};
Chart.register(customPlugin);
recharts
ResponsiveContainer コンポーネントを使用することで、親要素のサイズに自動的に追従します。// recharts (Responsive)
// 親要素のサイズに合わせて自動リサイズ
<ResponsiveContainer width="100%" height={300}>
<BarChart data={data}>
<Bar dataKey="value" fill="#8884d8" className="custom-bar" />
</BarChart>
</ResponsiveContainer>
| 特徴 | chart.js / react-chartjs-2 | recharts | react-vis |
|---|---|---|---|
| 描画方式 | Canvas | SVG | SVG |
| API スタイル | 設定オブジェクト | 宣言的 (JSX) | 宣言的 (JSX) |
| 保守状況 | ✅ 活発 | ✅ 活発 | ❌ 終了 (非推奨) |
| データ量 | 大規模データに強い | 中規模データ向け | 中規模データ向け |
| カスタマイズ | プラグイン方式 | コンポーネント合成 | コンポーネント合成 |
| React 統合 | ラッパー経由 | ネイティブ | ラッパー経由 |
技術選定においては、プロジェクトの要件とチームのスキルセットが鍵となります。
recharts を選ぶべきケース:
chart.js / react-chartjs-2 を選ぶべきケース:
react-vis について:
recharts などへの移行計画を立てることを強く推奨します。結論:
新規の React プロジェクトにおいて、バランスの取れた選択は recharts です。React の哲学に沿った API デザインは開発効率を高め、十分なパフォーマンスとカスタマイズ性を提供します。ただし、ビッグデータを扱う特殊なケースでは react-chartjs-2 が有力な代替案となります。
フレームワークに依存しない純粋な图表機能が必要な場合や、既存の jQuery や Vanilla JS プロジェクトで利用する場合に選択します。React プロジェクトで使う場合は、ラッパーライブラリと組み合わせる必要があります。
Chart.js の機能とパフォーマンス(Canvas 描画)を React プロジェクトで活用したい場合に最適です。設定項目が多く、複雑な图表を描画する必要があるが、React のコンポーネントとして管理したい時に適しています。
現在は公式にメンテナンスが終了しているため、新規プロジェクトでの採用は避けるべきです。既存のレガシーコードの保守の場合を除き、他の代替ライブラリへの移行を検討してください。
React ネイティブな開発体験(DX)を最優先する場合に選択します。SVG ベースのためカスタマイズ性が高く、コンポーネントの組み合わせで图表を作れるため、React 開発者にとって直感的です。ダッシュボードや管理画面に適しています。
Simple yet flexible JavaScript charting for designers & developers
All the links point to the new version 4 of the lib.
In case you are looking for an older version of the docs, you will have to specify the specific version in the url like this: https://www.chartjs.org/docs/2.9.4/
Instructions on building and testing Chart.js can be found in the documentation. Before submitting an issue or a pull request, please take a moment to look over the contributing guidelines first. For support, please post questions on Stack Overflow with the chart.js tag.
Chart.js is available under the MIT license.