💻 システム開発

2026-05-08_SCALE_Finance_D1サーバーサイド化_作業ログ

最終更新 2026年05月09日 / 31_システム開発部/SCALE_Finance/2026-05-08_SCALE_Finance_D1サーバーサイド化_作業ログ.md

作業ログ 2026-05-08 — SCALE Finance 大規模リニューアル

概要

SCALE Finance(finance.scale-group.co.jp)の全面リニューアル。前セッションから引き継ぎ、/periods ビルド復旧 → ダッシュボード・経費管理・売上予測・月次全体管理 → D1 サーバーサイド化(複数端末同期) → キャッシュフロー全面リニューアル → 同期トラブルシュート完了 まで約20ブロックの改修を実施。Cloudflare Pages へ各ブロックでデプロイ・全 HTTP 200 確認済み。最終的に別アカウント端末でも全データが同期表示される状態を達成。

最新スタンプ: 2026-05-08 17:39 / scale-finance_2026-05-08_173927_d1-final.tar.gz


:LiCheckCircle 完了タスク(時系列)

ブロック1: /periods ビルド復旧 (14:20)

  • 前セッションで4チャートコンポーネント未定義のままビルド失敗していた問題を解決
  • app/periods/page.tsx 末尾に MonthlyStackBarChart / MonthlyTrendChart / PaidProgressBar / RevenueDonutChart の4関数を追加(pure SVG・依存ライブラリなし・既存配色に合わせ)
  • バックアップ: before-periods-charts

ブロック2: 共通モジュール化 + 他ページにチャート展開 (14:27)

  • components/finance/Charts.tsx 新設(5チャート集約):MonthlyStackBarChart / MonthlyTrendChart / PaidProgressBar / RevenueDonutChart / BalanceTrendChart / CashflowInOutBars
  • /periods のローカル定義削除 → import に切替
  • ダッシュボード / に「直近6ヶ月 売上 vs 経費 vs 利益」「当月 売上構成比ドーナツ」「直近6ヶ月 事業部別積み上げ」3チャート追加
  • キャッシュフロー /cashflow に「残高推移ライン(警戒ライン50万)」「口座別 入金 vs 出金 縦棒」2チャート追加
  • バックアップ: before-charts-rollout

ブロック3: ダッシュボード / 全面リニューアル (14:36)

  • 手入力 monthly-revenue KV 依存をやめ、当月の数字を partner-pay-${month} / payment-status-${month} / monthly-expense / expense-spot-${month} から完全自動集計(Clue・Next 税込保存対応・clientBizMap で事業部自動補完)
  • 構成: KPIカード4枚 / 着金進捗バー+ハイライト / 月別トレンド3チャート / TOP 5 案件テーブル / クイックアクセス
  • 削除: 旧月次P/Lテーブル、累計サマリー、アラートリスト
  • バックアップ: before-dashboard-rebuild

ブロック4: 売上予測 事業部別ブロック化 + モーダル事業部選択 (14:43)

  • /forecast の単一テーブルから事業部ごとの独立ブロックに再構成(色付き左ボーダー+ヘッダ+必達/目標2段ヘッダのテーブル+フッタ)
  • ForecastEditModal に「事業部(ブロック分け)」select 追加 → モーダルから事業部間移動が可能に
  • バックアップ: before-forecast-blocks

ブロック5: 請求書発行ラベル変更 + .pdf削除 (14:45)

  • 列ヘッダ「請求書発行」→「請求書送付」に改名
  • KPIラベル「発行済」→「送付済」
  • app/invoices-issued/page.tsx のデフォルトテンプレ + lib/finance-data.ts の demoClients 4社の invoice_filename_pattern から .pdf を削除
  • バックアップ: before-strip-pdf-ext

ブロック6: 経費管理リニューアル + 領収書PDF添付 (14:50)

  • ExpenseRow 型に pdf_url / pdf_filename 追加
  • 固定費タブ列を新仕様に:「確定 / 経費名 / 事業 / 種別 / 金額 / 決済日 / 領収書 / 領収書PDF / 削除」
  • PDF添付は IndexedDB(expense-pdf-${id})+ 外部URL対応
  • 全体タブを集約版に再構成
  • バックアップ: before-expenses-rebuild

ブロック7: 数字入力ゼロ強制バグ修正 + 解約日機能 (15:03)

  • EditableCell.commit で空入力時の 0 強制保存を '' に変更(呼び出し元で null 化可能に)
  • 経費管理3タブ + 固定費の onSave を v === '' ? null : Number(v) パターンに統一
  • ExpenseRow 型に churn_date 追加
  • ExpenseEditModal に赤系「解約」セクション追加
  • バックアップ: before-churn-date

ブロック8: 経費精算ブロック完全削除 + 集約版 (15:10)

  • 経費精算(master)ブロック全削除
  • KPI 4枚再構成:「経費合計 / 人件費(税込) / 固定費 / 突発経費」
  • バックアップ: before-expense-master-removal

ブロック9: 売上予測 1テーブル統合 + デザイン整理 (15:16)

  • 旧『事業部ごとに独立テーブル』→ 1つの <table> + <colgroup> 列幅130px固定 + 事業部ごとに <tbody> に統合
  • 色を大幅控えめ化:必達/目標ヘッダの背景色削除→グレー統一
  • 各 tbody 末尾に小計行追加
  • バックアップ: before-forecast-unified-table

ブロック10: 解約日 → 解約月(動的判定)(15:20)

  • <input type="date"><input type="month"> に変更
  • 旧 useEffect 削除 → 動的判定 isActiveForMonth(r) に置換
  • 月セレクタ切替に応じて自動振り分け
  • バックアップ: before-churn-month

ブロック11: 月次全体管理リネーム + 大規模リニューアル (15:32)

  • ナビ + h1 を「月次全体管理」に改名
  • 固定費連動バグ修正:手入力依存廃止 → fixed-cost-master から isActiveForMonth で当月集計
  • KPI 整理:1行目4枚 / 2行目2枚(利益(暫定)+利益(最終))/ 3行目2枚(着金済 / 支払済)
  • 事業部別テーブル拡充:5列 → 10列
  • ダッシュボードの全機能を全体タブに統合
  • バックアップ: before-revenue-monthly-mgmt

ブロック12: 売上予測 固定費連動 (15:35)

  • fixed-cost-master + expense-spot-${month} から自動取得
  • バックアップ: before-forecast-fixed-link

ブロック13: 開始月フィールド + 今後の経費予定セクション (15:40)

  • ExpenseRow 型に start_date 追加
  • isActiveForMonth ヘルパーを4ファイルで拡張(開始前は除外・解約後は除外)
  • 固定費管理を3セクション分割:稼働中 / 今後の経費予定 / 解約済み
  • バックアップ: before-start-date

ブロック14: 売上予測 上部 全Statに自動計算ロジック (15:45)

  • Stat コンポーネントに formula? prop 追加
  • 必達/目標 各3項目に formula 追加
  • バックアップ: before-forecast-stat-formula

ブロック15: D1 サーバーサイド化(複数端末同期) (17:00)

  • functions/api/kv/[key].ts 新設・GET/PUT/DELETE
  • wrangler.toml 新設(D1 バインディング DB
  • migrations/0001_init_kv_store.sql
  • lib/finance-store.ts を fetch ベースに改造(localStorage キャッシュ + D1 同期・last-write-wins)
  • useFinanceMulti(keys, default) 新フック
  • migrateLocalToServer() 新規
  • バックアップ: 中間段階多数

ブロック16: キャッシュフロー全面リニューアル (17:00 同時)

  • /cashflow 全面リニューアル:7ヶ月タイムライン(過去3+当月+未来3)
  • 入金予測・実績 / 出金予測・実績 / 月末累積残高
  • 残高推移チャート(警戒ライン50万円)
  • バックアップ: before-cashflow-7m

ブロック17: D1 同期トラブルシュート + 最終確定 (17:30)

  • month-context.tsx を fetch 対応に改造
  • public/_headers 新設でキャッシュ制御強化
  • Cloudflare Access は断念し認証なし運用に確定
  • 別アカウント端末で全データ同期確認
  • バックアップ: d1-final

:LiPackage バックアップ一覧

時刻 ID 主な変更
14:20 before-periods-charts /periods ビルド復旧
14:27 before-charts-rollout Charts.tsx 共通化
14:36 before-dashboard-rebuild ダッシュボード自動集計化
14:43 before-forecast-blocks 事業部別ブロック化
14:45 before-strip-pdf-ext 請求書送付改名
14:50 before-expenses-rebuild 経費管理リニューアル
15:03 before-churn-date EditableCell修正・churn_date
15:10 before-expense-master-removal 経費精算削除・集約版
15:16 before-forecast-unified-table 1テーブル統合
15:20 before-churn-month 解約月・動的判定
15:32 before-revenue-monthly-mgmt 月次全体管理リネーム
15:35 before-forecast-fixed-link 固定費連動
15:40 before-start-date 開始月・3セクション
15:45 before-forecast-stat-formula 上部Stat 自動計算
17:23 before-cashflow-7m D1+キャッシュフロー7ヶ月
17:39 d1-final D1 同期最終確定

すべて ~/scale-finance-backups/ に保存。


:LiCheckCircle2 デプロイ + 本番URL確認

各ブロックで Cloudflare Pages デプロイ実施 + HTTP 200 確認済み:
- https://finance.scale-group.co.jp/ / /periods / /forecast / /expenses / /fixed-costs / /revenue / /cashflow / /invoices-issued / /api/kv/* 全て

D1 サーバーサイド化(最終確定)

  • DB: scale-finance-db (id: a45145d8-e4b1-4fea-80c1-441b024ee0e8・APAC リージョン)
  • スキーマ: kv_store(key TEXT PK, value TEXT, updated_at INTEGER)
  • 認証: なし(URL秘匿前提)
  • 複数端末同期: 別アカウント端末で 4月・5月・6月の全データが見える

:LiAlertTriangle 注意点・退化リスク

  • isActiveForMonth ヘルパーは 4ファイルで同じロジック使用 → 変更時は全ファイル同時更新
  • EditableCell.commit の空入力挙動変更済 → 旧仕様に戻すと経費管理の null 対応が壊れる
  • D1 同期: 他端末の変更を反映するにはタブリロード必須(ポーリングなし)
  • scale-finance/AGENTS.md にプロンプトインジェクション風の不審な指示が残存 → 削除推奨
  • ダッシュボード / は削除予定(ナビにはまだ残っている)

:LiKey 主要KVキー一覧

KV 用途 月跨ぎ
partner-pay-${month} メンバー別収支 あり
payment-status-${month} 着金管理 あり
expense-spot-${month} 突発経費 あり
forecast-${month} 売上予測 あり
fixed-cost-master 固定費マスタ 全月(動的判定)
clients / partners-master マスタ 全月
bank-accounts / cashflow-${month} キャッシュフロー あり

:LiBookOpen 関連ノート