財務3表コクピット画面のハイライト実装とグレースケール適用を進めた日。SVGの二重線バグを目視で発見して修正し、verify.mjs がクラッシュしていたのを照合ロジックの書き直しで解決した。
ホバー連動ハイライトを3ペア色分けで実装
コクピット画面には BS・PL・CS のセル間をつなぐ SVG オーバーレイがある。ユーザーがセルにホバーすると、対応するセルが同時に光るという仕掛けだ。
最初の実装は単色ピンクで全ペアを塗りつぶしていた。これだと「どのペアが反応しているか」が視覚的に区別できない。3種類の対応関係を異なる色で分けることにした。
- 当期純利益ペア → amber
- 現金ペア → teal
- その他 → デフォルト色
CockpitJournalExample.vue に hoverPairId リアクティブ変数を追加し、ポインターイベントハンドラを仕込む。
const hoverPairId = ref<string | null>(null)
const onCellPointerEnter = (pairId: string) => { hoverPairId.value = pairId }
const onCellPointerLeave = () => { hoverPairId.value = null }
CockpitMatchCueOverlay コンポーネント側では hoverPairId を props で受け取り、ペアIDに応じてカラークラスを切り替える。CSS でペアごとのアウトラインカラーと pop キーフレームを定義した。
ブラウザで確認すると、BS の「現金及び預金」にカーソルを乗せた瞬間、CS の「現金及び預金期末残高」が同時に teal のアウトラインで浮き上がった。狙い通りに動いた。
SVG二重線を目視で発見して削除
動作確認中に画面を眺めていると、ハイライトボックスの外枠に線が1本多く見えた。CSS の破線アウトラインに加えて、SVG の <rect class="cue-box"> が重なっていた。
実装を振り返ると、初期実装時に「外側のボックスとアウトライン両方を持たせる」設計にしていたが、CSS 側でアウトラインを実装した時点で SVG の矩形は不要になっていた。削除対象は3点。
- SVG の
<rect class="cue-box">要素 - CSS の
.cue-boxスタイル定義 - CSS の
@keyframes cue-box-popアニメーション
削除後、コネクター矢印線は残したまま、CSS の破線アウトライン1本だけが表示される状態になった。見た目がすっきりした。
合計行の黒背景を GLグレースケールに置き換え
BS・PL・CS それぞれの合計行(資産合計、負債・純資産合計、当期純利益など)は、tr.total に黒背景 + 白文字のスタイルが当たっていた。
SVG ダイアグラムで使っている IB フォーマットの 8 段階グレー濃淡を合計行にも適用する指示が来た。「薄い方から使って、文字は黒のまま背景のグレー濃淡だけで区別する」という方針。
BS・PL・CS の 3 ファイルを並列で編集した。
/* Before */
tr.total td {
background-color: #000;
color: #fff;
}
/* After */
tr.total td {
background-color: #d1d5db; /* GL グレー薄め */
color: #111827;
}
黒背景が消えて、表全体のトーンが揃った。数字が白文字から黒文字に変わったことで読みやすくなった。
/lessons ページへのリンクを追加
財務3表カードが「準備中(グレーアウト)」のままになっていた。コクピット画面のドラフトページが存在するので、topics.ts の media.notes に cockpit-00-summary を追加してリンクを有効化した。グレーアウトが「ドラフト →」付きのリンクに変わり、ページ間のナビゲーションがつながった。
verify.mjs のクラッシュを照合方式の書き直しで解消
verify.mjs は transactions.ts の BS バランスを自動照合するツールで、エントリーをインデックスで参照していた。エントリー件数が 27 件から 30 件に増えたタイミングで、インデックスが配列範囲を超えてクラッシュした。
TypeError: Cannot read properties of undefined (reading 'amount')
インデックス参照をやめて「最終残高照合 + BS バランスチェック」方式に書き直した。科目名で残高を引くため、順序変更や件数増加に対して安定する。
書き直し中に 減価償却累計額 の符号処理バグも見つかった。contra 科目(資産のマイナス)を通常の資産と同じ符号で加算していたため、BS の資産合計がずれていた。符号を反転させる処理を追加して修正した。
3 チェック(勘定残高照合・BS バランス・期間純利益照合)が全て ✅ になったことを確認してコミットした。
まとめ
| 作業 | 内容 |
|---|---|
| ホバー連動ハイライト | 3ペア色分け(amber / teal / default)で実装 |
| SVG 二重線解消 | cue-box 矩形と関連 CSS を削除 |
| 合計行グレースケール | 黒背景 → GL グレー薄め + 黒文字に変更 |
| リンク有効化 | /lessons の財務3表カードをドラフトリンクに変更 |
| verify.mjs 修正 | インデックス参照 → 科目名照合に書き直し + contra符号バグ修正 |
ハイライトの色分けで「どのセルが対応しているか」が目で追えるようになった。グレースケール合計行は黒背景より目に優しく、表のコントラストが落ち着いた。verify.mjs は件数が増えても壊れない設計になった。