[{"data":1,"prerenderedAt":780},["ShallowReactive",2],{"content-/2026-05-03-diary":3,"all-pages-for-dir":778,"og-image-/2026-05-03-diary":779},{"id":4,"title":5,"body":6,"category":759,"description":760,"extension":761,"meta":762,"navigation":685,"path":763,"project_name":764,"published":765,"publishedAt":766,"seo":767,"stem":768,"tags":769,"todo":776,"updatedAt":776,"__hash__":777},"pages/2026-05/2026-05-03/diary-2026-05-03.md","2026年5月3日の開発日記 - case100書籍を1日で79論点パイプライン化、Vue移植まで完走",{"type":7,"value":8,"toc":742},"minimark",[9,14,18,21,25,32,35,40,43,49,74,85,88,92,107,111,139,147,149,153,160,164,191,199,201,205,212,216,244,252,254,258,269,273,294,302,304,307,622,624,627,669,671,674,715,717,720],[10,11,13],"h1",{"id":12},"_2026年5月3日の開発日記","2026年5月3日の開発日記",[15,16,17],"p",{},"朝6時51分にExcelの仕訳DB設計を投げ込んだら、夜までで79論点がVueページとして動くところまで連れていけた。会計の参考書1冊分を、Excel→TypeScript→Vueの三段パイプラインに乗せた1日。",[15,19,20],{},"途中で決算振替の専用コンポーネントを切り出したり、貸借不一致のバグを画面で拾ったり、ブランチを跨いでmemoが消えたと焦ったりしながら、最終的にPR #16もマージ完走した。",[22,23,24],"h2",{"id":24},"今日のタイムライン",[15,26,27],{},[28,29],"img",{"alt":30,"src":31},"タイムライン","/2026-05/2026-05-03/timeline-2026-05-03.png",[22,33,34],{"id":34},"今日やったこと",[36,37,39],"h3",{"id":38},"_1-書籍100ケースのexceltypescriptパイプライン構築","1. 書籍100ケースのExcel→TypeScriptパイプライン構築",[15,41,42],{},"会計の参考書（ケース100）をWebコンテンツ化する前段。Excel仕訳DBで論点を持ち、Pythonで集計、TypeScript静的データに変換してVueに供給する三段パイプラインを朝から組んだ。1日で4論点→18論点→55論点→79論点まで段階拡張した。",[15,44,45],{},[46,47,48],"strong",{},"主な成果:",[50,51,52,56,59,62],"ul",{},[53,54,55],"li",{},"書籍3層構成（基本ケース9件＋通常ケース100件＋コラム6件）に対応する整数ID体系",[53,57,58],{},"共通期首仕訳は論点ごとに複製する方針（正規化より集計の単純さを優先）",[53,60,61],{},"Codex（GPT-5.5）で計画書3ラウンド・引き継ぎメモ別ラウンドのレビュー",[53,63,64,65,69,70,73],{},"verify_xlsx で ",[66,67,68],"code",{},"BS check=0"," と ",[66,71,72],{},"PL↔BS整合"," を全論点・全FYで通過",[15,75,76,79,80],{},[46,77,78],{},"詳細:"," ",[81,82,84],"a",{"href":83},"/2026-05-03-case100-excel-typescript-pipeline","会計の参考書100ケースをExcel→TypeScriptで一気にパイプライン化した話",[86,87],"hr",{},[36,89,91],{"id":90},"_2-簿記3級ノートの財務影響モード改善","2. 簿記3級ノートの財務影響モード改善",[15,93,94,95,98,99,102,103,106],{},"HTMLドラフトとVue版 ",[66,96,97],{},"JournalExample.vue"," の両方に、会計慣習の ",[66,100,101],{},"▲"," 表記、12月決算化、貸借不一致バグ修正を反映した。equity例題で残高試算表の右側合計に違和感を拾い、純粋関数 ",[66,104,105],{},"buildTbViewModel"," を切り出してテスト先行で修正。",[15,108,109],{},[46,110,48],{},[50,112,113,123,126,129,132],{},[53,114,115,116,119,120,122],{},"マイナス表示を ",[66,117,118],{},"-"," から ",[66,121,101],{}," に統一（fmt関数・CSS・差額ポップアップ・吸い込みpill全部）",[53,124,125],{},"全エントリーの決算日を3月終わり→12月終わりに変更",[53,127,128],{},"計算値（売上総利益・経常利益）の背景ハイライト抑止",[53,130,131],{},"例題の金額単位を「○○万円」→「円単位」に変換（17論点をサブエージェント並列で）",[53,133,134,135,138],{},"残高試算表の ",[66,136,137],{},"re"," 二重カウントバグをテスト先行で修正",[15,140,141,79,143],{},[46,142,78],{},[81,144,146],{"href":145},"/2026-05-03-bookkeeping3-financial-impact-mode","簿記3級ノートに財務影響モードを実装。▲表記・12月決算化・貸借一致バグ修正まで一気に",[86,148],{},[36,150,152],{"id":151},"_3-決算振替仕訳の専用vueコンポーネント実装","3. 決算振替仕訳の専用Vueコンポーネント実装",[15,154,155,156,159],{},"equity例題Cの「決算振替仕訳」が既存 JournalExample で表現できないため、",[66,157,158],{},"ClosingTransferExample.vue"," を新規作成。計画書をCodex 2ラウンドレビューで承認まで持ち込んでから実装した。",[15,161,162],{},[46,163,48],{},[50,165,166,169,172,178,181,188],{},[53,167,168],{},"連鎖取消・再構築方式（c5取消でc6・c7も自動取消）",[53,170,171],{},"T勘定をBS（資産→負債→純資産）／PL（収益→費用）の2段構成",[53,173,174,175],{},"タブナンバリング ",[66,176,177],{},"1 2 3 4 ｜決算整理｜ 5 6 7",[53,179,180],{},"T勘定・仕訳帳の高さを最終行数で事前確保（レイアウトシフト0px）",[53,182,183,184,187],{},"pill飛行アニメ（zoom倍率を ",[66,185,186],{},"getBoundingClientRect"," で逆算）",[53,189,190],{},"整合性保証テスト17件追加",[15,192,193,79,195],{},[46,194,78],{},[81,196,198],{"href":197},"/2026-05-03-closing-transfer-example-component","簿記3級の決算振替仕訳に専用Vueコンポーネントを切り出した話",[86,200],{},[36,202,204],{"id":203},"_4-case100-79論点をvueページに一括移植","4. case100 79論点をVueページに一括移植",[15,206,207,208,211],{},"夕方からのフェーズ3。Excel→TypeScript パイプラインで生成済みの中間JSON 79論点を、Vueページとして一括出力する ",[66,209,210],{},"ts_to_vue.ts"," を作成。case100のインデックスから全論点へ遷移できる状態を作った。",[15,213,214],{},[46,215,48],{},[50,217,218,221,224,231,234],{},[53,219,220],{},"79論点エラーゼロで一括生成、CHAPTERS インデックス自動構築",[53,222,223],{},"インデックスページを章カテゴリ別グルーピング",[53,225,226,227,230],{},"PCワイド画面で仕訳カード縦並び、狭い画面ではタブ形式（",[66,228,229],{},"isWide"," 判定）",[53,232,233],{},"仕訳帳開閉で左カラム（取引・仕訳候補）が動かないようResizeObserver",[53,235,236,237,240,241,243],{},"当期 entries=",[238,239],"span",{}," でクラッシュする ",[66,242,97],{}," をnull-safe修正",[15,245,246,79,248],{},[46,247,78],{},[81,249,251],{"href":250},"/2026-05-03-case100-vue-migration","case100 書籍79論点をVueページに一括移植。レスポンシブと仕訳帳UIを一緒に整える",[86,253],{},[36,255,257],{"id":256},"_5-pr-16-マージ周りのgitワークフロー","5. PR #16 マージ周りのGitワークフロー",[15,259,260,261,264,265,268],{},"朝のcase100作業中、メインブランチで作業しているつもりが実は ",[66,262,263],{},"fix/e2e-stabilize-wait"," にいた。メインに戻ったら memo が消えたように見えて背筋が冷えたが、",[66,266,267],{},"git status"," で原因が割れた。Claude Codeにstash→ブランチ切替→マージ→push→PR作成→マージ→stash復元のワークフローを順次実行させて整理。",[15,270,271],{},[46,272,48],{},[50,274,275,281,284,291],{},[53,276,277,280],{},[66,278,279],{},"git stash -u"," で main の未コミット変更（untracked含む）を退避",[53,282,283],{},"fix/e2e-stabilize-wait に main を取り込んでpush",[53,285,286,287,290],{},"PR #16 を ",[66,288,289],{},"gh pr create"," で作成、CI緑確認後にSquash & Merge",[53,292,293],{},"stash復元の差分消失（no-op）はPR #16のコミットに含まれていた証拠",[15,295,296,79,298],{},[46,297,78],{},[81,299,301],{"href":300},"/2026-05-03-git-stash-branch-merge-workflow","ブランチ跨ぎでmemoが消えたと焦った話。stash→branch切替→マージ→PR作成までを順次実行",[86,303],{},[22,305,306],{"id":306},"今日の試行錯誤",[308,309,310,332],"table",{},[311,312,313],"thead",{},[314,315,316,320,323,326,329],"tr",{},[317,318,319],"th",{},"#",[317,321,322],{},"テーマ",[317,324,325],{},"試したこと",[317,327,328],{},"結果",[317,330,331],{},"気づき",[333,334,335,357,377,394,414,438,455,472,492,509,532,552,569,588,605],"tbody",{},[314,336,337,341,344,347,350],{},[338,339,340],"td",{},"1",[338,342,343],{},"PowerShell UTF-8 BOM",[338,345,346],{},"Out-File出力",[338,348,349],{},"日本語が崩れた",[338,351,352,353,356],{},"tsx側で ",[66,354,355],{},"fs.writeFileSync"," に切り替え",[314,358,359,362,368,371,374],{},[338,360,361],{},"2",[338,363,364,365],{},"run.ps1の ",[66,366,367],{},"$root",[338,369,370],{},"1階層浅いまま実行",[338,372,373],{},"パス解決で失敗",[338,375,376],{},"スクリプト位置基準で再計算",[314,378,379,382,385,388,391],{},[338,380,381],{},"3",[338,383,384],{},"仕訳帳の空状態メッセージ",[338,386,387],{},"「最小5行確保」で実装",[338,389,390],{},"ユーザーから的外れと差し戻し",[338,392,393],{},"colspan セルにメッセージ挿入の方針へ",[314,395,396,399,402,405,408],{},[338,397,398],{},"4",[338,400,401],{},"例題7行入力時のレイアウト",[338,403,404],{},"普通のgrid",[338,406,407],{},"破綻",[338,409,410,413],{},[66,411,412],{},"grid-template-rows: minmax(0, 1fr)"," で内部スクロール可能に",[314,415,416,419,422,425,428],{},[338,417,418],{},"5",[338,420,421],{},"残高試算表の貸借不一致",[338,423,424],{},"テスト先行で再現→修正",[338,426,427],{},"1テスト失敗→pass、UIも整合",[338,429,430,431,433,434,437],{},"UI側で ",[66,432,137],{}," を ",[66,435,436],{},"reOpen+reNi"," で二重カウントしていた",[314,439,440,443,446,449,452],{},[338,441,442],{},"6",[338,444,445],{},"例題金額の万円→円単位",[338,447,448],{},"サブエージェント17論点並列",[338,450,451],{},"一気に変換完了",[338,453,454],{},"共通変換ルール+並列実行が効く",[314,456,457,460,463,466,469],{},[338,458,459],{},"7",[338,461,462],{},"ClosingTransferの仕訳カード配置",[338,464,465],{},"縦1列で実装",[338,467,468],{},"タブ集約に差し戻し",[338,470,471],{},"モーダル時のみ縦並び、通常時はタブ",[314,473,474,477,480,483,486],{},[338,475,476],{},"8",[338,478,479],{},"pill飛行の3コミ目以降のズレ",[338,481,482],{},"スクロール量補正",[338,484,485],{},"まだズレ残る",[338,487,488,489,491],{},"zoom倍率を ",[66,490,186],{}," で逆算して安定",[314,493,494,497,500,503,506],{},[338,495,496],{},"9",[338,498,499],{},"T勘定の残高6,000表示バグ",[338,501,502],{},"計算は正しいが表示が不整合",[338,504,505],{},"期首残高（前期繰越）の行が出ていなかった",[338,507,508],{},"表示側のバグ。テストで保証",[314,510,511,514,517,523,526],{},[338,512,513],{},"10",[338,515,516],{},"Codex指摘 STEP3 1.3秒誤表示",[338,518,519,522],{},[66,520,521],{},"appliedIds"," で同期化",[338,524,525],{},"誤表示消滅",[338,527,528,531],{},[66,529,530],{},"pendingPostIds"," と表示用IDを分離",[314,533,534,537,540,546,549],{},[338,535,536],{},"11",[338,538,539],{},"topic-1007 Vue化で500エラー",[338,541,542,543,545],{},"当期entries=",[238,544],{},"でクラッシュ",[338,547,548],{},"null-safe修正で復旧",[338,550,551],{},"コンポーネント側を根本対応",[314,553,554,557,560,563,566],{},[338,555,556],{},"12",[338,558,559],{},"タブ・仕訳帳トグルが効かない",[338,561,562],{},"クリック動作追跡",[338,564,565],{},"内部では正常動作",[338,567,568],{},"ハイドレーションmismatchが原因。初期値を狭い画面前提に",[314,570,571,574,577,582,585],{},[338,572,573],{},"13",[338,575,576],{},"仕訳帳開閉で左カラムが動く",[338,578,579],{},[66,580,581],{},"align-items: stretch",[338,583,584],{},"動いてしまう",[338,586,587],{},"ResizeObserverでBS/PL高さをCSS変数で渡す",[314,589,590,593,596,599,602],{},[338,591,592],{},"14",[338,594,595],{},"ブランチ跨ぎでmemo消失に見える",[338,597,598],{},"git status で確認",[338,600,601],{},"全てmainに入っていた",[338,603,604],{},"PR #16マージ直後のキャッシュ問題",[314,606,607,610,613,616,619],{},[338,608,609],{},"15",[338,611,612],{},"Codexサンドボックスエラー",[338,614,615],{},"bypassフラグで再試行",[338,617,618],{},"読み取り成功",[338,620,621],{},"Windowsでは標準入力経由が確実",[86,623],{},[22,625,626],{"id":626},"今日の学び",[50,628,629,635,641,647,653,659],{},[53,630,631,634],{},[46,632,633],{},"画面で違和感を拾う力がバグを救う",": 残高6,000の表示バグも、貸借不一致のバグも、まず画面を見て「合計が変だ」と気付かないと事故っていた",[53,636,637,640],{},[46,638,639],{},"テスト先行で再現してから修正",": 貸借不一致バグも、Codex指摘バグも、純粋関数として切り出してテストで失敗を確認してから修正すると、修正後の確認が一瞬で終わる",[53,642,643,646],{},[46,644,645],{},"既存コンポーネントを変に拡張せず、別物として切り出す判断",": 決算振替は明らかに別物だったので、JournalExample を拡張せず別コンポーネントにして正解だった",[53,648,649,652],{},[46,650,651],{},"サブエージェント並列が効くタスクの形",": 「同じ変換ルールで複数ファイル」のような独立並列タスクはサブエージェント分担が結果的に早い（17論点を1時間で完了）",[53,654,655,658],{},[46,656,657],{},"Codexレビューは「致命的な点だけ」で運用すると本質指摘が残る",": 瑣末な点へのクソリプを切り捨てる指示で、計画書3ラウンド・引き継ぎ別ラウンドが回った",[53,660,661,668],{},[46,662,663,664,667],{},"ブランチを跨いで作業するときは ",[66,665,666],{},"git branch"," で居場所を確認する",": 「ファイルが消えた」と錯覚するのはたいてい別ブランチに迷い込んだサイン",[86,670],{},[22,672,673],{"id":673},"明日やること",[50,675,678,688,694,700,706],{"className":676},[677],"contains-task-list",[53,679,682,687],{"className":680},[681],"task-list-item",[683,684],"input",{"disabled":685,"type":686},true,"checkbox"," case100 Session 13（連結会計）の Excel 設計 — 株主資本等変動計算書の仕訳をユーザー手作業で具体化してから着手",[53,689,691,693],{"className":690},[681],[683,692],{"disabled":685,"type":686}," case100 79論点ページにキーメッセージ・解説を追加（フェーズ3の続き）",[53,695,697,699],{"className":696},[681],[683,698],{"disabled":685,"type":686}," equity 以外の例題（17論点）にもClosingTransferパターンを展開するかは要検討",[53,701,703,705],{"className":702},[681],[683,704],{"disabled":685,"type":686}," ページネーションをcase100ページの下部に追加（簿記3級ノートと同様のUI）",[53,707,709,79,711,714],{"className":708},[681],[683,710],{"disabled":685,"type":686},[66,712,713],{},"_journal-example.{js,css}"," のHookタイムアウト8件のテストを ▲仕様に追従させる",[86,716],{},[22,718,719],{"id":719},"関連記事",[50,721,722,726,730,734,738],{},[53,723,724],{},[81,725,84],{"href":83},[53,727,728],{},[81,729,146],{"href":145},[53,731,732],{},[81,733,198],{"href":197},[53,735,736],{},[81,737,251],{"href":250},[53,739,740],{},[81,741,301],{"href":300},{"title":743,"searchDepth":744,"depth":744,"links":745},"",2,[746,747,755,756,757,758],{"id":24,"depth":744,"text":24},{"id":34,"depth":744,"text":34,"children":748},[749,751,752,753,754],{"id":38,"depth":750,"text":39},3,{"id":90,"depth":750,"text":91},{"id":151,"depth":750,"text":152},{"id":203,"depth":750,"text":204},{"id":256,"depth":750,"text":257},{"id":306,"depth":744,"text":306},{"id":626,"depth":744,"text":626},{"id":673,"depth":744,"text":673},{"id":719,"depth":744,"text":719},"diary","会計の参考書100ケース集のExcel→TypeScript→Vueパイプラインを1日で79論点まで構築。決算振替の専用コンポーネントも切り出して、ブラウザで動かしながらPRマージまで完走した日","md",{},"/2026-05-03-diary","daily-log",false,"2026-05-03T00:00:00.000Z",{"title":5,"description":760},"2026-05/2026-05-03/diary-2026-05-03",[770,771,772,773,774,775],"日記","case100","Vue","Excel","TypeScript","簿記3級",null,"xkKK2fTcKy3ikvlL6qlS-du4ZaJNkqAb1Vi45lHWHOM",[],"https://log.eurekapu.com/favicon.svg",1778379990273]