• #日記
  • #EDINET API
  • #Turso
  • #Excel講座
  • #VOICEVOX
  • #マルチテナント
daily-log

2026年4月10日の開発日記

朝6時からEDINET DB APIと格闘し、財務データの単位混在問題を踏み抜いた。午後はSQLite→Turso移行の計画をCodexにレビューさせて書き直し、マルチテナントDBアーキテクチャの議論で一日の半分を使った。合間にExcelショートカット講座の移行を完了させ、ずんだもんの音声ナレーションを試作して撤回するという寄り道もあった。

今日やったこと

1. EDINET DB API + 財務データ分析・チャート生成

朝一でJ-Quants APIを調べたが、財務諸表の詳細はプレミアムプラン限定と分かり5分で撤退。EDINET DB APIに切り替えて会計ソフトA・Bの財務データを取得し、Turso DBに格納した。既存ブログ記事の数字と突合したところ、研究開発費で円単位と千円単位がAPI内で混在している問題を発見。Postmanでの生データ確認を経て、IRBankスタイルのHTML年次推移チャートと四半期データテーブルを生成した。

主な成果:

  • 会計ソフトA・BのEDINETデータをTurso DBに格納
  • API単位混在問題の発見と対処
  • 年次8指標 + 四半期5指標のHTMLチャート完成(±両方向バー、売上高共通スケール)
  • 研究開発費→ソフトウェア資産計上の付け替え構造を分析

詳細: EDINET DB APIで財務データを取得しIRBankスタイルの年次・四半期チャートを生成した


2. Turso DB移行計画 + マルチテナントDBアーキテクチャ設計

書籍OCRデータ16冊分のSQLite(FTS5全文検索付き)をTursoに載せ替える計画を立てた。Codexレビューで「FTS5互換性未検証」「データサイズ未確認」「ロールバック手順欠如」の3点を指摘され、計画を修正。Phase 0(FTS5検証)に着手したが.env設定で積み残し。そこから会計データのTurso格納設計、DB-per-tenant vs 共有DB+RLS、シャーディング、Supabase RLS事故パターンまで一気に掘り下げた。

主な成果:

  • Turso移行計画の策定(Codexレビュー反映済み)
  • B2B→DB-per-tenant、B2C→共有DB+RLSの使い分け整理
  • マルチテナントDB設計のまとめドキュメント作成・メール送信
  • Supabase RLS設定漏れパターンの検証

詳細: Turso DB移行計画とマルチテナントDBアーキテクチャ設計


3. Excelショートカット講座の移行完了・改善・VOICEVOX音声テスト

前日の積み残し5タスクを棚卸しし、字幕品質改善に着手。「字幕は動画の操作実況、文脈説明はtextsに入れる」という役割分担に気づいて方針転換し、textsコンテンツの品質レビューと補強を実施。まとめページをCtrl系/Alt系/Other系の種別タグ付き全講座目次テーブルに統合し、StreamDeck紹介ページの移植、パンくずリスト追加、非推奨ショートカットの注記も完了。VOICEVOX(ずんだもん)で音声ナレーションを試作したが、商用利用のクレジット表記が必要と判明し撤回。動画音声ON/OFFトグルのみ残した。

主な成果:

  • 全57ページの移行完了確認(対応表作成)
  • textsコンテンツ品質改善(プレースホルダー解消、演習テキスト追加)
  • まとめページの統合リファクタリング(セミラティス構造)
  • VOICEVOX音声テスト→撤回の判断
  • Git LFS 195MB問題の解決

詳細: Excelショートカット講座の移行完了・字幕とtextsの役割分担・VOICEVOX音声テストの顛末


今日の試行錯誤

#テーマ試したこと結果気づき
1財務データ取得J-Quants API調査撤退財務諸表詳細はプレミアムプラン限定
2データ突合EDINET APIデータと既存記事の数字を比較差異発見研究開発費で円/千円単位が混在
3広告宣伝費EDINET APIから取得を試みるAPIに項目なしIRBankの手動データで補完、概算値は危険
4有報PDF解析テキストブロックAPIで内訳を探す記載なしPDF直接解析でPython変換→101ページ目に発見
5字幕品質改善字幕テキストに文脈説明を追加方針誤り字幕は操作実況、文脈はtextsの役割
6texts表示texts配列に2要素目を追加表示されずtextsidxでスライド対応、1枚なら0のみ表示
7Turso移行計画最初の3フェーズ計画を策定指摘3点FTS5互換性・データサイズ・ロールバック手順が抜け
8ずんだもん音声VOICEVOXで7字幕分の音声生成機能は動いた商用利用のクレジット表記要件で撤回
9Git push通常のgit pushが拒否されるLFSが原因git lfs push --allで195MB分を先にアップロード

今日の学び

  • EDINET DB APIのレスポンスは項目ごとに単位が異なる場合がある。同一レスポンス内でrevenueは円単位、rnd_expensesは千円単位ということが実際に起きる
  • IRBankに載っている広告宣伝費・のれん償却額はEDINET APIには含まれない。補完する場合はデータソースを明記する
  • 字幕(subtitles)とテキスト(texts)は役割が違う。字幕は動画操作の実況、textsは文脈説明
  • DB-per-tenantはB2Bで有効、B2CはRLS付き共有DBが現実解。Tursoが推奨する理由はSQLiteのファイルベース特性でDB作成コストが極めて低いから
  • Supabase RLS設定漏れは「RLS有効 + ポリシーなし + service_role key使用」パターンが最も危険

関連記事