[{"data":1,"prerenderedAt":237},["ShallowReactive",2],{"content-/microgpt-accounting-textbook":3,"all-pages-for-dir":235,"og-image-/microgpt-accounting-textbook":236},{"id":4,"title":5,"body":6,"category":216,"description":217,"extension":218,"meta":219,"navigation":57,"ogImage":220,"path":221,"project_name":222,"published":223,"publishedAt":224,"seo":225,"stem":226,"tags":227,"todo":220,"unpublished":223,"updatedAt":220,"__hash__":234},"pages/2026-05/2026-05-31/microgpt-accounting-textbook.md","microGPTを会計の言葉で読み切る教材を作った日",{"type":7,"value":8,"toc":207},"minimark",[9,14,18,21,29,33,41,44,82,85,88,98,108,111,114,118,137,140,147,154,157,160,183,186],[10,11,13],"h2",{"id":12},"きっかけ-200行を読み切るための橋を架けたい","きっかけ — 200行を「読み切る」ための橋を架けたい",[15,16,17],"p",{},"積み残しになっていた計画書を開いた。200行ほどの小さなGPT実装を、簿記・会計の言葉で理解するインタラクティブ教材を作る、という構想だ。計画だけ書いて全フェーズ未着手のまま放置していた。",[15,19,20],{},"最初は「会計アナロジーのデモを並べれば完成」だと思っていた。勾配を感応度、配賦をソフトマックス、損失を予実差異に置き換えてデモを9個作る。そういう絵を描いていた。",[15,22,23,24,28],{},"ところが途中で、本当のゴールが見えた。会計アナロジーはあくまで橋渡しで、最終的にやりたいのは",[25,26,27],"strong",{},"実物の200行コードを各段階に対応づけて、最後まで読み切ること","だった。「要するに200行を読むことが最終的な目的なんですよ」と自分で言葉にした瞬間、教材の設計が組み替わった。",[10,30,32],{"id":31},"やったこと-ハブから各段各用語へ枝分かれする構造","やったこと — ハブから各段、各用語へ枝分かれする構造",[15,34,35,36,40],{},"Claude Code に指示して、まず純粋関数の土台から組ませた。ReLU・ソフトマックス・線形写像・クロスエントロピー、それに会計向けの利益感応度や連鎖律を ",[37,38,39],"code",{},"microgpt-math.ts"," に閉じ込め、テストを32件先に書かせた。全部greenになり、カバレッジは100%まで上がった。",[15,42,43],{},"そこから上に積んでいった。",[45,46,49,60,66,76],"ul",{"className":47},[48],"contains-task-list",[50,51,54,59],"li",{"className":52},[53],"task-list-item",[55,56],"input",{"checked":57,"disabled":57,"type":58},true,"checkbox"," 6段パイプライン図のハブページ（データ準備→トークナイザ→Autograd→初期化→モデル本体→学習・推論）",[50,61,63,65],{"className":62},[53],[55,64],{"checked":57,"disabled":57,"type":58}," 9個のインタラクティブデモ（感応度・連鎖律・ReLU・初期化・配賦など）を会計の言葉で",[50,67,69,71,72,75],{"className":68},[53],[55,70],{"checked":57,"disabled":57,"type":58}," 各用語ページに「実際の ",[37,73,74],{},"microgpt.py"," の該当コード」を黒背景で並べる",[50,77,79,81],{"className":78},[53],[55,80],{"checked":57,"disabled":57,"type":58}," ホームの「学習・クイズ」先頭に教材への導線カードを追加",[15,83,84],{},"デモはスタイルとアナロジーの一貫性を崩したくなかったので、サブエージェントに散らさず自分の指示で3個ずつのバッチに分けて作らせた。ビルド時に「10 microgpt routes for prerendering」とログが出て、親ページと9用語が全部ルート登録されたのを確認した。",[10,86,87],{"id":87},"元コードを憶測で書かない",[15,89,90,91,93,94,97],{},"各段に実コードを載せる段になって、ひとつ釘を刺した。憶測でコードを書くと、自分が読んだ記事と食い違って台無しになる。だから元ネタの200行を正確に特定させた。Karpathy 氏が公開した依存ゼロの ",[37,92,74],{},"、199行。Gistから全文を取得して ",[37,95,96],{},"memo/2026-05-31/microgpt.py"," に保存し、行番号付きで各段に貼り込ませた。",[99,100,106],"pre",{"className":101,"code":103,"language":104,"meta":105},[102],"language-text","データ準備   → L14-21\nトークナイザ → L23-...\nAutograd     → ...\n","text","",[37,107,103],{"__ignoreMap":105},[15,109,110],{},"ここで画面を見ていて引っかかった。データ準備に「L14-21」という紫のバッジは出ているのに、クリックしても飛べない。「実際にそれはどこにあるんですか、どこを確認すればいいんですか」と。バッジが行番号を指しているのに、その行へたどり着く導線がなかった。",[15,112,113],{},"そこで「6段それぞれをクリック可能にして、1段=1個別ページにすればいい」という案が出た。各段ページに、その段の実コードと会計解説と、ぶら下がる用語へのリンクを載せる。パイプライン図の番号ボックスを各段ページへのリンクに変える。これが今日の作業の核心になった。",[10,115,117],{"id":116},"malformedが連発した-そして引き継ぎへ切り替えた","malformedが連発した — そして引き継ぎへ切り替えた",[15,119,120,121,124,125,128,129,132,133,136],{},"段別ページ化を進めている最中から、ツール呼び出しが壊れ始めた。",[37,122,123],{},"Your tool call was malformed and could not be parsed."," が出る。リトライしても ",[37,126,127],{},"retry also failed"," で止まる。一度ではなく、何度も。",[37,130,131],{},"concepts.ts"," への編集、",[37,134,135],{},"PipelineDiagram.vue"," のスタイル追加、そのあたりで連発した。",[15,138,139],{},"コンテキストに実コードの断片と調査ログとスクショが溜まり、ツール呼び出しの引数が破綻しやすくなっていたのだと思う。画面のスクショを撮っては閉じ、撮っては閉じを繰り返していたのも効いていたはずだ。",[15,141,142,143,146],{},"そこで方針を切り替えた。malformedが連発したら、確定事項と残作業を引き継ぎドキュメントに保存して、重い検証は独立したコンテキストのサブエージェントに投げる。これは前から決めていた運用だ。",[37,144,145],{},"microgpt-handoff.md"," を作り、完了済み・残作業・既知の状態・検証の進め方・復帰プロンプトまで書き込んだ。",[15,148,149,150,153],{},"サブエージェントへの指示には必ず一文を添えた。",[25,151,152],{},"巨大ファイルを全Readするな、複雑なjqを避けろ、コンテキスト汚染に注意しろ","。これを伝えないと、サブエージェント自身も同じく落ちる。重い表示確認をサブエージェントに分離し、結論だけメインに返させる。これが効いた。",[15,155,156],{},"サブエージェント側で6段すべての段別ページがHTTP 200で返り、データ準備ページに「実際のコード」「STEP」が出て、ハブの段名クリックで遷移できることを確認できた。前後ナビで空のプレースホルダーが出る小さな崩れも直した。コードブロックは highlight.js ベースに差し替えて、Python のシンタックスハイライトを効かせた。",[10,158,159],{"id":159},"学び",[45,161,162,169,176],{},[50,163,164,165,168],{},"malformedが出たら、ファイルサイズより先に",[25,166,167],{},"直近のツール呼び出しの引数","を疑う。今日も小さな編集で連発した。原因は1回の引数の大きさより、コンテキスト全体の汚れだった。",[50,170,171,172,175],{},"詰まったら粘らず、",[25,173,174],{},"引き継ぎドキュメントに確定事項を逃がして、サブエージェントに渡す","。メインの会話が生データで汚れる前に手を打つほうが速い。",[50,177,178,179,182],{},"教材は「アナロジーで分かった気にさせる」で止めない。",[25,180,181],{},"実物のコードの行番号へ指で飛べる","ところまで作って、ようやく「読み切る」入口になる。バッジを出すだけでは飛べない、という当たり前を画面で突きつけられた。",[10,184,185],{"id":185},"明日やること",[45,187,189,195,201],{"className":188},[48],[50,190,192,194],{"className":191},[53],[55,193],{"disabled":57,"type":58}," フェーズ3の発展トピック（Attention・埋め込み・残差・Adam・temperature）を、会計アナロジーと実コードのセットで追加する",[50,196,198,200],{"className":197},[53],[55,199],{"disabled":57,"type":58}," 各段ページの会計解説を、もう一段やさしい言葉に削る",[50,202,204,206],{"className":203},[53],[55,205],{"disabled":57,"type":58}," バックグラウンドで起動しっぱなしのdevサーバー（ポート3001）を止める",{"title":105,"searchDepth":208,"depth":208,"links":209},2,[210,211,212,213,214,215],{"id":12,"depth":208,"text":13},{"id":31,"depth":208,"text":32},{"id":87,"depth":208,"text":87},{"id":116,"depth":208,"text":117},{"id":159,"depth":208,"text":159},{"id":185,"depth":208,"text":185},"dev","200行のGPT実装を、予実管理や配賦や感応度といった会計の言葉に翻訳して読み切るためのインタラクティブ教材をNuxtで実装した。malformedが連発した末に引き継ぎドキュメントとサブエージェントへ切り替えた一日の記録。","md",{},null,"/microgpt-accounting-textbook","mdx-playground",false,"2026-05-31T00:00:00.000Z",{"title":5,"description":217},"2026-05/2026-05-31/microgpt-accounting-textbook",[228,229,230,231,232,233],"microgpt","教材","vue","nuxt","malformed","サブエージェント","Z8EDev73TFiyikn2zJrfQWXRPmNdAhLXTYz_2fFvhAU",[],"https://log.eurekapu.com/og/blog/microgpt-accounting-textbook.png?v=2026-05-31T00%3A00%3A00.000Z&title=microGPT%E3%82%92%E4%BC%9A%E8%A8%88%E3%81%AE%E8%A8%80%E8%91%89%E3%81%A7%E8%AA%AD%E3%81%BF%E5%88%87%E3%82%8B%E6%95%99%E6%9D%90%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F%E6%97%A5&author=Kei%20Komatsu&sig=9f22be078e34bbf6",1782528845966]