[{"data":1,"prerenderedAt":604},["ShallowReactive",2],{"content-/2026-04-23-diary":3,"all-pages-for-dir":602,"og-image-/2026-04-23-diary":603},{"id":4,"title":5,"body":6,"category":579,"description":580,"extension":581,"meta":582,"navigation":583,"path":584,"project_name":585,"published":586,"publishedAt":587,"seo":588,"stem":589,"tags":590,"todo":599,"updatedAt":600,"__hash__":601},"pages/2026-04/2026-04-23/diary-2026-04-23.md","2026年4月23日の開発日記 - 会計教育コンテンツのUI刷新と基準データベース整備、開発環境の大掃除",{"type":7,"value":8,"toc":562},"minimark",[9,14,18,22,29,32,37,40,46,65,76,79,83,86,90,104,112,114,118,121,125,136,144,146,150,153,157,168,170,174,177,181,192,194,198,201,205,237,245,247,250,483,485,488,539,541,544],[10,11,13],"h1",{"id":12},"_2026年4月23日の開発日記","2026年4月23日の開発日記",[15,16,17],"p",{},"eurekapuの教育コンテンツを朝7時から夕方17時まで丸一日かけて改修した。ミラーカラムレイアウトのスクロール化、会計基準データベースの原文忠実化、書籍OCRバッチ処理の3本立て。6セッション並行で回し、計10時間以上をeurekapu関連に費やした。夜にはVolta側の不具合を機に、Node.js管理をmiseへ移行し、Claude Codeも公式インストーラー版で入れ直した。",[19,20,21],"h2",{"id":21},"今日のタイムライン",[15,23,24],{},[25,26],"img",{"alt":27,"src":28},"タイムライン","/2026-04/2026-04-23/timeline-2026-04-23.png",[19,30,31],{"id":31},"今日やったこと",[33,34,36],"h3",{"id":35},"_1-ミラーカラムからスクロール形式へのレイアウト変換","1. ミラーカラムからスクロール形式へのレイアウト変換",[15,38,39],{},"CF計算書の基礎知識ページ（boki3/ch0）で、スライドを1枚ずつ切り替えるミラーカラムレイアウトが「説明が断片化する」という問題を抱えていた。スクロール形式に変換し、テキストが一続きに読めるようにした。",[15,41,42],{},[43,44,45],"strong",{},"主な成果:",[47,48,49,53,56,59,62],"ul",{},[50,51,52],"li",{},"boki3/ch0をスクロール形式に変換（singleSectionModeを活用）",[50,54,55],{},"Ch1（借入金ライフサイクル）以降もスクロール変換",[50,57,58],{},"Excel基礎講座のcontents.vue、top.vueも同様に変換",[50,60,61],{},"SVGのwidth属性追加で初期レンダリングの小さ表示を修正",[50,63,64],{},"steps側のコンテンツをboki3/ch0に流し込み、内容の差分を解消",[15,66,67,70,71],{},[43,68,69],{},"詳細:"," ",[72,73,75],"a",{"href":74},"/miller-to-scroll-layout-conversion","ミラーカラムからスクロール形式へのレイアウト変換",[77,78],"hr",{},[33,80,82],{"id":81},"_2-会計基準データベースの原文忠実化","2. 会計基準データベースの原文忠実化",[15,84,85],{},"CF計算書ページに会計基準の引用コンポーネントを追加しようとしたら、そもそもJSONデータが原文と食い違っていた。修正を始めたらASBJのドメイン移行（asb.or.jp → asb-j.jp）が発覚し、リンクページ198件のURL検証まで走ることになった。",[15,87,88],{},[43,89,45],{},[47,91,92,95,98,101],{},[50,93,94],{},"全42基準のソースを収集（ASBJ 24件HTML + JICPA/FSA 10件PDF）",[50,96,97],{},"html_to_json.pyで31件の条文JSON変換に成功",[50,99,100],{},"cf-jitsumu-shishinの条文を53→61に拡充（Turso DBのOCRテキストと照合）",[50,102,103],{},"リンクページ198件のURL検証・修正（e-Gov 19件、JICPA 6件、ASBJ 55件を更新）",[15,105,106,70,108],{},[43,107,69],{},[72,109,111],{"href":110},"/accounting-standards-faithful-reproduction","会計基準データベースの原文忠実化",[77,113],{},[33,115,117],{"id":116},"_3-書籍9冊のocr処理とturso-db格納","3. 書籍9冊のOCR処理とTurso DB格納",[15,119,120],{},"yomitoku（日本語特化AI OCR）で会計基準のPDF 9冊・589ページをMarkdownに変換し、Turso DBに格納した。",[15,122,123],{},[43,124,45],{},[47,126,127,130,133],{},[50,128,129],{},"連結CF実務指針、外貨建実務指針、金融商品実務指針など9冊を処理",[50,131,132],{},"process_yomitoku_book関数でTurso Embedded Replicaに直接格納",[50,134,135],{},"蔵書DBを19冊→28冊、約3,200チャンクに拡張",[15,137,138,70,140],{},[43,139,69],{},[72,141,143],{"href":142},"/book-ocr-turso-batch-import","yomitoku OCRで会計基準9冊を一括処理",[77,145],{},[33,147,149],{"id":148},"_4-教育コンテンツの設計方針整理","4. 教育コンテンツの設計方針整理",[15,151,152],{},"CF計算書教材を「はじめて系（教材A）」と「ゼロから作る系（教材B）」の2層に分離する設計方針をまとめた。steps側のch0-1/ch0-2が「はじめて系」の内容を抱え込んでいる問題を特定。計画書を作成してCodexレビューも受けたが、仕様が固まりきらず「保留」とした。",[15,154,155],{},[43,156,45],{},[47,158,159,162,165],{},[50,160,161],{},"2層分離の方針文書をmemoに保存",[50,163,164],{},"Codexレビューで致命的指摘3点を反映して計画修正",[50,166,167],{},"ただし実装計画は仕様未確定のため保留",[77,169],{},[33,171,173],{"id":172},"_5-レッスンページの整理","5. レッスンページの整理",[15,175,176],{},"lessonsのインデックスページを「初めて系」と「ゼロから作る系」の2セクション・2列グリッドにリデザインした。",[15,178,179],{},[43,180,45],{},[47,182,183,186,189],{},[50,184,185],{},"topicsにcategoryフィールドを追加し、上段/下段に分離",[50,187,188],{},"CF精算表ステップ学習と別表四と五にドラフトバッジを追加",[50,190,191],{},"カード配置のリンク先を直接ch0ページに変更",[77,193],{},[33,195,197],{"id":196},"_6-volta-から-mise-への移行と-claude-code-再インストール","6. Volta から mise への移行と Claude Code 再インストール",[15,199,200],{},"Volta 側で不具合が出たため、3月に立てていた移行計画を実行した。Node.js の管理を mise に切り替え、Volta を PATH から外し、Claude Code も公式のネイティブインストーラー版で入れ直した。",[15,202,203],{},[43,204,45],{},[47,206,207,215,218,225],{},[50,208,209,210,214],{},"Node.js 管理を Volta → mise に切り替え（",[211,212,213],"code",{},"v22.22.2"," が mise 経由で動作）",[50,216,217],{},"ユーザー環境変数から Volta 関連の PATH エントリを削除",[50,219,220,221,224],{},"npm 版 Claude Code が Windows ネイティブバイナリを欠いていたため、公式インストーラーで再セットアップ（",[211,222,223],{},"2.1.119","）",[50,226,227,228,232,233,236],{},"3月の ",[72,229,231],{"href":230},"/volta-to-mise-migration","移行計画記事"," を ",[211,234,235],{},"todo: \"done\""," に更新",[15,238,239,70,241],{},[43,240,69],{},[72,242,244],{"href":243},"/volta-to-mise-migration-complete","Volta から mise への移行完了 - Claude Code を入れ直すまでに詰まった5つの落とし穴",[77,246],{},[19,248,249],{"id":249},"今日の試行錯誤",[251,252,253,275],"table",{},[254,255,256],"thead",{},[257,258,259,263,266,269,272],"tr",{},[260,261,262],"th",{},"#",[260,264,265],{},"テーマ",[260,267,268],{},"試したこと",[260,270,271],{},"結果",[260,273,274],{},"気づき",[276,277,278,296,311,327,343,360,377,393,424,444,462],"tbody",{},[257,279,280,284,287,290,293],{},[281,282,283],"td",{},"1",[281,285,286],{},"スクロール変換",[281,288,289],{},"レイアウト全体をstepsレイアウトに差し替え",[281,291,292],{},"失敗",[281,294,295],{},"ユーザーはセクション列・チャプター列を残したかった",[257,297,298,301,303,306,308],{},[281,299,300],{},"2",[281,302,286],{},[281,304,305],{},"MillerViewerのslotでColumn 4だけ差し替え",[281,307,292],{},[281,309,310],{},"トピック列を消してほしいという要望だった",[257,312,313,316,318,321,324],{},[281,314,315],{},"3",[281,317,286],{},[281,319,320],{},"singleSectionModeでトピック列を自動非表示",[281,322,323],{},"成功",[281,325,326],{},"既存コンポーネントの隠し機能が使えた",[257,328,329,332,335,338,340],{},[281,330,331],{},"4",[281,333,334],{},"ASBJ基準取得",[281,336,337],{},"curlで旧ドメイン(asb.or.jp)にアクセス",[281,339,292],{},[281,341,342],{},"ドメインが新サイト(asb-j.jp)に移行していた",[257,344,345,348,351,354,357],{},[281,346,347],{},"5",[281,349,350],{},"HTML→JSON変換",[281,352,353],{},"既存JSONファイルを上書き",[281,355,356],{},"事故",[281,358,359],{},"citations.jsonの引用マッピングが壊れた。gitから復元",[257,361,362,365,368,371,374],{},[281,363,364],{},"6",[281,366,367],{},"リンク検証",[281,369,370],{},"HTTPステータスだけチェック",[281,372,373],{},"不十分",[281,375,376],{},"200が返っても内容が違うケースを見落とす",[257,378,379,382,385,388,390],{},[281,380,381],{},"7",[281,383,384],{},"チャプター切替",[281,386,387],{},"nextTickでscrollTo(0)",[281,389,292],{},[281,391,392],{},"ブラウザのスクロール復元と競合。flush:'post' + rAFで解決",[257,394,395,398,401,412,414],{},[281,396,397],{},"8",[281,399,400],{},"mise状態確認",[281,402,403,404,407,408,411],{},"PowerShellで ",[211,405,406],{},"head -5"," / ",[211,409,410],{},"which node"," を実行",[281,413,292],{},[281,415,416,417,407,420,423],{},"Linux/macOSコマンドはPowerShellで通らない。",[211,418,419],{},"Select-Object -First",[211,421,422],{},"Get-Command"," に書き換え",[257,425,426,429,432,435,437],{},[281,427,428],{},"9",[281,430,431],{},"Volta削除",[281,433,434],{},"Windowsの環境変数編集画面でPathを保存",[281,436,292],{},[281,438,439,440,443],{},"「2047文字より長い値は設定できません」。",[211,441,442],{},"[Environment]::SetEnvironmentVariable"," で直接書き換えて解決",[257,445,446,449,452,457,459],{},[281,447,448],{},"10",[281,450,451],{},"Claude Code入れ直し",[281,453,454],{},[211,455,456],{},"npm install -g @anthropic-ai/claude-code",[281,458,292],{},[281,460,461],{},"claude.exe が 500バイトのエラー出力スクリプトだった。optional依存のネイティブバイナリが降ってこない",[257,463,464,467,469,475,477],{},[281,465,466],{},"11",[281,468,451],{},[281,470,471,472],{},"公式の ",[211,473,474],{},"irm https://claude.ai/install.ps1 | iex",[281,476,323],{},[281,478,479,482],{},[211,480,481],{},"C:\\Users\\numbe\\.local\\bin\\claude.exe"," に2.1.119が入って正常動作",[77,484],{},[19,486,487],{"id":487},"今日の学び",[47,489,490,493,496,499,509,512,518,528],{},[50,491,492],{},"singleSectionModeのような既存機能を先に探すと、大規模な改修を避けられる",[50,494,495],{},"JSONファーストの原則: HTMLは生成物、ソースデータのJSONを編集する",[50,497,498],{},"上書きではなく追加: 既存のマッピングが参照するIDは不変にする",[50,500,501,504,505,508],{},[211,502,503],{},"flush: 'post'"," + ",[211,506,507],{},"requestAnimationFrame","の二段構えは、Vue + ブラウザのスクロール競合で使い回せるパターン",[50,510,511],{},"外部サイトのドメイン移行は連鎖する — 1箇所見つけたら関連URL全部を洗い直す",[50,513,514,515,517],{},"Windowsの環境変数編集画面には2047文字の壁がある。PATHが育ち切ったら ",[211,516,442],{}," で直接書き換えるのが速い",[50,519,520,523,524,527],{},[211,521,522],{},"[Environment]::SetEnvironmentVariable(...)"," は保存済みレジストリを書き換えるだけで、起動中セッションの ",[211,525,526],{},"$env:Path"," は書き換わらない。反映にはターミナルを開き直す",[50,529,530,531,534,535,538],{},"npm版Claude Codeの ",[211,532,533],{},"claude.exe"," はネイティブバイナリ本体ではなく、optional依存のダウンロードが失敗したときのエラー出力用スクリプト。Windowsは公式の ",[211,536,537],{},"install.ps1"," が結局一番近道",[77,540],{},[19,542,543],{"id":543},"関連記事",[47,545,546,550,554,558],{},[50,547,548],{},[72,549,75],{"href":74},[50,551,552],{},[72,553,111],{"href":110},[50,555,556],{},[72,557,143],{"href":142},[50,559,560],{},[72,561,244],{"href":243},{"title":563,"searchDepth":564,"depth":564,"links":565},"",2,[566,567,576,577,578],{"id":21,"depth":564,"text":21},{"id":31,"depth":564,"text":31,"children":568},[569,571,572,573,574,575],{"id":35,"depth":570,"text":36},3,{"id":81,"depth":570,"text":82},{"id":116,"depth":570,"text":117},{"id":148,"depth":570,"text":149},{"id":172,"depth":570,"text":173},{"id":196,"depth":570,"text":197},{"id":249,"depth":564,"text":249},{"id":487,"depth":564,"text":487},{"id":543,"depth":564,"text":543},"diary","eurekapuのCF計算書ページをミラーカラムからスクロール形式に変換し、会計基準42件のソース収集・URL検証を完了。書籍9冊のOCR処理でTurso DBを28冊に拡張。さらにNode.js管理をVoltaからmiseへ移行し、Claude Codeも入れ直した1日","md",{},true,"/2026-04-23-diary","daily-log",false,"2026-04-23T00:00:00.000Z",{"title":5,"description":580},"2026-04/2026-04-23/diary-2026-04-23",[591,592,593,594,595,596,597,598],"日記","eurekapu","レイアウト","会計基準","OCR","TursoDB","mise","Claude Code",null,"2026-04-24T00:00:00.000Z","g0WcLTz2FcqKq4oIYkEdxnzf0PolmJnW2MecYivGqEg",[],"https://log.eurekapu.com/favicon.svg",1777008252413]