[{"data":1,"prerenderedAt":431},["ShallowReactive",2],{"content-/2026-07-13-diary":3,"all-pages-for-dir":429,"og-image-/2026-07-13-diary":430},{"id":4,"title":5,"body":6,"category":411,"concepts":412,"description":413,"extension":414,"meta":415,"navigation":416,"ogImage":412,"path":417,"project_name":418,"published":419,"publishedAt":420,"seo":421,"stem":422,"tags":423,"todo":412,"unpublished":419,"updatedAt":412,"__hash__":428},"pages/2026-07/2026-07-13/diary-2026-07-13.md","2026年7月13日の開発日記 - 行きたい国リストの費用シミュレーションとテスト34件の切り分け",{"type":7,"value":8,"toc":396},"minimark",[9,14,18,22,29,32,37,40,46,59,70,73,77,80,84,95,103,105,109,112,116,127,135,137,141,144,148,156,164,166,169,351,353,356,373,375,378],[10,11,13],"h1",{"id":12},"_2026年7月13日の開発日記","2026年7月13日の開発日記",[15,16,17],"p",{},"台湾旅行から戻って最初の月曜日。朝は5日分溜まった統計チェーンの再開と講座サイトのモバイル修正から入り、昼は家族の「行きたい国リスト」を費用シミュレーションまで一気に組み上げた。合間にブログトップへ草を生やし、溜まっていたテスト失敗34件も1件ずつ切り分けて畳んだ。",[19,20,21],"h2",{"id":21},"今日のタイムライン",[15,23,24],{},[25,26],"img",{"alt":27,"src":28},"タイムライン","/2026-07/2026-07-13/timeline-2026-07-13.png",[19,30,31],{"id":31},"今日やったこと",[33,34,36],"h3",{"id":35},"_1-家族旅行の行きたい国リストと費用シミュレーションfamily-trips","1. 家族旅行の行きたい国リストと費用シミュレーション（family-trips）",[15,38,39],{},"ピラミッド・パルテノン神殿・イースター島などの行きたい場所12ヶ所を、カード一覧＋各目的地の「2泊3日・絶対見どころ」詳細ページとしてSonnet 5の12並列ワークフローで生成させた。全カードに1人あたり予算を入れ、家族5人で全部回ったらいくらかかるかのシミュレーションページも新設。航空券が費用の8割前後を占めると分かり、南極はコスパが合わないと判断してシミュレーションから除外した。",[15,41,42],{},[43,44,45],"strong",{},"主な成果:",[47,48,49,53,56],"ul",{},[50,51,52],"li",{},"一覧＋詳細12ページ＋シミュレーションページ（Astro、ビルド42ページ成功）",[50,54,55],{},"5人家族・12ヶ所・2泊3日で総額約2,373万円（年1回ペースで2038年完了）という試算",[50,57,58],{},"費用内訳のセグメントバー可視化と、子どもの年齢基準の訪問順プランニング",[15,60,61,64,65],{},[43,62,63],{},"詳細:"," ",[66,67,69],"a",{"href":68},"/family-trip-wishlist-cost-simulation","家族5人で世界の行きたい場所を全部回るといくら？12並列ワークフローで費用シミュレーションを作った",[71,72],"hr",{},[33,74,76],{"id":75},"_2-講座ページのフッターナビ標準装備とモバイル修正eurekapu-nuxt4","2. 講座ページのフッターナビ標準装備とモバイル修正（eurekapu-nuxt4）",[15,78,79],{},"スマホで講座ページを読み終えると次へ進むボタンがなく行き止まりになる問題を発見。調査させるとSVG 105件が本番CDNに未アップロードだったことも発覚した。git worktreeで共通フッターナビコンポーネントを実装させ、レイアウト側が全コンテンツに自動描画する設計にした。スマホ幅のヘッダー崩れも修正。",[15,81,82],{},[43,83,45],{},[47,85,86,89,92],{},[50,87,88],{},"「前へ/次へ」フッターナビをレイアウト標準装備（ページ側の実装不要）",[50,90,91],{},"SVG 105件を本番CDNへ並列アップロードし全件再チェック",[50,93,94],{},"学習ゲート（/learn）全問合格でコミット",[15,96,97,64,99],{},[43,98,63],{},[66,100,102],{"href":101},"/lesson-footer-nav-and-mobile-fixes","講座ページに「前へ/次へ」フッターナビを標準装備 - スマホで行き止まりになる問題とSVG 105件の本番未アップロード修正",[71,104],{},[33,106,108],{"id":107},"_3-トップページの草ヒートマップとテスト34件の全パス化mdx-playground","3. トップページの草ヒートマップとテスト34件の全パス化（mdx-playground）",[15,110,111],{},"ブログトップの説明文を消して、GitHubのコントリビューショングラフ風の投稿ヒートマップ（直近1年・53週・公開記事1,474本）を実装させた。ユニットテストの失敗34件は「テストが古いのか、コードのバグなのか」を1件ずつ切り分けて全修正。KRW銘柄に$Bラベルが付く問題だけはテストを直すのではなく生成パイプラインの根本修正に回し、テスト3層で恒久担保した。",[15,113,114],{},[43,115,45],{},[47,117,118,121,124],{},[50,119,120],{},"GitHub草風ヒートマップの実装（ユニットテスト・描画確認込み）",[50,122,123],{},"146ファイル・18,440件のテスト全パス → KRW修正後は18,506件パス",[50,125,126],{},"KRW単位対応を生成スクリプトにも横展開して再発防止",[15,128,129,64,131],{},[43,130,63],{},[66,132,134],{"href":133},"/contribution-heatmap-and-krw-label-fix","トップページにGitHub草風ヒートマップを実装、テスト18,440件全パス化とKRW単位ラベルの根本修正",[71,136],{},[33,138,140],{"id":139},"_4-memory-makersのnewバッジと5日ぶりの統計チェーン再開financial-data","4. memory-makersのNEWバッジと5日ぶりの統計チェーン再開（financial-data）",[15,142,143],{},"台湾旅行で5日空いた毎朝チェーンを再開し、7/8分の日記4本と統計チェーン全部（39銘柄の決算スナップショット・台湾ODM月次売上6月分14銘柄・台湾総輸出6月分）を回して76ファイルをコミット。月次統計ページで「どの銘柄が更新されたか探すのが面倒、でもずっと強調表示されるのも邪魔」という要望から、データ鮮度で自動点灯・自動消灯するNEWバッジを実装させた。",[15,145,146],{},[43,147,45],{},[47,149,150,153],{},[50,151,152],{},"dataUpdatedAtによるNEWバッジの自動減衰ロジック（カバレッジ100%）",[50,154,155],{},"「減少傾向の銘柄はなかったよね？」という自分の記憶を、実データの全35銘柄スキャンで検証（前年割れの例外2銘柄を発見）",[15,157,158,64,160],{},[43,159,63],{},[66,161,163],{"href":162},"/memory-makers-new-badge","月次統計カードにNEWバッジを実装 - データ鮮度で自動点灯・自動消灯させる",[71,165],{},[19,167,168],{"id":168},"今日の試行錯誤",[170,171,172,194],"table",{},[173,174,175],"thead",{},[176,177,178,182,185,188,191],"tr",{},[179,180,181],"th",{},"#",[179,183,184],{},"テーマ",[179,186,187],{},"試したこと",[179,189,190],{},"結果",[179,192,193],{},"気づき",[195,196,197,215,232,249,266,283,300,317,334],"tbody",{},[176,198,199,203,206,209,212],{},[200,201,202],"td",{},"1",[200,204,205],{},"講座カード画像の表示切れ",[200,207,208],{},"SVGファイル・本番CDNを順に切り分け",[200,210,211],{},"SVG 105件が本番未アップロードと判明",[200,213,214],{},"「表示が変」の原因はコードより先に配信物の有無を疑う",[176,216,217,220,223,226,229],{},[200,218,219],{},"2",[200,221,222],{},"SVG 105件のアップロード",[200,224,225],{},"wrangler実行 → 未ログイン → 認証後1件成功 → 104件並列",[200,227,228],{},"成功",[200,230,231],{},"1件で成功を確認してから並列に広げると事故らない",[176,233,234,237,240,243,246],{},[200,235,236],{},"3",[200,238,239],{},"「表示が変わっちゃった」",[200,241,242],{},"未コミット差分と開いているタブを確認",[200,244,245],{},"朝入れた未コミットのMillerViewer.vue変更が原因",[200,247,248],{},"覚えのない表示変化は未コミット差分から辿る",[176,250,251,254,257,260,263],{},[200,252,253],{},"4",[200,255,256],{},"テスト失敗34件",[200,258,259],{},"全失敗をファイルに落としてクラスタごとに原因特定",[200,261,262],{},"テスト側が古いもの（triple-beat 18件ほか）とページ・データ側の不備（OGタグ5ページ・KRWラベル）に判定し分けた",[200,264,265],{},"「テストを直すか、コードを直すか」の切り分けが本体",[176,267,268,271,274,277,280],{},[200,269,270],{},"5",[200,272,273],{},"KRW銘柄の$Bラベル",[200,275,276],{},"テスト側でなく生成パイプラインを修正しテスト3層で担保",[200,278,279],{},"18,506件全パス",[200,281,282],{},"データのバグはテストをねじ曲げずに根本から直す",[176,284,285,288,291,294,297],{},[200,286,287],{},"6",[200,289,290],{},"台湾輸出2025年6月の値",[200,292,293],{},"「記録値が誤りでは」と疑い周辺月も検証",[200,295,296],{},"既存データが正しく自分の勘違い",[200,298,299],{},"疑ったら手を入れる前に前後月まで突き合わせる",[176,301,302,305,308,311,314],{},[200,303,304],{},"7",[200,306,307],{},"見出しの##表示",[200,309,310],{},"バグと誤診しかけてDOMを直接確認",[200,312,313],{},"意図的な装飾（heading-hash）と判明 → ルール化",[200,315,316],{},"スクリーンショットでなくDOMで判定する",[176,318,319,322,325,328,331],{},[200,320,321],{},"8",[200,323,324],{},"レビュー用画面サイズ",[200,326,327],{},"デバイスエミュレーション解除を忘れて表示が固定",[200,329,330],{},"指摘を受けて解除",[200,332,333],{},"検証用のエミュレーションは使い終わったら即戻す",[176,335,336,339,342,345,348],{},[200,337,338],{},"9",[200,340,341],{},"学習ゲートのクイズ",[200,343,344],{},"回答待ちで30分無応答タイムアウト×2",[200,346,347],{},"約1時間ブロック後に再開してコミット完了",[200,349,350],{},"クイズはブラウザが開いたタイミングで答え切る",[71,352],{},[19,354,355],{"id":355},"今日の学び",[47,357,358,361,364,367,370],{},[50,359,360],{},"旅行費用は航空券が8割前後を占める。宿や食費をいくら削っても総額はほぼ動かない",[50,362,363],{},"「全部行ったら2,373万円」のような大きな意思決定は、金額そのものより「いつ・誰と行けるか」（子どもの年齢）が順番を決める",[50,365,366],{},"共通UIはページ側でなくレイアウト側に持たせると、実装漏れという問題自体が消える",[50,368,369],{},"テスト失敗の一括修正は「テストが古い」と「コードのバグ」の切り分けがすべて。バグをテスト側の修正で覆い隠さない",[50,371,372],{},"自分の記憶（「減少傾向はなかったはず」）は実データのスキャンで検証する。例外は機械が見つけてくれる",[71,374],{},[19,376,377],{"id":377},"関連記事",[47,379,380,384,388,392],{},[50,381,382],{},[66,383,69],{"href":68},[50,385,386],{},[66,387,102],{"href":101},[50,389,390],{},[66,391,134],{"href":133},[50,393,394],{},[66,395,163],{"href":162},{"title":397,"searchDepth":398,"depth":398,"links":399},"",2,[400,401,408,409,410],{"id":21,"depth":398,"text":21},{"id":31,"depth":398,"text":31,"children":402},[403,405,406,407],{"id":35,"depth":404,"text":36},3,{"id":75,"depth":404,"text":76},{"id":107,"depth":404,"text":108},{"id":139,"depth":404,"text":140},{"id":168,"depth":398,"text":168},{"id":355,"depth":398,"text":355},{"id":377,"depth":398,"text":377},"diary",null,"家族5人で世界の行きたい場所12ヶ所を回る費用シミュレーションを構築し、講座ページにフッターナビを標準装備。ブログトップにGitHub草風ヒートマップを実装し、テスト失敗34件を1件ずつ切り分けて全パスにした1日。","md",{},true,"/2026-07-13-diary","daily-log",false,"2026-07-13T00:00:00.000Z",{"title":5,"description":413},"2026-07/2026-07-13/diary-2026-07-13",[424,425,426,427],"日記","家族旅行","テスト","データ可視化","y7t3RyUL9kgO2Z9CelSsGqeQlcQtN68Q6jD8BeoQTME",[],"https://log.eurekapu.com/og/blog/2026-07-13-diary.png?v=2026-07-13T00%3A00%3A00.000Z&title=2026%E5%B9%B47%E6%9C%8813%E6%97%A5%E3%81%AE%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98%20-%20%E8%A1%8C%E3%81%8D%E3%81%9F%E3%81%84%E5%9B%BD%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E8%B2%BB%E7%94%A8%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E3%83%86%E3%82%B9%E3%83%8834%E4%BB%B6%E3%81%AE%E5%88%87%E3%82%8A%E5%88%86%E3%81%91&author=Kei%20Komatsu&sig=e0d108ef3f8768a8",1784001814834]