StudyBlog

Chart.jsをラップしてみる

2025-07-14

やったこと

Chart.jsに対してラッパークラス WrapBarChart を作成した。x軸のラベルとy軸のデータを引数として渡すだけでグラフを描画できる draw() メソッドを用意している。

継承(extends)ではなく委譲(Composit)を使った理由

ラッパークラスの実装方針として、Chart クラスを継承する方法と、内部に Chart のインスタンスを持つ委譲の方法がある。今回は委譲を選んだ。

継承を使うと、親クラス(Chart.js)のメソッドがすべて外部に露出してしまい、IFが肥大化する。委譲であれば、外部に公開するメソッドを自分で定義できるため、IFをシンプルに保てる。ライブラリのラップには委譲のほうが適していると思う。

実装コード

class WrapBarChart {
    constructor(ctx) {
        this.ctx = ctx;
        this.chart = null;
    }

    draw(labels, data) {
        this.chart = new Chart(this.ctx, {
            type: 'bar',
            data: {
                labels: labels,
                datasets: [{
                    label: 'y軸',
                    data: data,
                    backgroundColor: 'green'
                }]
            },
            options: {
                scales: {
                    y: { beginAtZero: true }
                }
            }
        });
    }
}

const canvas = document.getElementById('myWrapChart');
const ctx = canvas.getContext('2d');

const chart = new WrapBarChart(ctx);
chart.draw(['1月', '2月', '3月', '4月'], [30, 20, 35, 8]);

実際の表示

まとめ

ラッパークラスを作ることで、Chart.jsの細かい設定を隠蔽し、呼び出し側はデータを渡すだけでよくなる。委譲を使うことでIFを必要最小限に絞れる点が気に入っている。

← 一覧に戻る