ブラウザで動く無料の目標管理&進捗可視化Webツールの作り方を紹介する記事のアイキャッチイメージ。日付と達成率の入力欄と、折れ線グラフ・ドーナツグラフ対応。

開発ガイド

【コピペで完成】目標管理&進捗可視化Webツールの作り方|折れ線&ドーナツグラフ対応【HTML&JavaScript】

「JavaScriptでグラフを表示したいけど、どう書けばいいの?」
「Chart.jsを使ってみたいけど、実際のコード例が欲しい!」

そんな方に向けて、この記事では HTMLとJavaScriptだけで動く「目標管理&進捗可視化Webツール」 の作り方を解説します。

このツールでは、

  • 折れ線グラフ で進捗を時系列に可視化
  • ドーナツグラフ で最新の達成率を直感的に表示
  • 入力データを ローカルストレージに保存して再利用可能

といった機能を備えており、コピペですぐ完成するコードも用意しています。

Chart.jsを用いた実践的なサンプルとしても最適で、グラフの基本的な描画方法から応用まで自然に学べます。
初心者の方はもちろん、「具体的なサンプルコードを動かして理解したい!」という方におすすめです。

完成イメージと機能紹介

今回作成する目標管理&進捗可視化Webツールは、以下のような画面構成になっています。

  • 目標名の入力欄
    追いかけたい目標(例:「英語学習」「筋トレ」など)を入力できます。
  • 日付と達成率の入力表(初期5行)
    進捗データを入力するための表形式。行の追加・削除が可能で、柔軟に使えます。
  • 折れ線グラフ(進捗の推移)
    入力したデータを時系列で表示。達成率がどのように変化したかを一目で把握できます。
  • ドーナツグラフ(最新の達成率)
    直近のデータを反映して、今どのくらい達成できているかを視覚的に確認できます。
  • 保存&エクスポート機能
    入力したデータは自動でブラウザに保存され、再度ページを開いた時に復元されます。
    また、CSV形式での書き出しや、グラフをPNG画像として保存することも可能です。

【実際の目標管理&進捗可視化Webツールの動作を試してみたい方はこちらからどうぞ】▼

まずは完成イメージをしっかり掴んでおくことが大切です。どういう機能があるのか理解すれば、コードのどこで何をしているのかが分かりやすくなりますよ。

ほーく
ほーく

完成コード全文|コピペで動かしてみよう

ここからは、実際に動作する「目標管理&進捗グラフWebツール」の完成コードを紹介します。
以下のHTMLをまるごとコピーして、index.htmlとして保存するだけで動作します。特別な環境構築は不要で、ブラウザで開けばすぐにツールを利用できます。

まずはそのまま動かしてみることが大切です。コピー&ペーストで完成版を体験してみれば、コードがどう動いているかイメージしやすくなりますよ。次のセクションで詳しく仕組みを解説しますので、安心して進めてくださいね。

ほーく
ほーく

コード解説|HTML・CSS・JavaScriptを理解しよう

この章では、完成コードの仕組みを HTML・CSS・JavaScript の3つの視点から分解して解説します。コード全文は前章で紹介したので、ここでは主要なポイントにフォーカスします。

1. HTML部分:構造を作る

HTMLはツールの骨組みを構成します。主な要素は以下のとおりです。

  • 入力フォーム部分
    • 目標名(<input id="goalName">)で習慣や目標を入力します。
    • 日付と達成率の入力テーブル(初期5行、行追加・削除可)。
    • 「サンプル入力」「入力をクリア」「グラフ表示」ボタンが揃っています。
  • 保存・エクスポート部分
    • 「保存(この端末)」「保存データを削除」「CSV書き出し」「PNG書き出し」といったボタン群。
    • すべてローカル保存で、サーバー送信はありません。
  • グラフ表示部分
    • 最新達成率を示す ドーナツグラフ
    • 推移を示す 折れ線グラフ(常時ラベル付き)

2. CSS部分:デザインを整える

CSSでツール全体を見やすく調整しています。

  • 2カラムレイアウト
    • PCでは「入力フォーム」が左、「保存+グラフ」が右に並ぶレイアウト。
    • スマホでは縦に積み上がるデザイン。
  • テーブル入力
    • 日付と達成率を入力しやすいようにコンパクト設計。
    • 行追加・削除ボタンのスタイルも統一。
  • グラフ表示
    • canvas部分に余白と枠をつけて、見やすいカード風に。

3. JavaScript部分:動きを作る

JavaScriptでは入力・保存・描画などのロジックを担当しています。

主な機能

  1. 行操作
    • 行を追加・削除する関数 addRow
    • 最大60行まで追加可能。
  2. 入力データの収集と検証
    • collect() 関数で、日付と達成率(0〜100%)をチェック。
    • 空行は無視し、不正な値はエラー表示。
  3. グラフ描画(Chart.js利用)
    • ドーナツグラフ
      最新の達成率を1つの円グラフで可視化。
    • 折れ線グラフ
      推移を常時ラベル付きで表示し、直感的に進捗を確認。
  4. 保存・復元
    • ローカルストレージにデータを保存(自動保存+手動保存)。
    • ページを再読み込みしてもデータ復元可能。
  5. エクスポート機能
    • CSV形式(date,rate)でデータを保存。
    • html2canvasを使ってグラフ部分だけをPNG書き出し。

詳細解説:グラフ描画とPNG書き出しの仕組み

データ収集 → 描画の全体フロー

  1. 入力テーブルから日付と達成率を読み取る
  2. 日付順にソートし、ラベル配列(表示用の日付)とデータ配列(達成率)を作る
  3. 最新の達成率を使ってドーナツ、推移データで折れ線を描く
  4. 描画後に自動保存(localStorage)を行い、次回復元時は自動レンダリング

Chart.js:ドーナツ(最新達成率)描画

  • 最新行(いちばん新しい日付)だけを取り出して達成率 / 残りを円グラフで見せる
  • 1枚で「今どれくらい進んでいるか」を直感表示

主要コード断片(概念)

設定のポイント

  • cutout:ドーナツの中心穴をどれだけ空けるか。大きめ(68%)にして数値が目立つように。
  • legend.display: false:凡例を消して情報密度を最適化。
  • chartjs-plugin-datalabels:“ホバー不要で常時数値表示”を実現。ドーナツの内側中央に大きく%を出します。
  • 色(mainColor:達成率によって緑/紫/青/アンバーに分け、達成感が直感的に伝わる配色にしています。

Chart.js:折れ線(推移)描画

  • 過去→現在の達成率の変化を“折れ線”で見せる
  • 常時ラベル(数値)を泡のように表示し、値読み取りを楽に

主要コード断片(概念)

設定のポイント

  • tension: 0.25:線をなめらかにして視認性UP(0だと直線)。
  • plugins.datalabels.display: true常時%ラベルを表示。小さめのラベル背景・枠線で視認性と可読性を両立。
  • y.max = 100:達成率なので0–100%に固定。比較しやすくなります。

chartjs-plugin-datalabels のポイント

  • 導入:CDNで読み込み → Chart.register(ChartDataLabels)必ず実行。
  • 役割:ツールチップ(ホバー時)ではなく、データラベルを常時表示するためのプラグイン。
  • カスタムformatter で表示テキストを自由に加工(%付与・小数一桁など)。
  • 位置anchor, align, offset で細かい位置調整が可能。折れ線では end/top、ドーナツでは center/center が見やすい構成。

html2canvas:グラフ部分だけをPNG書き出し

  • DOM(HTML要素)を“そのまま画像化”するライブラリ
  • このツールでは グラフ部分のみ(入力テーブルは除外)を書き出し

主要コード断片(概念)

設定のポイント

  • node の選び方#graphsWrap のように書き出したい範囲だけをラップしておくと、入力フォーム等が混ざらない。
  • backgroundColor:PNGはデフォルト透明になりがち。資料用途ではが安全。
  • scale2倍にして高DPI出力 → スライドやSNSで鮮明に。端末性能に応じて 1.5〜3 で調整。

データの整形(並び替えと正規化)

  • 入力順ではなく、日付の古い→新しいに並べてからグラフ化すると推移が正しく表示されます。

概念コード

バリデーションの考え方

  • 必須:日付がある、達成率が空でない、数値、0〜100の範囲
  • 空行は無視:テーブル編集の自由度を確保しつつ、無関係な空行でエラーを出さない

よくあるつまずき(トラブルシュート)

  • ラベルが表示されない/位置がずれる
    chartjs-plugin-datalabels のCDN読み込み忘れ、Chart.register(ChartDataLabels) 未実行が原因になりがち。
  • ドーナツが真っ白/真っ黒
    → データ([達成率, 残り])が NaN になっていないか確認。0/100 の境界値もケア。
  • PNGがぼやける
    html2canvasscale を 2 以上に、backgroundColor を白に設定。
  • スマホで文字が切れる
    maintainAspectRatio:false の上で、親要素の高さ(.canvas-wrap)を十分確保。
  • 日付の順序がおかしい
    → 文字列比較ではなく Dateオブジェクトでソートしているか確認。

今回は「折れ線グラフ」と「ドーナツグラフ」で進捗を表現しましたが、Chart.jsには他にも棒グラフやレーダーチャートなど多彩な表現方法があります。

ほーく
ほーく

おすすめの学習リソース|JavaScript&グラフ化をもっと学びたい人へ

「今回のツールをもっと改造してみたい!」「画像処理の仕組みやJavaScriptを深く理解したい!」という方に向けて、厳選した学習リソースをご紹介します。

書籍編

『確かな力が身につくJavaScript超入門』(SBクリエイティブ)

  • JavaScriptの基礎文法からDOM操作、イベント処理まで体系的に学べます。
  • 今回のようなWebツールを自作するスキルが自然と身につきます。
  • 実例が豊富なので、「こういう機能を作りたい!」という時の参考書にもなります。

『スラスラわかるHTML&CSSのきほん』(SBクリエイティブ)

  • HTMLやCSSの基本構造から、見た目を整えるためのテクニックまでを網羅。
  • ツールのUI(ユーザーインターフェース)を改良する際に役立ちます。
SBクリエイティブ/狩野祐東

オンライン講座編

Udemy|世界最大級のオンライン学習プラットフォーム

世界中で利用されるオンライン学習サイト。
HTML、CSS、JavaScriptの入門から応用まで、高評価の講座が数百種類揃っています。
初心者でも動画を見ながら手を動かせるので、挫折しにくいのが魅力です。

Udemy公式サイトで探す

Udemyおすすめ講座

【HTML,CSS,JS,PHP,Git,Docker】プログラミング初心者OK! ゼロからわかるWebシステム開発

  • 実際に手を動かしながら学べる実践型講座。
  • 初心者でも、コードの意味が理解できるよう丁寧に解説されています。
  • 自作ツールのカスタマイズや新機能追加にも応用可能。

他にも講座を探したい方はこちら → UdemyのWeb開発カテゴリー講座

まとめ

今回は、目標管理&進捗可視化Webツール をHTMLとJavaScriptでゼロから作る方法を解説しました。完成コードをそのままコピペすればすぐに動作するだけでなく、コードの仕組みを理解すればカスタマイズの幅が一気に広がります。

  • 入力フォームで日付と達成率を記録できる
  • Chart.jsで折れ線グラフ&ドーナツグラフを描画して進捗を可視化できる
  • html2canvasを利用してグラフをPNGとして保存できる
  • ローカルストレージ保存により、サーバー不要でデータを保持できる

といった機能を通して、実用性の高いWebアプリの基本を体験できたはずです。
さらに今回学んだコードをベースにすれば、発展的なツール開発へとステップアップすることも可能です。
ぜひこのツールを、あなたのWebアプリ開発の第一歩として活用してみてください。

-開発ガイド
-, , , , ,