• #日記
  • #VOICEVOX
  • #SVGアニメーション
  • #Nuxt
  • #Cloudflare
daily-log

2026年5月6日の開発日記

今日は eurekapu-nuxt4 プロジェクト一本に集中した。朝は財務3表コクピット画面のホバー連動ハイライトから始まり、昼前には22取引アニメーションの表示バグを踏み、午後はずんだもんの音声を132本生成してR2にデプロイするところまで進んだ。

今日のタイムライン

タイムライン


今日やったこと

1. 財務3表コクピット:ホバー連動ハイライトとグレースケール改善

昨日の積み残しだった「Z軸浮き上がり」を実装した。BS・PL・CSの対応セルが仕訳プッシュ時に同時にアウトラインでハイライトする機能で、3ペアをそれぞれ別色(teal・amber・他)に色分けしている。

あわせてユーザーが「二重線になってる」と画像で指摘した外枠のSVG矩形(cue-box)も削除し、破線アウトライン1本だけに整理した。合計行の背景も「黒+白文字」から「GLグレー薄め+黒文字」に変えてBSバランス照合スクリプト(verify.mjs)も新ID体系に対応させた。

主な成果:

  • hoverPairId +ポインターハンドラで3ペアのホバー連動を実装
  • SVG cue-box 矩形を削除(CSS破線アウトラインのみ残す)
  • BS/PL/CS合計行をGLグレースケール+黒文字に統一
  • verify.mjs を「最終残高照合+BSバランスチェック」方式に書き直し(contra科目の符号バグも修正)
  • /lessons の財務3表カードにリンクを追加(topics.tscockpit-00-summary を追記)

詳細: 財務3表コクピット:ホバー連動ハイライトとグレースケール合計行の改善


2. 22取引アニメーション:Nuxtコンポーネント登録と花火SMIL化

確認ページ(/dev/journal-push-animation-test)を開いたら全SVGが空白だった。Nuxtが DevTransactionsTransactionNo01Animated と登録しているのに、ページ側が <TransactionNo01Animated> と呼んでいたのが原因。nuxt.config.tspathPrefix: false で追加登録して解消した。

続いて no08(買掛金発生シーン)の花火アニメーション実装でCSS transform がSVG要素に効かないことを発見し、SMILに切り替えた。no09の座標計算ミスも修正。

主な成果:

  • nuxt.config.tscomponents/dev/transactions/pathPrefix: false で追加
  • no08 花火アニメーションをCSS→SMIL(<animateTransform> + <animate>)に切り替え
  • no09 のbefore座標(お金袋・リンゴ)の計算ミスを修正
  • no06 のインラインSVGを memo/ に抽出(Illustrator編集用)

詳細: 22取引アニメーション:Nuxtコンポーネント登録ミスとSMIL花火アニメーション


3. VOICEVOXずんだもん:132ステップ音声生成からR2デプロイまで

財務3表コクピットの解説カードにずんだもん(speaker_id=3)音声を追加する機能を実装した。UIは「解説ボタン+音声切替ボタン」を四角枠でグループ化し、倍速切替(1.0×/1.5×/1.8×)とデバッグ用リピートボタンも追加。

全取引ガイド132ステップを tsx スクリプトで一括生成(generated=128/errors=0)してCloudflare R2にアップロードした。途中でVOICEVOX辞書の読み誤りが8種類発覚し、前処理ルールを追加しながら該当ファイルを逐次再生成した。

主な成果:

  • showGuideStep 時に音声再生、closeGuide 時に停止を実装
  • 倍速切替(1.0×/1.5×/1.8×)をUIに追加
  • VOICEVOX:ずんだもん クレジット表示
  • 132ステップ一括生成スクリプト(tsx)を作成・完走(errors=0)
  • Cloudflare R2 へ132ファイルをアップロード(errors=0)

詳細: ずんだもん音声解説を財務3表コクピットに組み込む:132ステップ一括生成とR2デプロイ


今日の試行錯誤

#テーマ試したこと結果気づき
1SVG二重線画像で「枠が1本多い」を確認cue-box矩形削除で解消SVGとCSSで二重に枠を描いていた
2花火アニメーションCSS @keyframes + transformSVGに効かず(identity固定)SVGにはSMILが必要
3花火SMIL化<animateTransform> + beginElement()動作確認済みsvgRef.querySelector で要素を直取りする方式
4verify.mjs クラッシュインデックス参照でクラッシュ照合方式を書き直しエントリー増加(27→30件)でインデックスがずれていた
5B/S 誤読VOICEVOX辞書登録(半角)全角B/Sに揃えて再生成で解消辞書は全角で登録されていた
6132本のR2アップロードバックグラウンドでwranglerループバッファリングで詰まるフォアグラウンドに切り替えると完走
7Nuxt コンポーネント未表示DevTransactions~ vs <TransactionNo~> の名前不一致pathPrefix: false で解消Nuxtのディレクトリベース命名がそのままプレフィックスに

今日の学び

  • CSS の transform は通常のDOM要素には効くが、SVGの子要素には効かない(transform-box: fill-box を設定してもSMILの方が確実)
  • VOICEVOX辞書は半角・全角を区別する。生成テキストと辞書の表記を揃えないとマッチしない
  • Nuxt のコンポーネント自動登録はディレクトリ構造がそのままプレフィックスになる。dev/transactions/ 配下は DevTransactions~ になる

関連記事