[{"data":1,"prerenderedAt":502},["ShallowReactive",2],{"content-/2026-07-20-diary":3,"all-pages-for-dir":482,"related-/2026-07-20-diary":483,"og-image-/2026-07-20-diary":501},{"id":4,"title":5,"body":6,"category":464,"concepts":465,"description":466,"extension":467,"meta":468,"navigation":420,"ogImage":465,"path":469,"project_name":470,"published":471,"publishedAt":472,"seo":473,"stem":474,"tags":475,"todo":465,"unpublished":471,"updatedAt":465,"__hash__":481},"pages/2026-07/2026-07-20/diary-2026-07-20.md","2026年7月20日の開発日記 - 想起で単語を思い出す仕組みと、GPT-5.6 Solの20万トークンの壁",{"type":7,"value":8,"toc":446},"minimark",[9,14,18,21,25,32,35,40,43,46,49,55,68,79,82,86,89,92,95,99,110,118,120,124,136,140,151,159,161,165,168,172,180,185,187,191,198,202,210,215,217,221,228,235,239,253,261,263,266,382,384,387,404,406,409,423,425,428],[10,11,13],"h1",{"id":12},"_2026年7月20日の開発日記","2026年7月20日の開発日記",[15,16,17],"p",{},"朝いちばん、「残しなかったでしたっけ」と自分に聞き返すところから一日が始まった。昨日どこまで進めていたのか、コミットは済んでいたのか。記憶があいまいなまま画面を開くのは怖い。だからまずディスクの状態を確認することにした。",[15,19,20],{},"振り返ってみると、この日はずっと「思い出す」という一本の糸でつながっていた。単語を覚えるとは思い出す機会を作ることであり、デプロイの積み残しを片づけるとは昨日の記憶を裏取りすることであり、コンテキストウィンドウの謎を追うとは「ハーネスは今何を覚えているのか」を確かめる作業だった。同じ構造が、規模もレイヤーも違う場所で三度現れた一日だった。",[22,23,24],"h2",{"id":24},"今日のタイムライン",[15,26,27],{},[28,29],"img",{"alt":30,"src":31},"タイムライン","/2026-07/2026-07-20/timeline-2026-07-20.png",[22,33,34],{"id":34},"今日やったこと",[36,37,39],"h3",{"id":38},"_1-デプロイ復旧と画像音声をr2配信に寄せ切る","1. デプロイ復旧と、画像・音声をR2配信に寄せ切る",[15,41,42],{},"朝の積み残し確認から始まり、検証→デプロイ→コミットの順にきれいに進めるつもりが、wranglerの認証切れでデプロイだけがexit 1で落ちた。ビルドは無事だったので、再ログインしてビルド済みの成果物をそのまま投入し直す。この日最初の小さなつまずきは、ここで解消した。",[15,44,45],{},"コミットの前には学習ゲートの5問クイズに答え、全問正解して受領証をもらう。落ち着いたところで話が変わった。「R2に配信しているんだから、ローカルにすら画像・音声の実体を持たせたくない」という新しい注文だ。R2の全数監査(11,859件オール200)とmiddlewareのフォールバック検証を済ませてから、アトラス画像3,859枚(約338MB)と音声118MBをローカルから削除した。",[15,47,48],{},"さらにSSDへの原本移設も頼まれ、一度は生成スクリプトの保存先までF:ドライブへ寄せてしまった。指摘を受けて振り返ると、相対パスでファイルごと移していたせいでバッチ実行がSSD接続前提になっていたと気づく。SSDは完成品のアーカイブ専用、実装はリポジトリとCドライブで完結、という形に組み直した。",[15,50,51],{},[52,53,54],"strong",{},"主な成果:",[56,57,58,62,65],"ul",{},[59,60,61],"li",{},"デプロイの認証切れを再ログインのみで復旧(再ビルド不要)",[59,63,64],{},"アトラス画像338MB＋音声118MBをローカルから削除し、devでもR2フォールバック配信に統一",[59,66,67],{},"SSD移設の設計を一度誤り、実装とバックアップ置き場を分離する形に組み直した",[15,69,70,73,74],{},[52,71,72],{},"詳細:"," ",[75,76,78],"a",{"href":77},"/gogen-assets-r2-offload","eurekapu-nuxt4のデプロイ復旧と、画像・音声をR2配信に寄せ切った一日",[80,81],"hr",{},[36,83,85],{"id":84},"_2-想起練習で単語を思い出す仕組みとストリーム型uxの移植","2. 想起練習で単語を思い出す仕組みと、ストリーム型UXの移植",[15,87,88],{},"単語帳を何周しても退屈な理由を尋ねたところ、「もう思い出す努力が要らない状態で反復しているから記憶に残らない」という答えが返ってきた。思い当たる節があった。自分がふだん単語を復習するときの「直近3回分だけ見る」というやり方は、このアプリの仕訳クイズの履歴機能とまったく同じ発想だった。",[15,90,91],{},"すでに仕込んであった履歴システムを語源英単語アプリに転用し、「今日の復習」トレーナーを実装した。続けてレッスンズの導線も整理し、3クリックかかっていたトレーナーへの入り口を2クリックに縮め、紛らわしかった「単語アトラス」の呼び名も「単語リスト」に改めた。",[15,93,94],{},"その日のうちに、もう一つ思い出す作業が続いた。以前mdx-playground側で作った「選択→即判定→自動スクロール」のクイズUXをここに移植したいと思い立ったが、どのファイルだったかが記憶から抜け落ちていた。サブエージェント10体を並列で走らせて再発見し、実装を読み込んだ言語化メモをはさんでから移植した。記憶にあるものでも、裏取りしないと使えない。",[15,96,97],{},[52,98,54],{},[56,100,101,104,107],{},[59,102,103],{},"語源英単語アプリに想起ベースの「今日の復習」トレーナーを新規実装",[59,105,106],{},"レッスンズの入り口を3クリックから2クリックに整理、誤誘導バグも修正",[59,108,109],{},"「英単語850クイズ」のストリーム型UXをサブエージェント探索で再発見し、実装メモ経由でeurekapu-nuxt4へ移植",[15,111,112,73,114],{},[52,113,72],{},[75,115,117],{"href":116},"/gogen-eitango-stream-quiz-ux","語源英単語トレーナーに想起練習を実装し、ストリーム型クイズUXを移植するまで",[80,119],{},[36,121,123],{"id":122},"_3-claude-codeステータスラインにモデル別リミット表示を追加","3. Claude Codeステータスラインにモデル別リミット表示を追加",[15,125,126,127,131,132,135],{},"Fable 5を使い始めてから、全体の週間枠は半分も減っていないのにFableスコープの枠だけ8割近く尽きている非対称に気づいていなかった。使用量APIのレスポンスを覗くと、モデルスコープ付きの",[128,129,130],"code",{},"limits","配列が新しく増えていた。モデル名をハードコードせず、",[128,133,134],{},"display_name","が付いたエントリを拾って並べるループを10行足すだけで、ターミナルにFableの残量が常時見えるようになった。",[15,137,138],{},[52,139,54],{},[56,141,142,148],{},[59,143,144,145,147],{},"使用量APIの",[128,146,130],{},"配列からモデルスコープ付きリミットを検出する表示ロジックを追加",[59,149,150],{},"モデル名をハードコードしない実装にし、今後別モデルにスコープ付きリミットが付いても自動で並ぶ構成にした",[15,152,153,73,155],{},[52,154,72],{},[75,156,158],{"href":157},"/claude-code-statusline-fable5-model-limit","Claude Code ステータスラインにFable 5のモデル別リミット表示を追加した",[80,160],{},[36,162,164],{"id":163},"_4-fire経験談の章別ダイジェストを作成","4. FIRE経験談の章別ダイジェストを作成",[15,166,167],{},"長編のFIRE体験談を、章ごとのキーメッセージ・目次・重要パラグラフに整理した非公開ダイジェストを作った。全11部・79節を読み切るのは骨が折れるが、あとで自分が読み返すための地図として残しておく価値はある。特徴的なパラグラフにはSVG図解も添えた。",[15,169,170],{},[52,171,54],{},[56,173,174,177],{},[59,175,176],{},"全11部の章別ダイジェスト(キーメッセージ・目次・重要パラグラフの原文抜粋)を作成",[59,178,179],{},"各部の要点をSVG図解として11枚追加",[15,181,182,184],{},[52,183,72],{}," 非公開のため記事リンクなし(社内メモ扱い)",[80,186],{},[36,188,190],{"id":189},"_5-claude-codeハーネスでgpt-56-solを動かす環境を構築","5. Claude CodeハーネスでGPT-5.6 Solを動かす環境を構築",[15,192,193,194,197],{},"Claude Codeの中でCodexのGPT-5.6 Solを動かす手順を、実際にこの環境へ適用した。CLIProxyAPIをローカルに立て、Anthropic形式とOpenAI形式を翻訳させ、ChatGPTアカウントのOAuthトークンで認証する。ラッパー4本を仕込んで",[128,195,196],{},"claudex","と打てば起動する状態まで持っていき、ツール呼び出しの往復までプロキシログで裏取りした。",[15,199,200],{},[52,201,54],{},[56,203,204,207],{},[59,205,206],{},"CLIProxyAPI導入からOAuthログイン、ラッパー4本の設置まで一気通貫でセットアップ",[59,208,209],{},"本番相当のツール呼び出し(Read/Bash)がプロキシ経由で正しく翻訳されることをログで確認",[15,211,212,214],{},[52,213,72],{}," 非公開のため記事リンクなし(内部作業記録)",[80,216],{},[36,218,220],{"id":219},"_6-gpt-56-solのコンテキストウィンドウが20万トークンに見える謎を追う","6. GPT-5.6 Solのコンテキストウィンドウが20万トークンに見える謎を追う",[15,222,223,224,227],{},"claudexで作業していたセッションが100%表示になった。GPT-5.6 Solの公称は105万トークンのはずなのに、",[128,225,226],{},"/context all","は219.7k/200k(110%)と出している。同じモデルなのに、見ている数字が違う。",[15,229,230,231,234],{},"Claude Codeの",[128,232,233],{},"/context","はハーネス側が管理する帳簿上の上限を映しており、それが今回は200kとして扱われていた。API応答のusageを直接確認すると、実際には21万トークン超の入力が通っていて、モデル自身はそれを受理していた。ハーネスが認識する上限と、モデル本体が実際に受け付ける上限は別物だと、数字を並べて初めて言い切れる状態になった。",[15,236,237],{},[52,238,54],{},[56,240,241,246],{},[59,242,243,245],{},[128,244,226],{},"の表示(219.7k/200k)とAPI応答usage(211,197トークン)を突き合わせ、ハーネス側の帳簿値と実際の受理量が別物であることを確認",[59,247,248,249,252],{},"20万超えでも自動コンパクションが発動しない挙動を確認し、手動",[128,250,251],{},"/compact","の必要性を整理",[15,254,255,73,257],{},[52,256,72],{},[75,258,260],{"href":259},"/claude-code-gpt-56-sol-context-window","GPT-5.6 Solは105万トークンなのに、Claude Codeでは20万と表示された — /context 110%の正体",[80,262],{},[22,264,265],{"id":265},"今日の試行錯誤",[267,268,269,291],"table",{},[270,271,272],"thead",{},[273,274,275,279,282,285,288],"tr",{},[276,277,278],"th",{},"#",[276,280,281],{},"テーマ",[276,283,284],{},"試したこと",[276,286,287],{},"結果",[276,289,290],{},"気づき",[292,293,294,312,329,346,363],"tbody",{},[273,295,296,300,303,306,309],{},[297,298,299],"td",{},"1",[297,301,302],{},"デプロイ",[297,304,305],{},"wranglerでビルド済みdistを投入",[297,307,308],{},"認証切れでexit 1",[297,310,311],{},"ビルドが無事なら再ビルドせず再ログインだけで復旧できる",[273,313,314,317,320,323,326],{},[297,315,316],{},"2",[297,318,319],{},"UX移植",[297,321,322],{},"セッション途中でサーバーエラーに遭遇",[297,324,325],{},"引き継ぎプロンプトで別セッションへ継続",[297,327,328],{},"パスを実在確認した引き継ぎなら、続きはそのまま拾える",[273,330,331,334,337,340,343],{},[297,332,333],{},"3",[297,335,336],{},"UX移植先の探索",[297,338,339],{},"記憶を頼りに該当ファイルを探す",[297,341,342],{},"場所を思い出せず",[297,344,345],{},"サブエージェント10体の並列探索で完全一致3系統を再発見",[273,347,348,351,354,357,360],{},[297,349,350],{},"4",[297,352,353],{},"アセットSSD移設",[297,355,356],{},"生成スクリプトの保存先ごとF:ドライブへ寄せる",[297,358,359],{},"バッチ実行がSSD接続前提になってしまった",[297,361,362],{},"実装とバックアップ置き場は、意識して分けないと混ざる",[273,364,365,368,371,376,379],{},[297,366,367],{},"5",[297,369,370],{},"コンテキスト調査",[297,372,373,375],{},[128,374,226],{},"の分母とAPI usageを突き合わせる",[297,377,378],{},"200kはハーネス側の帳簿値、モデル公称は105万と判明",[297,380,381],{},"ハーネスの上限認識とモデル本体の上限は別物",[80,383],{},[22,385,386],{"id":386},"今日の学び",[56,388,389,392,395,398,401],{},[59,390,391],{},"記憶の定着は、思い出す機会の量で決まる。反復そのものではなく、想起の回数が効く",[59,393,394],{},"一度作った履歴システムは、別領域(単語アプリ)にもそのまま転用できる。作るときの汎用性が後で効いてくる",[59,396,397],{},"デプロイが落ちたら、ビルド成否と投入成否を切り分けて考える。ビルドさえ無事なら復旧は軽い",[59,399,400],{},"良いUXパターンを覚えていても、ファイルの場所までは記憶に残らない。サブエージェント並列探索は記憶の裏取りとして機能する",[59,402,403],{},"ハーネスが認識するコンテキスト上限と、接続先モデルが実際に受け付ける上限は別物。第三者モデルをハーネス経由で使うときは、この2つを分けて確認する",[80,405],{},[22,407,408],{"id":408},"明日やること",[56,410,413],{"className":411},[412],"contains-task-list",[59,414,417,422],{"className":415},[416],"task-list-item",[418,419],"input",{"disabled":420,"type":421},true,"checkbox"," eurekapu-nuxt4の英単語トレーナー、ストリーム型UX移植後のコミット・デプロイ",[80,424],{},[22,426,427],{"id":427},"関連記事",[56,429,430,434,438,442],{},[59,431,432],{},[75,433,78],{"href":77},[59,435,436],{},[75,437,117],{"href":116},[59,439,440],{},[75,441,158],{"href":157},[59,443,444],{},[75,445,260],{"href":259},{"title":447,"searchDepth":448,"depth":448,"links":449},"",2,[450,451,460,461,462,463],{"id":24,"depth":448,"text":24},{"id":34,"depth":448,"text":34,"children":452},[453,455,456,457,458,459],{"id":38,"depth":454,"text":39},3,{"id":84,"depth":454,"text":85},{"id":122,"depth":454,"text":123},{"id":163,"depth":454,"text":164},{"id":189,"depth":454,"text":190},{"id":219,"depth":454,"text":220},{"id":265,"depth":448,"text":265},{"id":386,"depth":448,"text":386},{"id":408,"depth":448,"text":408},{"id":427,"depth":448,"text":427},"diary",null,"英単語アプリに想起練習ベースのトレーナーを実装しストリーム型UXへ移植した一日。デプロイの認証切れ復旧、338MBのアセットをR2配信に寄せ切る作業、GPT-5.6 Solのコンテキスト上限がハーネス側で20万トークンに縮む謎解きまでを記録する。","md",{},"/2026-07-20-diary","daily-log",false,"2026-07-20T00:00:00.000Z",{"title":5,"description":466},"2026-07/2026-07-20/diary-2026-07-20",[476,477,478,479,480],"日記","eurekapu-nuxt4","Claude Code","GPT-5.6 Sol","英単語学習","Lw7xqOsmOFY8e29uwaip6wk12G7xnpiD-TgH-gZ9evU",[],[484,488,492,496,497],{"title":485,"path":486,"publishedAt":487},"2026年5月15日の開発日記 - 都道府県クイズ12ページ完成・地図クイズ4種・eurekapu 77ページ2カラム化・yomitoku 0.13.0 まで","/2026-05-15-diary","2026-05-15T00:00:00.000Z",{"title":489,"path":490,"publishedAt":491},"2026年5月14日の開発日記 - 投資判断クイズPart 2が74問+SVG18枚で完成、2カラム移行も着手","/2026-05-14-diary","2026-05-14T00:00:00.000Z",{"title":493,"path":494,"publishedAt":495},"2026年7月21日の開発日記 - 会計アプリの誕生と、サブエージェントが吐いた一つの嘘","/2026-07-21-diary","2026-07-21T00:00:00.000Z",{"title":260,"path":259,"publishedAt":472},{"title":498,"path":499,"publishedAt":500},"2026年7月14日の開発日記 - MCPハンズオン講座の実装とAIベンダー戦略記事5本","/2026-07-14-diary","2026-07-14T00:00:00.000Z","https://log.eurekapu.com/og/blog/2026-07-20-diary.png?v=2026-07-20T00%3A00%3A00.000Z&title=2026%E5%B9%B47%E6%9C%8820%E6%97%A5%E3%81%AE%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98%20-%20%E6%83%B3%E8%B5%B7%E3%81%A7%E5%8D%98%E8%AA%9E%E3%82%92%E6%80%9D%E3%81%84%E5%87%BA%E3%81%99%E4%BB%95%E7%B5%84%E3%81%BF%E3%81%A8%E3%80%81GPT-5.6%20Sol%E3%81%AE20%E4%B8%87%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E5%A3%81&author=Kei%20Komatsu&sig=6f8dea74b323c3de",1784705306445]