2026年3月25日の開発日記
朝6時、EDINET APIの403が返ってきて手が止まった。User-Agentを差し替えたら14年分の財務データが一気に流れ込んだ。昼はChrome拡張のUI設計と格闘し、夜はIllustratorのCOMレジストリを.regファイルで手動修復していた。3つのプロジェクトが並走した一日。
今日やったこと
1. EDINET API × 会計ソフト財務比較分析
EDINET DB APIを使って、クラウド会計大手2社とオンプレ大手2社の計4社の財務データをGoogleスプレッドシートに取得した。Windowsシェルの引数長制限でJSON書き込みが切れる問題にぶつかり、10行ずつのチャンク分割で回避。
売上が近い年度のPL実額比較から、粗利はほぼ同水準なのに販管費が2倍→営業利益に大差が出るSaaS vs オンプレの構造差が浮かび上がった。一人当たり売上高(RPE)の日米ベンチマーク比較SVGチャートも作成。
主な成果:
- 4社14年分のPL/BS/CF + 四半期データをスプレッドシートに格納
- RPE比較でオンプレ型がクラウド型の5倍という事実を可視化
- 「SaaSがオンプレを駆逐した」は起きていない→市場拡大で棲み分けている構図を発見
- APIレスポンスをローカルJSON保存する2段階方式でAPI呼び出し節約
詳細: EDINET API で会計ソフト4社の財務データを取得・比較した記録
2. 会計Chrome拡張:帳表×年度マトリクスUI大規模リファクタリング
3タブUI(連携明細・仕訳帳・残高試算表)を事業者単位の統合ビューに再構成し、さらに帳表×年度のマトリクスUIに進化させた。推移表エクスポート機能も新規追加。HTMLスクレイピングでBS/PLテーブルを取得し、1シートに縦結合する方式。
スプレッドシートの自動作成機能(URL未設定時にエクスポート実行で新規SS作成)も実装。Google Sheets APIのautoResizeDimensionsの既知バグにハマり、Codexに相談→3フェーズ分離を試すも失敗→データ計算方式で決着。
主な成果:
- 帳表×年度マトリクスUI(1列目に帳表名、列に年度、チェックボックスで個別選択)
- 推移表エクスポート(補助科目あり/なしの2バリアント)
- スプレッドシート自動作成(drive.fileスコープ)
- URL設定済み事業者を上にソート
- Codexレビューで致命的指摘2件を修正
詳細: 会計Chrome拡張 - 帳表×年度マトリクスUIへの大規模リファクタリングと推移表エクスポート追加
3. 会計Chrome拡張:バグ修正とUI磨き込み
連携明細が3重に表示されるバグを修正。原因は3つのURL入力フィールドのautoSaveが同時にpopulateEntityServiceList()を呼び出し、async/awaitのインターリーブで3重にDOMに追加されていた。makeAsyncQueueで排他制御を入れ、純粋関数に分離。
列幅自動調整もデータの最大文字数から計算する方式に切り替え、全選択系チップのスタイル統一やBS/PL縦結合なども実施。
主な成果:
- 連携明細3重表示バグの修正(排他制御 + 純粋関数分離)
- calcColumnWidths純粋関数による列幅計算
- chrome.tabs.create失敗時のガード追加
- 全帳表・全年度・全選択のスタイル統一
詳細: 会計Chrome拡張:連携明細の重複表示バグ修正・列幅自動調整・UI統一
4. Illustrator/After Effects ExtendScript自動化
Illustrator MCPサーバーをビルドしてCOM接続を試みたが、Beta版がレジストリを全上書きしていて繋がらない。Betaをアンインストール→CLSIDが空→.regファイルで手動修復という泥臭い作業を経て接続成功。
MCPサーバーの限界を認識し、Claude CodeからVBScript→ExtendScript直接実行に切り替え。After Effectsでは148レイヤーの12秒シネマティックイントロを生成し、実際の動画素材にエフェクトをかけてMP4レンダリングまで完了。
主な成果:
- IllustratorのCOMレジストリ修復手順を確立
- MCPサーバーよりExtendScript直接実行が優れているという結論
- After Effectsで148レイヤーのモーショングラフィックス生成
- setTemporalEaseAtKeyの次元数問題の回避策を発見
- layer.stretch > timeRemapというスローモーションの知見
詳細: Illustrator/After Effects ExtendScript自動化 - COM接続の罠とClaude Codeからの直接実行
今日の試行錯誤
| # | テーマ | 試したこと | 結果 | 気づき |
|---|---|---|---|---|
| 1 | EDINET API 403 | urllib デフォルトUA | 失敗 | Bot対策でブロックされていた |
| 2 | EDINET API 403 | User-Agent差し替え | 成功 | APIキーではなくUAが原因 |
| 3 | SS書き込み文字化け | gws CLIでJSON渡し | 失敗 | Windows cp932とシェル制限 |
| 4 | SS書き込み | Pythonスクリプト+チャンク分割 | 成功 | 10行ずつで制限回避 |
| 5 | autoResizeDimensions | 書式後にautoResize | 失敗 | Google既知バグ |
| 6 | autoResize | 3フェーズ分離(Codex提案) | 失敗 | 太字・背景色の幅計算が不正確 |
| 7 | 列幅 | calcColumnWidths自前計算 | 成功 | 最大文字数×7px+padding |
| 8 | Illustrator COM | Illustrator.Application.29 | 失敗 | Beta版がProgID上書き |
| 9 | Illustrator COM | .regファイルでCLSID修復 | 成功 | Beta版アンインストールだけでは不十分 |
| 10 | AE COM | GetObject("AfterEffects.Application") | 失敗 | AEはCOM非対応 |
| 11 | AE接続 | afterfx.exe -r jsx | 成功 | コマンドライン方式 |
| 12 | AE setTemporalEaseAtKey | 2要素配列 | 失敗 | Scaleは常に3D |
| 13 | AE スローモーション | timeRemap | 失敗 | outPoint自動延長されない |
| 14 | AE スローモーション | layer.stretch = 333% | 成功 | stretchの方がシンプル |
今日の学び
- EDINET APIは1リクエストで14年分のPL/BS/CF全データが返る。効率的
- Windowsのシェルにはコマンドライン長制限があり、大きいJSON渡しはチャンク分割が必須
- Google Sheets autoResizeDimensionsはセル書式の影響を考慮しない既知バグ。自前計算が確実
- async関数の同時呼び出しはawaitのインターリーブで予期しない結果になる。排他制御を忘れない
- MCPサーバーはClaude Code環境では冗長。ExtendScript直接実行の方が速く制約もない
- AEのsetTemporalEaseAtKeyは次元数に厳密。Position(Spatial)は1要素、Scale(3D)は3要素
- layer.stretchはtimeRemapよりスローモーションの実装がシンプルで確実
明日やること
- 会計拡張:推移表・残高試算表・仕訳帳の整合性チェック(合計行 = 子行の合計)実装
- 会計拡張:帳表×年度マトリクスUIの実際のエクスポートテスト
- After Effects:setTemporalEaseAtKeyのバグ根本原因調査