[{"data":1,"prerenderedAt":915},["ShallowReactive",2],{"content-/2026-05-02-diary":3,"all-pages-for-dir":913,"og-image-/2026-05-02-diary":914},{"id":4,"title":5,"body":6,"category":893,"description":894,"extension":895,"meta":896,"navigation":809,"path":897,"project_name":898,"published":899,"publishedAt":900,"seo":901,"stem":902,"tags":903,"todo":911,"updatedAt":911,"__hash__":912},"pages/2026-05/2026-05-02/diary-2026-05-02.md","2026年5月2日の開発日記 - 簿記3級ノート24章Vue移植マラソン、ケース100コンテンツ化、Dependabot 6PR統合まで",{"type":7,"value":8,"toc":873},"minimark",[9,14,18,22,29,32,37,45,51,79,90,93,97,108,112,126,134,136,140,143,147,158,166,168,172,179,183,194,202,204,208,227,231,246,254,256,260,283,287,295,303,305,309,323,327,335,343,345,349,352,356,371,379,381,384,755,757,760,793,795,798,830,832,835],[10,11,13],"h1",{"id":12},"_2026年5月2日の開発日記","2026年5月2日の開発日記",[15,16,17],"p",{},"朝6時から夜9時まで、ほぼ全部 eurekapu-nuxt4 に張り付いた一日。簿記3級ノートをHTMLからVueへ24章一気に移植し、書籍3冊をOCRして蔵書知識ベースに格納し、ケース100の著作権配慮ルールを整備し、Dependabotの6PRを統合し、E2EテストをCodexレビューで恒久対策まで持っていった。並列サブエージェントを20回以上回し、Codexレビューを8回踏んだ。短い時間で広い面積をひっくり返したぶん、ブランチ取り違えやポスト案での他者下げ表現など、足場を踏み外しかけた瞬間も何度かあった。",[19,20,21],"h2",{"id":21},"今日のタイムライン",[15,23,24],{},[25,26],"img",{"alt":27,"src":28},"タイムライン","/2026-05/2026-05-02/timeline-2026-05-02.png",[19,30,31],{"id":31},"今日やったこと",[33,34,36],"h3",{"id":35},"_1-簿記3級ノート24章をvueへ並列移植","1. 簿記3級ノート24章をVueへ並列移植",[15,38,39,40,44],{},"朝6時から夜まで、優先度A 6章 → 優先度B 9章 → 残り9章を順番に並列起動して、累計24章/26章を1日で移植した。途中で ",[41,42,43],"code",{},"calcNetIncome"," の重複宣言や、純資産合計に当期純利益が乗らないバグを掘り当てて潰した。サブエージェントが Write 権限拒否で BLOCKED 状態になった2件は自分で直接書き、最後は SVG 見切れなど6観点を網羅レビューして7並列で一気に修正した。",[15,46,47],{},[48,49,50],"strong",{},"主な成果:",[52,53,54,58,72],"ul",{},[55,56,57],"li",{},"テスト 700件全パス、24章/26章を1日で完了",[55,59,60,63,64,67,68,71],{},[41,61,62],{},"JournalExample.vue"," の貸借合計バグ（",[41,65,66],{},"sectionTotals.eq"," → ",[41,69,70],{},"liab + eq","）を修正",[55,73,74,75,78],{},"ブランチ取り違えを ",[41,76,77],{},"git reset --soft"," で安全に巻き戻し",[15,80,81,84,85],{},[48,82,83],{},"詳細:"," ",[86,87,89],"a",{"href":88},"/vue-migration-marathon-3kyu-notes","簿記3級ノート24章をVueに移植：24並列サブエージェントで一日で仕上げたマラソンの記録",[91,92],"hr",{},[33,94,96],{"id":95},"_2-インタラクティブ仕訳例題エンジンのモーダル化アニメ強化","2. インタラクティブ仕訳例題エンジンのモーダル化＋アニメ強化",[15,98,99,100,103,104,107],{},"朝の作業はHTML側のインタラクティブ仕訳エンジンの大改造。クリックで3カラムモーダルを開き、ESCとbackdropクリックで閉じる挙動を入れ、増減差額のフロート表示と「飛行pillアニメ」で仕訳が試算表に吸い込まれる演出を作った。途中でカクついたので ",[41,101,102],{},"requestAnimationFrame"," 駆動を Web Animations API に置き換え、貸借ズレを発見して ",[41,105,106],{},"verifyBalance"," 関数とエラーバナーを追加した。文字が小さい指摘を受けて zoom コントロール（localStorage永続化、初期値130%）も実装。",[15,109,110],{},[48,111,50],{},[52,113,114,117,120,123],{},[55,115,116],{},"モーダル化＋3カラムレイアウト、ESC/backdrop対応",[55,118,119],{},"カウントアップ＋増減ポップアップ＋飛行pillアニメ（Web Animations API）",[55,121,122],{},"仕訳帳に最終行数分のplaceholder予約で残高試算表のY位置を固定",[55,124,125],{},"Vitest 72→85テストでロジック純粋関数を担保",[15,127,128,84,130],{},[48,129,83],{},[86,131,133],{"href":132},"/interactive-journal-engine-modal-zoom","インタラクティブ仕訳例題エンジンをモーダル化＋Web Animations APIで再設計：飛行pillアニメと貸借ランタイム検証まで",[91,135],{},[33,137,139],{"id":138},"_3-yomitokuで会計書籍3冊をocrturso-dbへ蔵書化","3. yomitokuで会計書籍3冊をOCR→Turso DBへ蔵書化",[15,141,142],{},"会計書籍2冊（228ページと624ページ）を yomitoku でMarkdown化して Turso DB に格納し、過去に上下分割マージで失敗していた参考書1冊を再OCRして入れ直した。WAL書込衝突は HTTP直接接続でリトライし、Embedded Replicaが詰まった時はファイル退避して再構築。WebFetchが連続失敗した Amazon メタデータ取得は agent-browser にフォールバックして取れた。最後は /shelf 画面で書影・「📖 DB」「済」バッジ・Amazonリンクまで表示確認。",[15,144,145],{},[48,146,50],{},[52,148,149,152,155],{},[55,150,151],{},"624ページ書籍を 1093ファイル出力 → 585チャンク登録",[55,153,154],{},"restructure で 305チャンク → 126セクション（ケース毎・章扉・コラム単位）統合",[55,156,157],{},"HTTP直書きの amazon_metadata がローカルレプリカから読めることを確認",[15,159,160,84,162],{},[48,161,83],{},[86,163,165],{"href":164},"/book-ocr-turso-knowledge-base","yomitokuで会計書籍3冊をOCR→Turso DBへ蔵書知識ベース化",[91,167],{},[33,169,171],{"id":170},"_4-ケース100コンテンツ化と著作権配慮ルール整備","4. ケース100コンテンツ化と著作権配慮ルール整備",[15,173,174,175,178],{},"午前は Turso DB に入れた会計書籍を題材にデリバティブ章のVue講義ノートを実装し、Codex（GPT-5.5）でレビュー2回通過させた。が、ユーザーから「著作権を完全に無視している」と指摘されて、本番コンテンツから書籍参照（章タイトル・SVGラベル・対比表ヘッダー）を全削除し、プロジェクトルール ",[41,176,177],{},".claude/rules/book-references.md"," を新規作成して CLAUDE.md から参照するように整備。夕方は「100論点を全部HTML化」依頼で5論点をサブエージェント並列で作成、共通CSS（913行）の切り出し漏れを修正、1FY構成では不自然な前提取引を2FY構成に統一した。明日朝9時のリマインドエージェントを ScheduleRoutine で登録。",[15,180,181],{},[48,182,50],{},[52,184,185,188,191],{},[55,186,187],{},"本番から書籍由来表現を完全除去、テスト 1526件パス維持",[55,189,190],{},"100論点目次・選定理由・ドラフト済みハイライトを統合した index.html",[55,192,193],{},"著作権配慮ルールをプロジェクトに永続化",[15,195,196,84,198],{},[48,197,83],{},[86,199,201],{"href":200},"/case100-content-and-copyright-rule","会計100論点のインタラクティブHTML化と、書籍由来表現を本番から完全削除するルール整備",[91,203],{},[33,205,207],{"id":206},"_5-dependabot-6pr統合とe2e恒久対策","5. Dependabot 6PR統合とE2E恒久対策",[15,209,210,211,214,215,218,219,222,223,226],{},"夕方〜夜に Dependabot 7PR の処理。順次rebaseだとループになるため ",[41,212,213],{},"pnpm overrides"," で4依存を一気に固定する統合PR #13 を作成。別セッション（SVG側）と同じブランチ ",[41,216,217],{},"chore/deps-batch-bump"," で衝突したのを手紙で通信して新ブランチに移管した。簿記3級9章移植のPR #14 が E2E で1件落ちた件は Squash and merge で逃げ、後追いで PR #15 として ",[41,220,221],{},"waitForLoadState('networkidle')"," を 25箇所削除＋Codex レビューで Nuxt ハイドレート前 click を ",[41,224,225],{},"expect.toPass({ timeout })"," で retry する恒久対策を入れた。",[15,228,229],{},[48,230,50],{},[52,232,233,236,243],{},[55,234,235],{},"7PRを2回のマージで処理、脆弱性 73→70 に減少",[55,237,238,239,242],{},"E2Eテストを ",[41,240,241],{},"networkidle"," 依存から retry ベースに恒久切り替え",[55,244,245],{},"Codexレビューで「SPAでは load 再発火しないから無意味」と一刀両断されて方針転換",[15,247,248,84,250],{},[48,249,83],{},[86,251,253],{"href":252},"/dependabot-and-e2e-stabilization","Dependabot 6PRをpnpm overrides統合PRに集約し、PlaywrightのnetworkidleをCodexレビューで全削除した日",[91,255],{},[33,257,259],{"id":258},"_6-obs配信向けchromeウィンドウ位置スクリプト","6. OBS配信向けChromeウィンドウ位置スクリプト",[15,261,262,263,266,267,270,271,274,275,278,279,282],{},"朝のすき間時間に、OBS Studio でウルトラワイドモニター使用時に毎回 Chrome を画面中央に手動配置していた手間を PowerShell スクリプトで自動化。Chromiumベースの別アプリ（Aqua Voice / VS Code / Memento Mori）まで誤って Chrome として拾う罠、",[41,264,265],{},"$pid"," 予約変数衝突、Stream Deck の ",[41,268,269],{},".ps1"," 起動ダイアログなど、4つの罠を順番に踏み抜いた。最終的に ",[41,272,273],{},"1920x1255 @ (4600, 5)"," で OBSキャプチャ領域にぴったり合わせ、",[41,276,277],{},".bat"," ラッパー（",[41,280,281],{},"-NoProfile","付き）を Stream Deck に登録して完了。",[15,284,285],{},[48,286,50],{},[52,288,289,292],{},[55,290,291],{},"ボタン1発で Chrome がOBS配信領域に着地、毎日30秒の節約",[55,293,294],{},"README作成で次回触る自分のために手順を残す",[15,296,297,84,299],{},[48,298,83],{},[86,300,302],{"href":301},"/obs-chrome-window-position-script","OBSウルトラワイド配信向けにChromeウィンドウ位置を一発固定するPowerShellスクリプトとStream Deck連携",[91,304],{},[33,306,308],{"id":307},"_7-xポストエクスポート機能の方針転換と誰も傷つけないポスト原則明文化","7. Xポストエクスポート機能の方針転換と『誰も傷つけない』ポスト原則明文化",[15,310,311,314,315,318,319,322],{},[41,312,313],{},"/make-diary"," に「前日Xポストレビュー＋ポスト案5個生成」を統合する依頼で、最初は既存 Chrome 拡張に「自分の投稿エクスポート」機能を追加する設計で Codex レビューも通過させた。が、ユーザーから「DevTools MCP の ",[41,316,317],{},"evaluate_script"," で x.com ページコンテキストから直接 GraphQL 叩けばいい」と一刀両断され、半日かけた拡張側の実装を巻き戻して全面書き直し。さらに生成したポスト案で「税理士事務所の事務員前提」「他職業を下げる構造」が混入してユーザー指摘を受け、",[41,320,321],{},"short-video-strategy"," スキルに「誰も傷つけない原則」「事務員前提禁止」「税理士事務所下げ禁止」を明文化した。",[15,324,325],{},[48,326,50],{},[52,328,329,332],{},[55,330,331],{},"Chrome拡張依存を解消、DevTools MCP の evaluate_script で完結",[55,333,334],{},"暗黙原則（誰も傷つけない）をスキルに明文化、次回以降の生成で自動適用",[15,336,337,84,339],{},[48,338,83],{},[86,340,342],{"href":341},"/x-post-export-devtools-mcp-pivot","Chrome拡張からDevTools MCPへ方針転換：Xポストエクスポート機能を半日で巻き戻した話と『誰も傷つけないポスト』原則の明文化",[91,344],{},[33,346,348],{"id":347},"_8-github-158リポのセキュリティ現状把握","8. GitHub 158リポのセキュリティ現状把握",[15,350,351],{},"午前にある会計ソフトAのソースコード漏洩事例の解説記事を読み、自分のプロジェクトに対策を当て込む公開記事を書いた。その流れで gh CLI を使って eurekapu-nuxt4 のセキュリティ設定を確認しようとしたら security_events スコープ不足で読めず、Push Protection / gitleaks の違いから整理し直すことに。158リポ（private 145 / public 13）の現状を gh API でバックグラウンド一括取得しようとしたが、CR混入・JSON空値バグで2回スクリプトを書き直し、95件取得した時点で異常に遅くなったので 95件で確定。実質ノーガード状態が確定したので、明日の自分が選べる Plan A/B/C 形式の TODO ドキュメントに整えて持ち越し。",[15,353,354],{},[48,355,50],{},[52,357,358,361,364],{},[55,359,360],{},"158リポの実態把握（Dependabot系がONなのは1件だけ）",[55,362,363],{},"Plan A/B/C のチェックボックス＋コマンドコピペ形式で明日の自分にハンドオフ",[55,365,366,367],{},"関連: ",[86,368,370],{"href":369},"/moneyforward-leak-lessons","マネーフォワードGitHub流出を受けて、ひとり開発の秘密管理を棚卸しした",[15,372,373,84,375],{},[48,374,83],{},[86,376,378],{"href":377},"/github-security-audit-prep","GitHub 158リポを棚卸し、Dependabot・Push Protection・Secret Scanningの現状把握から明日のTODOへ",[91,380],{},[19,382,383],{"id":383},"今日の試行錯誤",[385,386,387,409],"table",{},[388,389,390],"thead",{},[391,392,393,397,400,403,406],"tr",{},[394,395,396],"th",{},"#",[394,398,399],{},"テーマ",[394,401,402],{},"試したこと",[394,404,405],{},"結果",[394,407,408],{},"気づき",[410,411,412,430,450,470,486,505,521,537,553,569,586,605,621,647,665,681,704,721,738],"tbody",{},[391,413,414,418,421,424,427],{},[415,416,417],"td",{},"1",[415,419,420],{},"Vue移植24章",[415,422,423],{},"6/9/9並列でサブエージェント起動",[415,425,426],{},"成功",[415,428,429],{},"Write拒否は手動救済すれば全体は止まらない",[391,431,432,435,438,444,447],{},[415,433,434],{},"2",[415,436,437],{},"純資産合計バグ",[415,439,440,443],{},[41,441,442],{},"sums.eq"," だけで貸借チェック",[415,445,446],{},"失敗",[415,448,449],{},"当期純利益を含めないと貸借が永遠にズレる",[391,451,452,455,458,461,464],{},[415,453,454],{},"3",[415,456,457],{},"ブランチ取り違え",[415,459,460],{},"別セッションのブランチにコミットしてしまった",[415,462,463],{},"失敗→復旧",[415,465,466,469],{},[41,467,468],{},"reset --soft"," なら index は残るので安全",[391,471,472,475,478,481,483],{},[415,473,474],{},"4",[415,476,477],{},"仕訳エンジンのカクつき",[415,479,480],{},"rAF駆動で頑張る",[415,482,446],{},[415,484,485],{},"Web Animations API に置換すると別世界",[391,487,488,491,494,497,499],{},[415,489,490],{},"5",[415,492,493],{},"カウントアップ位置ズレ",[415,495,496],{},"popup を block 要素として行に挿入",[415,498,446],{},[415,500,501,504],{},[41,502,503],{},"position: absolute"," がscoped styleで上書きされていた",[391,506,507,510,513,516,518],{},[415,508,509],{},"6",[415,511,512],{},"yomitokuのWAL衝突",[415,514,515],{},"reconnect()でリセット",[415,517,446],{},[415,519,520],{},"レプリカファイル退避→再構築 + HTTP直書きで突破",[391,522,523,526,529,532,534],{},[415,524,525],{},"7",[415,527,528],{},"Amazon WebFetch",[415,530,531],{},"直接Fetch",[415,533,446],{},[415,535,536],{},"agent-browser にフォールバックで取得成功",[391,538,539,542,545,548,550],{},[415,540,541],{},"8",[415,543,544],{},"ケース100Vue化",[415,546,547],{},"書籍参照を本文に明記",[415,549,446],{},[415,551,552],{},"ユーザー指摘で全削除＋プロジェクトルール化",[391,554,555,558,561,564,566],{},[415,556,557],{},"9",[415,559,560],{},"5論点HTML",[415,562,563],{},"JS だけ切り出して CSS 切り出し漏れ",[415,565,446],{},[415,567,568],{},"共通CSS（913行）も同時に切り出すべきだった",[391,570,571,574,577,580,583],{},[415,572,573],{},"10",[415,575,576],{},"1FY構成の前提取引",[415,578,579],{},"期首にいきなり残高がある",[415,581,582],{},"不自然",[415,584,585],{},"設立→取得を前期 preposted で並べる2FY構成に統一",[391,587,588,591,594,597,600],{},[415,589,590],{},"11",[415,592,593],{},"Dependabot順次rebase",[415,595,596],{},"1件マージ→次がコンフリクト",[415,598,599],{},"ループ",[415,601,602,604],{},[41,603,213],{}," で一気に固定する統合PRに転換",[391,606,607,610,613,616,618],{},[415,608,609],{},"12",[415,611,612],{},"別セッション衝突",[415,614,615],{},"同じブランチで作業",[415,617,446],{},[415,619,620],{},"手紙形式で通信＋新ブランチ移管",[391,622,623,626,632,639,641],{},[415,624,625],{},"13",[415,627,628,629,631],{},"E2E ",[41,630,241],{},"置換",[415,633,634,635,638],{},"25箇所を ",[41,636,637],{},"load"," に置換",[415,640,446],{},[415,642,643,644,646],{},"Codex「SPAでは ",[41,645,637],{}," 再発火しない」→全削除に方針転換",[391,648,649,652,655,658,660],{},[415,650,651],{},"14",[415,653,654],{},"E2E ハイドレート前click",[415,656,657],{},"即時click",[415,659,446],{},[415,661,662,664],{},[41,663,225],{}," で retry 化して恒久対策",[391,666,667,670,673,676,678],{},[415,668,669],{},"15",[415,671,672],{},"OBS Chromeスクリプト",[415,674,675],{},"クラス名だけで判定",[415,677,446],{},[415,679,680],{},"Chromiumベース別アプリも拾うのでプロセス名併用",[391,682,683,686,692,695,697],{},[415,684,685],{},"16",[415,687,688,689,691],{},"Stream Deck ",[41,690,269],{},"起動",[415,693,694],{},"直接登録",[415,696,446],{},[415,698,699,278,701,703],{},[41,700,277],{},[41,702,281],{},"）で解決",[391,705,706,709,712,715,718],{},[415,707,708],{},"17",[415,710,711],{},"Xポストエクスポート",[415,713,714],{},"Chrome拡張に機能追加",[415,716,717],{},"半日無駄",[415,719,720],{},"DevTools MCP の evaluate_script で完結する話だった",[391,722,723,726,729,732,735],{},[415,724,725],{},"18",[415,727,728],{},"ポスト案生成",[415,730,731],{},"既定スキルで生成",[415,733,734],{},"他者下げ混入",[415,736,737],{},"「誰も傷つけない」原則をスキルに明文化",[391,739,740,743,746,749,752],{},[415,741,742],{},"19",[415,744,745],{},"GitHub158リポ取得",[415,747,748],{},"bashループで一括",[415,750,751],{},"CR/空値バグ",[415,753,754],{},"スクリプト書き直し、95件で見切り判断",[91,756],{},[19,758,759],{"id":759},"今日の学び",[52,761,762,765,771,781,788],{},[55,763,764],{},"並列サブエージェントは「独立した作業」と「Write拒否時の手動救済」をセットで運用すると速い。20回以上回した日でも、Write拒否1〜2件を自分で書けば全体は止まらない",[55,766,767,768,770],{},"Codex（GPT-5.5）レビューは「致命的な点だけ指摘して」と指示しても本質的な抜け漏れを掘り当ててくれる。pnpm-lock 順次rebaseの罠も、SPAの ",[41,769,637],{}," 再発火しない件も、Codex指摘で方針転換できた",[55,772,773,774,776,777,780],{},"別セッションとブランチが衝突したら、",[41,775,468],{}," で巻き戻して新ブランチを切るのが一番安全。",[41,778,779],{},"git checkout"," で破壊的に戻すと午前の修正が全部飛ぶ可能性がある",[55,782,783,784,787],{},"著作権・倫理に関するルールは「人に言われてから」ではなく「ルールに書いて」運用に組み込まないと毎回同じミスを繰り返す。今日明文化した ",[41,785,786],{},"book-references.md"," と「誰も傷つけない」原則は、次回以降の生成で自動適用される",[55,789,790,792],{},[41,791,102],{}," 駆動のアニメより Web Animations API のほうが圧倒的に滑らか。GPU合成にも乗りやすい",[91,794],{},[19,796,797],{"id":797},"明日やること",[52,799,802,812,818,824],{"className":800},[801],"contains-task-list",[55,803,806,811],{"className":804},[805],"task-list-item",[807,808],"input",{"disabled":809,"type":810},true,"checkbox"," Plan A/B/C のうち1つを選んで GitHub 158リポのセキュリティ設定を一括有効化",[55,813,815,817],{"className":814},[805],[807,816],{"disabled":809,"type":810}," ケース100の続き5〜10論点をインタラクティブHTML化（朝9時にリマインドエージェントが来る）",[55,819,821,823],{"className":820},[805],[807,822],{"disabled":809,"type":810}," 簿記3級ノートの残り2章（intro系の続き）を移植して26章コンプリート",[55,825,827,829],{"className":826},[805],[807,828],{"disabled":809,"type":810}," 仕訳エンジンに「効果音」を追加するか検討（Web Audio APIで短い決定音）",[91,831],{},[19,833,834],{"id":834},"関連記事",[52,836,837,841,845,849,853,857,861,865,869],{},[55,838,839],{},[86,840,89],{"href":88},[55,842,843],{},[86,844,133],{"href":132},[55,846,847],{},[86,848,165],{"href":164},[55,850,851],{},[86,852,201],{"href":200},[55,854,855],{},[86,856,253],{"href":252},[55,858,859],{},[86,860,302],{"href":301},[55,862,863],{},[86,864,342],{"href":341},[55,866,867],{},[86,868,378],{"href":377},[55,870,871],{},[86,872,370],{"href":369},{"title":874,"searchDepth":875,"depth":875,"links":876},"",2,[877,878,889,890,891,892],{"id":21,"depth":875,"text":21},{"id":31,"depth":875,"text":31,"children":879},[880,882,883,884,885,886,887,888],{"id":35,"depth":881,"text":36},3,{"id":95,"depth":881,"text":96},{"id":138,"depth":881,"text":139},{"id":170,"depth":881,"text":171},{"id":206,"depth":881,"text":207},{"id":258,"depth":881,"text":259},{"id":307,"depth":881,"text":308},{"id":347,"depth":881,"text":348},{"id":383,"depth":875,"text":383},{"id":759,"depth":875,"text":759},{"id":797,"depth":875,"text":797},{"id":834,"depth":875,"text":834},"diary","簿記3級ノートをVueに24章一気移植、書籍3冊をyomitokuでOCRしてTurso DB蔵書化、ケース100の著作権配慮ルール整備、Dependabot 6PRをpnpm overrides統合、E2EをCodexレビューで恒久対策。1日で7本のPRが回った日。","md",{},"/2026-05-02-diary","daily-log",false,"2026-05-02T00:00:00.000Z",{"title":5,"description":894},"2026-05/2026-05-02/diary-2026-05-02",[904,905,906,907,908,909,910],"日記","Vue移植","サブエージェント並列","Turso","Dependabot","Codexレビュー","著作権配慮",null,"snW02k0qN_NGTZBzB5M3yU7_VYJDv9gYuxOp_ZT4pJc",[],"https://log.eurekapu.com/favicon.svg",1778379989653]