[{"data":1,"prerenderedAt":599},["ShallowReactive",2],{"content-/2026-07-22-diary":3,"all-pages-for-dir":576,"related-/2026-07-22-diary":577,"og-image-/2026-07-22-diary":598},{"id":4,"title":5,"body":6,"category":557,"concepts":558,"description":559,"extension":560,"meta":561,"navigation":562,"ogImage":558,"path":563,"project_name":564,"published":565,"publishedAt":566,"seo":567,"stem":568,"tags":569,"todo":558,"unpublished":565,"updatedAt":558,"__hash__":575},"pages/2026-07/2026-07-22/diary-2026-07-22.md","2026年7月22日の開発日記 - Micronの格上げニュースと、語源単語コンテンツに眠っていた画像の使い回しバグ",{"type":7,"value":8,"toc":537},"minimark",[9,14,18,21,25,32,35,40,43,51,57,70,86,89,93,96,103,107,115,123,125,129,132,136,144,152,154,158,161,165,173,181,183,187,190,193,197,205,213,215,219,222,226,234,242,244,248,251,254,258,266,278,280,284,287,299,301,305,308,311,323,325,328,459,461,464,478,480,483],[10,11,13],"h1",{"id":12},"_2026年7月22日の開発日記","2026年7月22日の開発日記",[15,16,17],"p",{},"朝、Xで一枚のポストが目に留まった。「$MU added to BofA US-1 List」。Bank of Americaの最上位推奨リストにMicronが加わったという一報だ。調べてみようと軽く手を伸ばしたその一手が、夕方には決算ビート監視ページに新しい散布図を1枚生やすところまで転がっていった。",[15,19,20],{},"同じ日、別のタブでは語源英単語コンテンツのある1ページを開いていた。単語と例文と挿絵が並ぶ、いつもの見慣れた画面のはずだった。ところが見ているうちに、挿絵と例文の中身がどうにも噛み合っていないことに気づく。1ページの違和感のつもりが、4000語まるごとの検証に広がるとは、そのときはまだ思っていなかった。",[22,23,24],"h2",{"id":24},"今日のタイムライン",[15,26,27],{},[28,29],"img",{"alt":30,"src":31},"タイムライン","/2026-07/2026-07-22/timeline-2026-07-22.png",[22,33,34],{"id":34},"今日やったこと",[36,37,39],"h3",{"id":38},"_1-eurekapu-nuxt4-積み残し解消から語源単語コンテンツの画像レビューへ","1. eurekapu-nuxt4: 積み残し解消から、語源単語コンテンツの画像レビューへ",[15,41,42],{},"前日からの積み残しは3つだった。未pushの23コミット、lintの未解決issue、そして表示確認。順番に片付けようとpushを済ませ、lintの警告16件とエラー12件に取りかかると、NULL文字をプレースホルダー区切りに使っていた箇所で置換がBashの出力処理に食われて消える現象に当たった。直接置換用のNode.jsスクリプトを書かせて突破し、型チェック・テストまでgreenにしてからデプロイした。ところが「本当に確認したのか」と問われて初めて、確認したつもりで確認していなかったことに気づかされる一幕もあった。",[15,44,45,46,50],{},"語源英単語コンテンツのセクションに「五感で貫く英単語4000」「五感ファミリーで見る英単語4000」を組み込み、左側セクションのスクロールバーが選択中の項目に自動追従するよう直させたところまでは、いつもの改善作業だった。異変に気づいたのはその後だ。",[47,48,49],"code",{},"clud-clus-clos","のページで、単語の挿絵と例文の中身が対応していない。サブエージェントとWorkflowを使って4000語を全数レビューする体制を組むと、同じ画像が別の単語の例文に使い回されている系統的なバグが浮かび上がった。「先生が彼を許した」という例文の挿絵に、先生も彼もいない。乳鉢で何かをすりつぶす絵が、まったく無関係な単語に貼られている。3件ほど中身を見た時点でこれは個別修正で済む量ではないと判断し、198件を一括で作り直すフェーズに切り替えた。生成の進捗を追いながら夜まで粘ったが、ペースが落ちてきたところで続きは翌日に回すことにした。",[15,52,53],{},[54,55,56],"strong",{},"主な成果:",[58,59,60,64,67],"ul",{},[61,62,63],"li",{},"未push23コミットの反映、lint警告16件・エラー12件の解消、型チェック・テストgreen化",[61,65,66],{},"語源単語コンテンツのセクション統合とスクロールバー自動追従の実装",[61,68,69],{},"4000語レビューで画像使い回しバグを発見し、198件の作り直しフェーズへ移行",[15,71,72,75,76,81,82],{},[54,73,74],{},"詳細:"," ",[77,78,80],"a",{"href":79},"/eurekapu-nuxt4-maintenance-catchup","eurekapu-nuxt4の積み残し解消：lint・依存脆弱性ゼロ化から語源単語ページ再構成まで"," / ",[77,83,85],{"href":84},"/gogen-eitango-image-review","語源英単語4000語の画像ミスマッチをレビューした記録 — 重複バグの発見から作り直すフェーズへ",[87,88],"hr",{},[36,90,92],{"id":91},"_2-会計システムラボ-phase4のbsplからphase5の年度繰越まで","2. 会計システムラボ: Phase4のBS/PLからPhase5の年度繰越まで",[15,94,95],{},"個人開発の会計システムで、Phase4（財務諸表画面）を仕上げてからPhase5（月次推移表・部門別P/L・年度繰越）に進んだ。Phase5は実装に入る前にCodexへ計画書を5回投げ直した。1往復で通ると思っていたが、投げるたびに新しいレースコンディションやデータ整合性の穴が指摘され、潰しては投げ直す作業を5周繰り返してからようやく実装に着手した。",[15,97,98,99,102],{},"実装が終わった後は、コードレビュー専用のエージェントを3体並列で走らせて仕上げをチェックさせた。ここでTOCTOU（check-then-actの間に状態が変わる）対策の抜け漏れが1件見つかり、修正してからコミットした。学習ゲートは都度回し、理由が立つものだけ",[47,100,101],{},"LEARN_SKIP","で通した。",[15,104,105],{},[54,106,56],{},[58,108,109,112],{},[61,110,111],{},"Phase4（BS/PL画面）の実装完了、Phase5（月次推移表・部門別P/L・年度繰越）の計画をCodex5往復レビューで固めて実装",[61,113,114],{},"コードレビューエージェント3並列でTOCTOU対策の抜け漏れを発見・修正",[15,116,117,75,119],{},[54,118,74],{},[77,120,122],{"href":121},"/accounting-system-lab-phase4-5","会計システムのBS/PL実装から年度繰越まで、Codexレビューで固めたPhase4・Phase5開発",[87,124],{},[36,126,128],{"id":127},"_3-wordpress移行-本文幅と行間をブログ基準に揃え直す","3. WordPress移行: 本文幅と行間をブログ基準に揃え直す",[15,130,131],{},"移行済みのページを見比べると、本文幅がブログ本体の記事幅とズレていた。合わせて直すと、今度は行間とパラグラフ間の詰まりが目についた。原因は移行元のCSSが当たっていなかったことで、行間を本体側の基準に揃え直した。動画の1コマ目を静止画プレースホルダーとして使っていた古い実装や、ぼやけて見える画像の調整も片付けたが、「今開いてないですよね」とChrome DevToolsでの確認を問われる場面もあった。",[15,133,134],{},[54,135,56],{},[58,137,138,141],{},[61,139,140],{},"本文幅とブログ本体の行間・段落間隔を統一",[61,142,143],{},"動画プレースホルダー・ぼやけた画像の見た目を調整",[15,145,146,75,148],{},[54,147,74],{},[77,149,151],{"href":150},"/wordpress-migration-layout-fixes","WordPress移行記事の本文幅・行間をブログ基準に揃え直した一日",[87,153],{},[36,155,157],{"id":156},"_4-しまなみ海道サイクリングの旅行プランを地図とギャラリーで組む","4. しまなみ海道サイクリングの旅行プランを地図とギャラリーで組む",[15,159,160],{},"しまなみ海道サイクリングに行きたくなり、コースと費用感をディープリサーチさせて旅行プランのページにまとめさせた。地図に置いたマーカーが海の上に浮いて見える座標バグを見つけて直させ、名所の写真をギャラリー形式で追加、さらに32枚まで増やしてスライドショー化した。",[15,162,163],{},[54,164,56],{},[58,166,167,170],{},[61,168,169],{},"しまなみ海道サイクリングのコース・費用感を旅行プランページに整備",[61,171,172],{},"座標バグの修正、写真ギャラリー32枚のスライドショー化",[15,174,175,75,177],{},[54,176,74],{},[77,178,180],{"href":179},"/shimanami-kaido-cycling-trip-plan","しまなみ海道サイクリング旅行プランを地図とフォトギャラリーで作った記録",[87,182],{},[36,184,186],{"id":185},"_5-ワンワールド世界一周航空券のプラン8選とルール判定アプリ","5. ワンワールド世界一周航空券のプラン8選とルール判定アプリ",[15,188,189],{},"ワンワールドの世界一周航空券（oneworld Explorer）を使ったプレミアムフライトプランを、サブエージェント5人に競作させて評価する形で作らせた。最初のプランには予算が抜けていて入れ直させ、料金体系をエコノミーとビジネスで2倍しか変わらないと誤解したまま進めていたところを訂正しながら、コストバランスを考えた3案を作らせた。比較がわかりにくいという指摘を受けて、冒頭にモデルルート8選のテーブルを追加させてようやく形になった。",[15,191,192],{},"その後、区間数や条件の組み合わせによって成立する・しないが決まるこの航空券のルールを、入力フォームのバリデーションに例えて伝え、成立しない組み合わせを選べないようにするシミュレーターアプリを新規実装させた。ルールを解説する独立記事ページも合わせて作らせた。",[15,194,195],{},[54,196,56],{},[58,198,199,202],{},[61,200,201],{},"oneworld Explorerを使ったプレミアムフライトプラン8選をテーブル形式で整備",[61,203,204],{},"区間バリデーション付きのルール判定シミュレーターアプリと解説記事を実装",[15,206,207,75,209],{},[54,208,74],{},[77,210,212],{"href":211},"/oneworld-explorer-rtw-flight-planning","ワンワールド世界一周航空券(oneworld Explorer)の旅行プラン8選とルール判定アプリを作った記録",[87,214],{},[36,216,218],{"id":217},"_6-micron-bofa-us-1-list採用と決算ビート監視への散布図追加","6. Micron BofA US-1 List採用と、決算ビート監視への散布図追加",[15,220,221],{},"「$MU added to BofA US-1 List」というポストを追いかけると、公開情報から再構成できるUS-1 List銘柄は36銘柄あった。リストの並び順をティッカーのアルファベット順ではなく、決算ビート監視で使っているウォッチリストの並びに寄せて再構成させた。あわせて、決算ビート監視ページの散布図（フォワードPERとNTM EPS成長率のプロット）から、BofA US-1 Listの銘柄だけを抜き出した専用ページを新規に作らせた。",[15,223,224],{},[54,225,56],{},[58,227,228,231],{},[61,229,230],{},"BofA「US 1 List」36銘柄の記事化とウォッチリスト順への並び替え",[61,232,233],{},"決算ビート監視にUS-1 List銘柄限定の散布図ページを追加",[15,235,236,75,238],{},[54,237,74],{},[77,239,241],{"href":240},"/micron-mu-bofa-us1-list","Micron($MU)がBofAの『US 1 List』に採用 — 目標株価1,550ドルの中身",[87,243],{},[36,245,247],{"id":246},"_7-codexユーザー数急増の実態と世界のai利用者層","7. Codexユーザー数急増の実態と、世界のAI利用者層",[15,249,250],{},"Codexのユーザー数が9日で600万人から1000万人に急増したというグラフを見て、その正体を調べさせた。実態はCodex単体の急成長ではなく、7月9日に統合されたChatGPT Workとの合算値だったと分かった。",[15,252,253],{},"別の日に見かけた、世界のAI利用者を4層に分けたワッフルチャートも掘り下げた。最初に提示された図はマゼンタ（ビジネス課金層）の塗りが多すぎたため作り直させ、インターネット普及の歴史との比較や、生成AI登場後のバーチャート推移まで広げさせた。",[15,255,256],{},[54,257,56],{},[58,259,260,263],{},[61,261,262],{},"Codexユーザー数急増の実態がChatGPT Work統合の合算値だったと特定",[61,264,265],{},"世界のAI利用者4層ワッフルチャートの修正とインターネット普及率比較の追加",[15,267,268,75,270,81,274],{},[54,269,74],{},[77,271,273],{"href":272},"/codex-chatgpt-work-10m-users-analysis","Codexのユーザー数が9日で600万人から1000万人に急増した本当の理由",[77,275,277],{"href":276},"/global-ai-adoption-tiers","世界のAI利用者を4層に分けると、ビジネス活用層は上位0.5%だった",[87,279],{},[36,281,283],{"id":282},"_8-web技術構成2026とcloudflareインフラの整理","8. Web技術構成2026とCloudflareインフラの整理",[15,285,286],{},"個人的な技術選定メモをVue.jsベースに統一し、React系・Vue系フレームワークの使い分けやAstroとの境界線を整理した記事を書かせた。同じ日、Cloudflare PagesとWorkers Static Assetsの違い、エッジキャッシュが効く仕組みについても、自サイトの実際の設定を例に整理させた。",[15,288,289,75,291,81,295],{},[54,290,74],{},[77,292,294],{"href":293},"/web-tech-stack-2026","Webサービスの技術構成 2026年版 — Vue.js/Nuxt/Astroの使い分けとその理由",[77,296,298],{"href":297},"/cloudflare-pages-workers-static-assets","Cloudflare PagesとWorkers Static Assetsの違い、エッジキャッシュが効く仕組み",[87,300],{},[36,302,304],{"id":303},"_9-claude-code運用まわりの小さな気づき2件","9. Claude Code運用まわりの小さな気づき2件",[15,306,307],{},"スキルの使用回数はセッションログから数えられるのか、実際に検証させた。Skillツール呼び出し・スラッシュコマンド・サブエージェント内呼び出しという3つの記録経路があり、どれか1つだけを数えると実態を大きく取りこぼすことが分かった。",[15,309,310],{},"別の場面では、複数のニュースサイトをWebFetchで取得しようとしたら「Unable to verify if domain is safe to fetch」で全滅した。フォールバック先のr.jina.aiプロキシまで巻き添えになった理由を追うと、WebFetch自体の安全性チェックの仕組みに行き着いた。",[15,312,313,75,315,81,319],{},[54,314,74],{},[77,316,318],{"href":317},"/claude-code-skill-usage-count-from-transcript","Claude Codeのスキル使用回数はセッションログから数えられるのか調べた",[77,320,322],{"href":321},"/claude-code-webfetch-domain-safety-check-error","Claude CodeのWebFetchが『Unable to verify if domain is safe to fetch』で全滅した話",[87,324],{},[22,326,327],{"id":327},"今日の試行錯誤",[329,330,331,353],"table",{},[332,333,334],"thead",{},[335,336,337,341,344,347,350],"tr",{},[338,339,340],"th",{},"#",[338,342,343],{},"テーマ",[338,345,346],{},"試したこと",[338,348,349],{},"結果",[338,351,352],{},"気づき",[354,355,356,374,391,408,425,442],"tbody",{},[335,357,358,362,365,368,371],{},[359,360,361],"td",{},"1",[359,363,364],{},"lintのNULL文字置換",[359,366,367],{},"Bash経由で直接置換",[359,369,370],{},"NULLバイトが出力処理で失われて消える",[359,372,373],{},"直接置換用のNode.jsスクリプトに切り替えて解決",[335,375,376,379,382,385,388],{},[359,377,378],{},"2",[359,380,381],{},"語源単語4000語のレビュー設計",[359,383,384],{},"サブエージェント/Workflowへの入力データ設計を試行錯誤",[359,386,387],{},"マニフェスト渡し忘れ・巨大配列渡しで失敗",[359,389,390],{},"ローカルJSON読み込み方式に作り直して安定",[335,392,393,396,399,402,405],{},[359,394,395],{},"3",[359,397,398],{},"会計システムPhase5の計画",[359,400,401],{},"Codexへ計画レビューを依頼",[359,403,404],{},"1回で通らず、投げるたびに新しい指摘",[359,406,407],{},"5往復させることで、都度違うレースコンディションを潰せた",[335,409,410,413,416,419,422],{},[359,411,412],{},"4",[359,414,415],{},"WordPress移行の表示確認",[359,417,418],{},"確認したと報告",[359,420,421],{},"「今開いてないですよね」と問われ、未確認と発覚",[359,423,424],{},"Chrome DevToolsで実際に開くまでは確認済みとしない",[335,426,427,430,433,436,439],{},[359,428,429],{},"5",[359,431,432],{},"しまなみ海道の地図マーカー",[359,434,435],{},"座標をそのまま地図に配置",[359,437,438],{},"海の上に浮いて見えるバグ",[359,440,441],{},"Nominatimと突き合わせて4〜8kmのズレを特定・修正",[335,443,444,447,450,453,456],{},[359,445,446],{},"6",[359,448,449],{},"oneworld Explorerの料金比較",[359,451,452],{},"エコノミー/ビジネス2倍差という理解のまま進行",[359,454,455],{},"実際の料金体系と食い違っていた",[359,457,458],{},"ユーザーの訂正で気づき、比較のやり直しへ",[87,460],{},[22,462,463],{"id":463},"今日の学び",[58,465,466,469,472,475],{},[61,467,468],{},"「確認しました」と報告した瞬間が、実際に確認した瞬間とは限らない。ブラウザで開き直すまでは確認済みと言い切らない",[61,470,471],{},"サブエージェントに渡すデータの形式（マニフェストか、生の配列か、ファイル読み込みか）を最初に詰めておかないと、後から作り直す羽目になる",[61,473,474],{},"レビューコンテンツで数件チェックしただけで似た不具合が繰り返し出てきたら、残り全部を個別に見るより先に「同じ原因が系統的に起きていないか」を疑ったほうが早い",[61,476,477],{},"Codexへのレビュー依頼は1回で通らなくてもいい。投げるたびに違う角度の指摘が出るなら、その分だけ往復する価値がある",[87,479],{},[22,481,482],{"id":482},"関連記事",[58,484,485,489,493,497,501,505,509,513,517,521,525,529,533],{},[61,486,487],{},[77,488,80],{"href":79},[61,490,491],{},[77,492,85],{"href":84},[61,494,495],{},[77,496,122],{"href":121},[61,498,499],{},[77,500,151],{"href":150},[61,502,503],{},[77,504,180],{"href":179},[61,506,507],{},[77,508,212],{"href":211},[61,510,511],{},[77,512,241],{"href":240},[61,514,515],{},[77,516,273],{"href":272},[61,518,519],{},[77,520,277],{"href":276},[61,522,523],{},[77,524,294],{"href":293},[61,526,527],{},[77,528,298],{"href":297},[61,530,531],{},[77,532,318],{"href":317},[61,534,535],{},[77,536,322],{"href":321},{"title":538,"searchDepth":539,"depth":539,"links":540},"",2,[541,542,554,555,556],{"id":24,"depth":539,"text":24},{"id":34,"depth":539,"text":34,"children":543},[544,546,547,548,549,550,551,552,553],{"id":38,"depth":545,"text":39},3,{"id":91,"depth":545,"text":92},{"id":127,"depth":545,"text":128},{"id":156,"depth":545,"text":157},{"id":185,"depth":545,"text":186},{"id":217,"depth":545,"text":218},{"id":246,"depth":545,"text":247},{"id":282,"depth":545,"text":283},{"id":303,"depth":545,"text":304},{"id":327,"depth":539,"text":327},{"id":463,"depth":539,"text":463},{"id":482,"depth":539,"text":482},"diary",null,"5つのプロジェクトを一日で横断した記録。BofAの最上位リスト採用ニュースを追ったら決算ビート監視ページが1つ増え、語源英単語コンテンツの画像レビューでは同じ画像が複数の例文に使い回されている系統的なバグが見つかった。しまなみ海道の旅行プランと世界一周航空券のルールアプリも一日の中に収まった。","md",{},true,"/2026-07-22-diary","daily-log",false,"2026-07-22T00:00:00.000Z",{"title":5,"description":559},"2026-07/2026-07-22/diary-2026-07-22",[570,571,572,573,574],"日記","eurekapu-nuxt4","会計システム開発","旅行プラン","Micron","Tbpp4X9yxjdvH5evYF3CKK8ULgfreKore_Oohu9d5EA",[],[578,582,586,590,594],{"title":579,"path":580,"publishedAt":581},"2026年7月21日の開発日記 - 会計アプリの誕生と、サブエージェントが吐いた一つの嘘","/2026-07-21-diary","2026-07-21T00:00:00.000Z",{"title":583,"path":584,"publishedAt":585},"2026年7月20日の開発日記 - 想起で単語を思い出す仕組みと、GPT-5.6 Solの20万トークンの壁","/2026-07-20-diary","2026-07-20T00:00:00.000Z",{"title":587,"path":588,"publishedAt":589},"2026年6月27日の開発日記 - Micron 三本立て・ハイパースケーラー CapEx 6本柱・公認会計士の SNS 営業フック","/2026-06-27-diary","2026-06-27T00:00:00.000Z",{"title":591,"path":592,"publishedAt":593},"2026年6月26日の開発日記 - Micron Q4ガイダンス修正・beat-monitoring ハイパースケーラー枠・税務系実務書の一括 OCR & restructure","/2026-06-26-diary","2026-06-26T00:00:00.000Z",{"title":595,"path":596,"publishedAt":597},"2026年6月25日の開発日記 - Micron Q3決算で半導体メモリ各社のチャートを総ざらい","/2026-06-25-diary","2026-06-25T00:00:00.000Z","https://log.eurekapu.com/og/blog/2026-07-22-diary.png?v=2026-07-22T00%3A00%3A00.000Z&title=2026%E5%B9%B47%E6%9C%8822%E6%97%A5%E3%81%AE%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98%20-%20Micron%E3%81%AE%E6%A0%BC%E4%B8%8A%E3%81%92%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9%E3%81%A8%E3%80%81%E8%AA%9E%E6%BA%90%E5%8D%98%E8%AA%9E%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%81%AB%E7%9C%A0%E3%81%A3%E3%81%A6%E3%81%84%E3%81%9F%E7%94%BB%E5%83%8F%E3%81%AE%E4%BD%BF%E3%81%84%E5%9B%9E%E3%81%97%E3%83%90%E3%82%B0&author=Kei%20Komatsu&sig=e795ea6e821b5ea8",1784786444451]