家計簿アプリを作る #49:年間サマリーにグラフを追加

家計簿アプリ作成シリーズの第49回です。年間サマリーページはこれまでテーブルだけでしたが、月別収支の推移を視覚的にも掴めるよう、既存の月次推移グラフと同じ要領で棒グラフを追加します。

実装方針

収支一覧ページの「月次推移」グラフとほぼ同じ構造で、データソースを data.monthlyData(全期間)から data.monthlyTransactions(選択した年のみ)に変えるだけで作れました。

const yearlyData = $derived({
  labels: data.monthlyTransactions.map((d) => d.month),
  datasets: [
    {
      label: "収入",
      data: data.monthlyTransactions.map((d) => d.totalMonthlyIncome),
      backgroundColor: ["rgba(34, 197, 94, 0.5)"],
      borderColor: ["rgb(34, 197, 94)"],
      borderWidth: 1,
    },
    {
      label: "支出",
      data: data.monthlyTransactions.map((d) => d.totalMonthlyExpense),
      backgroundColor: ["rgba(239, 68, 68, 0.5)"],
      borderColor: ["rgb(239, 68, 68)"],
      borderWidth: 1,
    },
  ],
});

ハマりポイント:テンプレート内でJSコメントは使えない

グラフ部分にコメントを残そうとして、<script> の外(HTMLテンプレート部分)に // グラフ のようにJS風のコメントを書いてしまい、コンパイルエラーになりました。

<!-- ❌ テンプレート内でJSコメント構文は使えない -->
// グラフ
<div>
  // 月次推移
  <Bar ... />
</div>

Svelteのテンプレート部分はHTMLの一種なので、コメントはHTMLコメント(<!-- -->)で書く必要があります。

<!-- ✅ HTMLコメントを使う -->
<!-- グラフ -->
<div>
  <!-- 月次推移 -->
  <Bar ... />
</div>

<script> の中とテンプレートの中とでコメント構文が違う、という基本的なところですが、既存のグラフ実装をコピーする際にうっかり混同してしまいました。

まとめ

ポイント 内容
グラフの再利用 既存の月次推移グラフとほぼ同じ構造で、データソースだけ差し替えれば作れる
テンプレート内のコメント <script> 外では // ではなく <!-- --> を使う
← トップページに戻る