ダッシュボードアプリの作り方(自分用メモ:忘却対策)
Step.1 まず「必要なCSVの仕様」を固める(イメージCSVを作る)
最初にやるべきは、Web側で必要になるCSVの“形”を決めること。実データをいきなり触らず、列名・型・単位・例値を入れた「イメージCSV(ダミーCSV)」を1つ作る。ここで、欠損値の扱い(空欄か0かNULL相当か)、時刻の表現(YYYY-MM-DD / ISO8601 / Unix秒)、IDの粒度(利用者/便/停留所など)も決めておく。後工程は、このCSV仕様を“契約”として進める。
Step.2 イメージCSVを再現できるSQLを起こす(出力列をCSV仕様に合わせ込む)
次に、Step.1で決めたCSVの列をそのまま出せるようなSQLを作る。重要なのは「DBの都合で出せる列」ではなく「CSV仕様どおりの列」をSQL側で作ること。必要なら、JOIN・集約・CASE・日付処理などで整形し、列名もCSVの列名に合わせてASで揃える。ここで“SQLの出力=CSV仕様”まで持っていく。
Step.3 SQL結果をCSVとして確定させる(ヘッダ・順序・文字コードまで固定)
SQLが出せたら、その結果をCSVファイルに落とし、Step.1のイメージCSVと同じ体裁に整える。列順、ヘッダ名、区切り(カンマ/タブ)、改行(LF/CRLF)、文字コード(UTF-8/SHIFT-JIS)、小数点桁、日付書式をここで固定する。Web側は「このCSVが来る」ことしか見ないので、この時点でCSVを“ベースの正”として確立する。
Step.4 CSVを読み込んで表示する単体HTMLを作る(まずはindexに入れない)
次に、そのCSVだけを読み込んで表示するHTMLを作る。ここではindex.htmlに統合せず、単体で動く最小構成(CSV読み込み→パース→表示)を先に完成させる。CSVの列名が想定どおりか、欠損が来たときに落ちないか、日付範囲が変わって件数ゼロでも表示が崩れないか、など「表示側単体の安定性」をここで担保する。
Step.5 server.pyへSQLを組み込む(index統合前にコマンドで厳密検証)
server.pyにSQLを組み込み、日付などの入力条件を変えたときに、CSV(またはバッファ)が確実に更新されることを、コマンドプロンプトから徹底的に確認する。ここは最重要で、Web画面で確認し始める前に「入力→SQL→出力(CSV/バッファ)」の流れが正しく動くことを保証する。キャッシュが残って古い結果を見ていないか、同一条件で再実行したときに再現性があるか、境界日(start/end)でズレがないかを潰す。
Step.6 index.htmlへ統合して、期待動作になるまで反復テスト
最後に、Step.4で作ったHTML(または表示部品)をindex.htmlへ組み込み、実運用の導線(範囲変更→同期→再読込→表示更新)を通してテストを繰り返す。ここは表示とサーバの結合不具合(リロード順序、fetchのcache設定、iframeの更新、レンダリングのタイミングなど)が出やすいので、Step.5までで“データ生成が正しい”ことを確定させてから、UI統合の問題として切り分けて潰す。期待どおりの動きになるまで、統合→確認→修正を繰り返して完成させる。