[{"data":1,"prerenderedAt":416},["ShallowReactive",2],{"content-/2026-04-07-diary":3,"all-pages-for-dir":414,"og-image-/2026-04-07-diary":415},{"id":4,"title":5,"body":6,"category":394,"description":395,"extension":396,"meta":397,"navigation":398,"path":399,"project_name":400,"published":401,"publishedAt":402,"seo":403,"stem":404,"tags":405,"todo":412,"updatedAt":412,"__hash__":413},"pages/2026-04/2026-04-07/diary-2026-04-07.md","2026年4月7日の開発日記 - 法人税モジュールが全パイプラインに行き渡った日",{"type":7,"value":8,"toc":380},"minimark",[9,14,18,22,27,35,42,48,64,75,78,82,85,88,92,103,111,113,117,120,123,127,138,146,148,152,159,163,171,179,181,184,332,334,337,357,359,362],[10,11,13],"h1",{"id":12},"_2026年4月7日の開発日記","2026年4月7日の開発日記",[15,16,17],"p",{},"朝から法人税モジュールのPythonファイルを開き、夜にはStream Deckのボタンを押して音声入力のトグルが動くのを確認していた。その間にChrome拡張のストレージ移行を済ませ、教材テキスト1,469行を書き上げ、ディレクトリを連番でリネームした。手を動かし続けた一日。",[19,20,21],"h2",{"id":21},"今日やったこと",[23,24,26],"h3",{"id":25},"_1-cf教材の法人税モジュール実装統合リファクタリング","1. CF教材の法人税モジュール実装・統合・リファクタリング",[15,28,29,30,34],{},"法人税ライフサイクルモジュール（CF_306）を新規実装し、総合演習（CF_300）と運転資本（CF_304）の両パイプラインに統合した。統合した瞬間CFWSの数字が合わず、仕訳シートの行数を数えて二重計上バグに気づいた。原因は304の運転資本Excelが既に法人税仕訳を含んでいたこと。",[31,32,33],"code",{},"exclude_tax","フラグで解決。",[15,36,37,38,41],{},"その後、CFWS営業CF小計の調整列を日本基準の様式2に並び替え、法人税等の支払額を小計外に正しく配置し、取引_税金シートをINDEX/MATCHの数式化まで持っていった。最後に3ファイルに散在していた",[31,39,40],{},"build_tax_journals","をmf_journal.pyに統合する4タスクのリファクタリングを完了。Codex（GPT-5.4）が総合演習版のスコープ漏れを指摘してくれたのが効いた。",[15,43,44],{},[45,46,47],"strong",{},"主な成果:",[49,50,51,55,58,61],"ul",{},[52,53,54],"li",{},"CF_306法人税ライフサイクルモジュール新規実装",[52,56,57],{},"CF_300総合演習・CF_304運転資本への法人税統合",[52,59,60],{},"二重計上バグ修正、CFWS様式2準拠",[52,62,63],{},"税金モジュールのリファクタリング（重複3ファイル→1関数に統合）",[15,65,66,69,70],{},[45,67,68],{},"詳細:"," ",[71,72,74],"a",{"href":73},"/cf-tax-module-pipeline","CF精算表: 法人税ライフサイクルモジュールの実装・統合・リファクタリング",[76,77],"hr",{},[23,79,81],{"id":80},"_2-chrome拡張のストレージセキュリティ改善","2. Chrome拡張のストレージセキュリティ改善",[15,83,84],{},"sessionStorageが他の拡張のcontent scriptから読める問題を発見。会計ソフトA連携のChrome拡張で、スプレッドシートIDなどを保存していた箇所をchrome.storage.localに全面移行した。4ファイルの書き換え、同期→非同期の変換、テストモック更新を経て135テスト全パス。",[15,86,87],{},"あわせて、約1.6GBのTwitterアーカイブ（11,669件のツイート）をSQLiteに取り込み、年度別サマリーを生成した。",[15,89,90],{},[45,91,47],{},[49,93,94,97,100],{},[52,95,96],{},"sessionStorage → chrome.storage.local全面移行（135テストパス）",[52,98,99],{},"デッドコード（setExportQueue）の発見",[52,101,102],{},"Twitterアーカイブ11,669件のSQLite化",[15,104,105,69,107],{},[45,106,68],{},[71,108,110],{"href":109},"/chrome-extension-storage-security","Chrome拡張のsessionStorage脱却とTwitterアーカイブのSQLite化",[76,112],{},[23,114,116],{"id":115},"_3-cf教材テキスト制作とプロジェクト構造整備","3. CF教材テキスト制作とプロジェクト構造整備",[15,118,119],{},"参考書のSQLiteデータベースから421ページ分のCF計算書データを抽出し、4ファイル・計1,469行のチャプター解説ドラフトを生成した。Codexレビュー2回で致命的指摘4件（会社設定の具体化、難易度順の見直し、中間演習の追加等）を修正。ティーチングガイドをCFWS中心のインクリメンタル方式に全面改訂した。",[15,121,122],{},"さらに、ドキュメント4ファイルの旧シート名（TPL_→取引_）を更新し、貸付金と借入金をディレクトリ分離、全7ディレクトリを連番方式（ライフサイクル_01_株主資本〜_07_総合演習）にリネーム。スクリプト8本・ドキュメント6本の参照を一括更新した。会計基準JSONデータ（5基準・31条文）も作成。",[15,124,125],{},[45,126,47],{},[49,128,129,132,135],{},[52,130,131],{},"チャプター解説4ファイル1,469行のドラフト完成",[52,133,134],{},"ディレクトリ連番リネーム（7本）、スクリプト・ドキュメント14本の参照更新",[52,136,137],{},"会計基準JSON（財規113-115条、会社法445条、連結CF作成基準）",[15,139,140,69,142],{},[45,141,68],{},[71,143,145],{"href":144},"/cf-teaching-content-restructure","CF教材テキスト制作とプロジェクト構造整備",[76,147],{},[23,149,151],{"id":150},"_4-stream-deck-autohotkeyで音声入力トグル","4. Stream Deck × AutoHotkeyで音声入力トグル",[15,153,154,155,158],{},"Claude Codeの音声入力（スペースキー長押し）をStream Deckのボタン1回で開始/停止する仕組みを実装。最初は",[31,156,157],{},"Send \"{Space down}\"","を1回送るだけで試したがキーリピートが発生せず失敗。ループで50msごとにSpace downを送り続け、状態ファイルの有無でトグルする方式に変更して成功。ペイン間の自動切り替え（他ペインの状態ファイルを先に消す排他制御）も追加した。",[15,160,161],{},[45,162,47],{},[49,164,165,168],{},[52,166,167],{},"スペースキー長押しトグルの実装",[52,169,170],{},"4分割画面のペイン間自動切り替え",[15,172,173,69,175],{},[45,174,68],{},[71,176,178],{"href":177},"/stream-deck-voice-input-toggle","Stream Deck × AutoHotkeyでClaude Codeの音声入力をトグル化する",[76,180],{},[19,182,183],{"id":183},"今日の試行錯誤",[185,186,187,209],"table",{},[188,189,190],"thead",{},[191,192,193,197,200,203,206],"tr",{},[194,195,196],"th",{},"#",[194,198,199],{},"テーマ",[194,201,202],{},"試したこと",[194,204,205],{},"結果",[194,207,208],{},"気づき",[210,211,212,230,247,264,281,298,315],"tbody",{},[191,213,214,218,221,224,227],{},[215,216,217],"td",{},"1",[215,219,220],{},"CF_300法人税統合",[215,222,223],{},"総合演習に法人税仕訳を追加",[215,225,226],{},"金額が二重",[215,228,229],{},"304の運転資本Excelに既に法人税仕訳が入っていた",[191,231,232,235,238,241,244],{},[215,233,234],{},"2",[215,236,237],{},"二重計上修正",[215,239,240],{},"filter_journalsにexclude_taxオプション追加",[215,242,243],{},"成功",[215,245,246],{},"入力データの前提確認が先",[191,248,249,252,255,258,261],{},[215,250,251],{},"3",[215,253,254],{},"未払法人税等",[215,256,257],{},"計上日と支払日を同期間に設定",[215,259,260],{},"BS残高が0",[215,262,263],{},"決算日12/31計上、翌年2/28支払に修正して解決",[191,265,266,269,272,275,278],{},[215,267,268],{},"4",[215,270,271],{},"CFWS行順序",[215,273,274],{},"BS由来/PL由来を分けて出力",[215,276,277],{},"列と行が不一致",[215,279,280],{},"adjustmentsの順序のまま1ループで出力に変更",[191,282,283,286,289,292,295],{},[215,284,285],{},"5",[215,287,288],{},"Space down送信",[215,290,291],{},"Send \"{Space down}\"を1回",[215,293,294],{},"キーリピートせず",[215,296,297],{},"OSのキーリピートは物理キー固有。ソフトウェアはループが必要",[191,299,300,303,306,309,312],{},[215,301,302],{},"6",[215,304,305],{},"インタラクティブシミュレータ",[215,307,308],{},"Phase 0-2を実装しUIまで完成",[215,310,311],{},"ユーザーが全revert",[215,313,314],{},"先にイメージを共有すべきだった",[191,316,317,320,323,326,329],{},[215,318,319],{},"7",[215,321,322],{},"Codexレビュー",[215,324,325],{},"税金リファクタリング計画をレビュー",[215,327,328],{},"総合演習版の漏れ発見",[215,330,331],{},"スコープの抜け漏れを外部レビューが拾う",[76,333],{},[19,335,336],{"id":336},"今日の学び",[49,338,339,342,345,348,354],{},[52,340,341],{},"二重計上は仕訳シートの行数を数えた瞬間に気づいた。「あ、倍ある」と思ったら入力データの前提を疑う",[52,343,344],{},"CF様式2の並び順（非資金損益→営業外損益→運転資本増減）はソート関数で制御すると後から別論点を追加しても崩れない",[52,346,347],{},"sessionStorageとchrome.storage.localはセキュリティモデルが根本的に違う。拡張開発では最初からchrome.storage.localを使うべき",[52,349,350,351,353],{},"AutoHotkeyの",[31,352,157],{},"はキーリピートを再現しない。物理キーの長押しとソフトウェアのキーイベントは別物",[52,355,356],{},"インタラクティブUIを作る前にスクリーンショットやモックアップでイメージを共有する方が手戻りが少ない",[76,358],{},[19,360,361],{"id":361},"関連記事",[49,363,364,368,372,376],{},[52,365,366],{},[71,367,74],{"href":73},[52,369,370],{},[71,371,110],{"href":109},[52,373,374],{},[71,375,145],{"href":144},[52,377,378],{},[71,379,178],{"href":177},{"title":381,"searchDepth":382,"depth":382,"links":383},"",2,[384,391,392,393],{"id":21,"depth":382,"text":21,"children":385},[386,388,389,390],{"id":25,"depth":387,"text":26},3,{"id":80,"depth":387,"text":81},{"id":115,"depth":387,"text":116},{"id":150,"depth":387,"text":151},{"id":183,"depth":382,"text":183},{"id":336,"depth":382,"text":336},{"id":361,"depth":382,"text":361},"diary","CF教材の法人税モジュール実装・統合・リファクタリング、Chrome拡張のストレージセキュリティ改善、教材テキスト1,469行のドラフト完成、Stream Deckで音声入力トグルを実現した一日","md",{},true,"/2026-04-07-diary","daily-log",false,"2026-04-07T00:00:00.000Z",{"title":5,"description":395},"2026-04/2026-04-07/diary-2026-04-07",[406,407,408,409,410,411],"日記","CF精算表","法人税","Chrome拡張","AutoHotkey","教材制作",null,"t_SXbnhqOQl4Zv869uTbfBgJ9z2Fomg0uBo-NJ4wJxc",[],"https://log.eurekapu.com/favicon.svg",1775602359948]