[{"data":1,"prerenderedAt":745},["ShallowReactive",2],{"content-/2026-08-12-diary":3,"all-pages-for-dir":728,"related-/2026-08-12-diary":729,"og-image-/2026-08-12-diary":744},{"id":4,"title":5,"body":6,"category":709,"concepts":710,"description":711,"extension":712,"meta":713,"navigation":632,"ogImage":710,"path":714,"project_name":715,"published":716,"publishedAt":717,"seo":718,"source":719,"stem":720,"tags":721,"todo":710,"unpublished":716,"updatedAt":710,"__hash__":727},"pages/2026-08/2026-08-12/diary-2026-08-12.md","2026年8月12日の開発日記 - 隠したつもり、届いたつもり、揃ったつもりを1日で剥がした",{"type":7,"value":8,"toc":690},"minimark",[9,14,18,21,25,32,35,38,43,46,49,55,76,87,90,94,97,100,104,125,133,135,139,146,149,153,175,183,185,189,192,195,199,213,221,223,227,234,237,241,258,266,268,272,275,278,282,296,304,306,310,313,316,318,321,594,596,599,616,618,621,659,661,664],[10,11,13],"h1",{"id":12},"_2026年8月12日の開発日記","2026年8月12日の開発日記",[15,16,17],"p",{},"朝いちばんに前日の積み残しを並べさせたら、図解カタログの計画書が3本に分かれたまま残っていた。\nそこから夕方まで、報告と画面のずれを拾い続けることになる。",[15,19,20],{},"うまく回っているに違いない、と思っていた時間のほうが長い。\nテストは222ファイル19,681件が通り、通知のテスト送信は HTTP 200 を返し、非公開にした記事も一覧から消えていた。\nどれも、自分で開いて数えるまでは正しく見えた。",[22,23,24],"h2",{"id":24},"今日のタイムライン",[15,26,27],{},[28,29],"img",{"alt":30,"src":31},"タイムライン","/2026-08/2026-08-12/timeline-2026-08-12.png",[15,33,34],{},"mdx-playground が15時間28分で13セッション、eurekapu-nuxt4 が5時間12分で2セッション。\n家族旅行アーカイブに48分、支援先サイトに20分を使った。\n合わせて17セッションで、こちらの発言は160件だった。\nコミットは15本になった。",[22,36,37],{"id":37},"今日やったこと",[39,40,42],"h3",{"id":41},"_1-図解60型カタログのフレームを揃える","1. 図解60型カタログのフレームを揃える",[15,44,45],{},"27系と33系のツリーが隣り合っているのに、縦横比もフォントも揃っていない。\nその2つを同じキャンバスに乗せる作業を1日かけて回した。\nグリッドが見えてくると、今度は口で場所を指すのに困る。\n「ツリー図の上」「ページ番号の下」では毎回説明が要るので、領域そのものに名前を付けさせた。\n天マージン、地マージン、版面、上の谷、下の谷、出典行、注記行。",[15,47,48],{},"夕方、カテゴリAの11型を仕上げたという報告を受けて詳細ページを開いたら、頼んでいない変更が成果として並んでいた。",[15,50,51],{},[52,53,54],"strong",{},"主な成果:",[56,57,58,62,70,73],"ul",{},[59,60,61],"li",{},"幅1024、四辺の余白24、gutter 20、カラム幅63で確定した。16:9と4:3を1か所で切り替えられる形にさせた",[59,63,64,65,69],{},"領域名を ",[66,67,68],"code",{},".claude/references/slide-zone-names.md"," に置き、グリッド表示のときにスライド上へ13個のラベルを出させた",[59,71,72],{},"フレームの持ち方をA案、B案、C案の3つでworktreeに並行実装させ、B案推奨まで出した。master には入れていない",[59,74,75],{},"カテゴリA（階層・構造）の11型を同じキャンバスへ展開した。半端な座標は入れ子6件と33系トライアングル3件を整数に直した",[15,77,78,81,82],{},[52,79,80],{},"詳細:"," ",[83,84,86],"a",{"href":85},"/diagram-catalog-frame-grid","図解60型カタログのフレームを統一する。スライドの領域を命名して意味グリッドで揃えた1日",[88,89],"hr",{},[39,91,93],{"id":92},"_2-会員登録のline通知と管理者権限の置き場所","2. 会員登録のLINE通知と、管理者権限の置き場所",[15,95,96],{},"万が一、会員登録が入ったら自分に通知が飛ぶようにしたい。\n朝に出した要望はそれだけだった。\n登録の入口はメールとGoogleの2つあるが、どちらも better-auth の同じフックを踏むので、置き場所は1箇所で足りる。\n送り先は、手元まで通知が来るLINEにした。",[15,98,99],{},"その日のうちに、自分の管理画面に自分が入れない理由を追いかけていた。",[15,101,102],{},[52,103,54],{},[56,105,106,109,116,119,122],{},[59,107,108],{},"通知の実装から本番デプロイまで通した。退会機能も、同じメールアドレスで再入会できるところまで確かめた",[59,110,111,112,115],{},"管理者を ",[66,113,114],{},"admin_email"," テーブルへ移し、環境変数1本にぶら下がる状態をやめた",[59,117,118],{},"デプロイスクリプトの前段に整合性チェックを入れさせた。管理者の人数が出ないと先へ進まない",[59,120,121],{},"計画を2回、書いたコードを1回 Codex に読ませた。退会の判断根拠は、法令ではなく「同じメールアドレスで再入会できること」に落ち着いた",[59,123,124],{},"テストは3,170件になった",[15,126,127,81,129],{},[52,128,80],{},[83,130,132],{"href":131},"/member-signup-notification-admin-guard","会員登録のLINE通知を実装したら、管理者権限が3ヶ月前から消えていた",[88,134],{},[39,136,138],{"id":137},"_3-非公開フラグと公開sqlダンプに残っていた本文","3. 非公開フラグと、公開SQLダンプに残っていた本文",[15,140,141,142,145],{},"保有銘柄のデイリーニュースを非公開にしようとして、frontmatter に ",[66,143,144],{},"unpublished: true"," を足した。\n設定ファイルにそう書いてあり、既存193本が同じ方式で動いている。\n前提が正しければ、判断としては筋が通っていた。",[15,147,148],{},"念のため本番の配信物を直接叩いたら、本文がそのまま返ってきた。\n消えていたのは導線だけだった。",[15,150,151],{},[52,152,54],{},[56,154,155,158,165,172],{},[59,156,157],{},"デイリーニュース4本を、本番除外の対象になっているローカル専用ツリーへ物理的に移させた",[59,159,160,161,164],{},"本番ビルドのときだけ非公開記事のパスを列挙し、コレクションの ",[66,162,163],{},"source.exclude"," へ流し込む形にさせた。列挙されたのは169件",[59,166,167,168,171],{},"検証スクリプトに、ダンプを復号して本文の残存を検査する処理を足させた。対策前の ",[66,169,170],{},"dist"," に当てると197件を検出して落ちる",[59,173,174],{},"Codex のレビューで、実測の読み違いが8件のうちの1件として返ってきた。設計に使う前に潰せた",[15,176,177,81,179],{},[52,178,80],{},[83,180,182],{"href":181},"/unpublished-content-isolation","非公開フラグでは記事を隠せていなかった：Nuxt Contentの公開SQLダンプに本文が残る",[88,184],{},[39,186,188],{"id":187},"_4-pvが測れていないサイトにga4を入れる","4. PVが測れていないサイトにGA4を入れる",[15,190,191],{},"そういえばこのブログ、PVという概念がない。\n月にどれくらい読まれているのか、自分で答えられない。\nタグを貼る対象を確定させるつもりで現状を洗わせたら、そこで手が止まった。\n保有ドメインは6件、稼働しているホストは26件あった。\nうち3ドメインは、自分の口から名前が出てこなかった。",[15,193,194],{},"途中で「5年間データが入っていない」という報告が上がってきた。\n根拠を聞くと「過去48時間に受信データなし」の表示だけだった。\n過去12か月で見せたら、アクティブユーザーは3.7万いた。\n計測が止まったのは2026年6月7日で、原因はサイト移行のときにタグを引き継がなかったことだった。",[15,196,197],{},[52,198,54],{},[56,200,201,204,207,210],{},[59,202,203],{},"26ホストのHTMLを1件ずつ取得して計測タグを検出させた。穴はいちばん見たい本体サイトとこのブログの2つだった",[59,205,206],{},"ドメイン、ローカルリポジトリ、Cloudflareの配信先、GA4、Search Consoleの5列で対応表を作らせた。リポジトリ特定の最短経路はDNSのCNAMEだった",[59,208,209],{},"本体サイトは、本番ビルドのときだけタグが入る形で実装させた。生成物241ページすべてに出ることを確認してからデプロイした",[59,211,212],{},"送信は通っているのにGAが記録しない件は、切り分け途中のまま翌日へ持ち越した",[15,214,215,81,217],{},[52,216,80],{},[83,218,220],{"href":219},"/ga4-analytics-inventory","PVが測れていないサイトにGA4を入れ、ドメイン別の計測対応表を作った",[88,222],{},[39,224,226],{"id":225},"_5-台湾の後工程テスト4社の月次まとめを自動化する","5. 台湾の後工程テスト4社の月次まとめを自動化する",[15,228,229,230,233],{},"外部のブログで、台湾のテスト会社の月次売上をまとめた記事を見かけた。\n毎朝の ",[66,231,232],{},"/make-diary"," チェーンには台湾の月次売上を取り込むステップがすでにあるので、そこから続けて記事まで作れるはずだった。\n突き合わせさせたら、手元の数字は外部記事とそのまま一致した。",[15,235,236],{},"材料が揃っていたぶん、この日つまずいたのは、どれも見せ方の話だった。\n売上高を並べるだけでは「今月も過去最高」で終わる。\n前月差と、その差がさらに増えたかどうかを主役にした。",[15,238,239],{},[52,240,54],{},[56,242,243,246,249,252],{},[59,244,245],{},"ASE、Powertech、KYEC、Ardentec の4社を1本にまとめ、1社につき水準、前月差、勢いの3段チャートにした",[59,247,248],{},"生成スクリプト405行とテスト123行を先に書かせた。テストは見た目ではなく数字の意味を守る位置に置いた",[59,250,251],{},"4社を1枚に並べた俯瞰図は削除した。同じ内容が各社のモニタリングページに31ヶ月ぶんあった",[59,253,254,257],{},[66,255,256],{},"/tw-test-monthly-report"," として切り出した。4社の最新月がそろわない日と、その月の記事が既にある日は、最初のステップで止まる",[15,259,260,81,262],{},[52,261,80],{},[83,263,265],{"href":264},"/taiwan-osat-monthly-automation","台湾の後工程テスト4社の月次売上まとめを、毎朝のコマンドチェーンから自動生成する",[88,267],{},[39,269,271],{"id":270},"_6-疑問が湧いた順に5本","6. 疑問が湧いた順に5本",[15,273,274],{},"朝の6時すぎ、GitHub のリポジトリを1本貼って「これ、内部APIを触ってるんですかね」と聞いた。\nそこから日が暮れるまで、疑問が浮かぶたびに投げては記事か教材に変えていった。\n数えると5つ。\n技術記事が3本、教材ページが1本、それと子どもに送る文章が1つだった。",[15,276,277],{},"段取りよく進んだ日だと思っていた。\nただ最後の1本で、比較してほしかったのはそこじゃない、と言い直すことになる。",[15,279,280],{},[52,281,54],{},[56,283,284,287,290,293],{},[59,285,286],{},"After Effects の拡張が3層でできていることを実装から確かめさせて記事にした。内部APIを叩いているという当初の見立ては外れていた",[59,288,289],{},"公開鍵暗号とデジタル署名の教材ページを作らせた。図解6点、動かせるシミュレータ5つ、テスト30件",[59,291,292],{},"前日公開の3本を Codex にレビューさせ、「循環取引」という断定を撤回した。主語が入れ替わっていた2箇所も是正させた",[59,294,295],{},"子ども向けの文章は、整えさせた版を読んでから自分で書き直した。数字の食い違いだけは自分以外の目のほうが早かった",[15,297,298,81,300],{},[52,299,80],{},[83,301,303],{"href":302},"/five-articles-in-a-day","疑問が湧いた順に5本書いた1日：After Effects の拡張構造から VRAM の壁まで",[88,305],{},[39,307,309],{"id":308},"_7-家族旅行の予定と支援先サイトの検索順位","7. 家族旅行の予定と、支援先サイトの検索順位",[15,311,312],{},"家族旅行アーカイブでは、登録してある旅行の予定とカレンダーの内容が食い違っていないかを全件突き合わせさせた。\n必要な予約情報はカレンダー側にも書き込ませて、どちらを開いても同じことが分かる状態にした。",[15,314,315],{},"支援先サイトのアクセス解析では、検索順位を確認するフローを頭から終わりまで一度回した。",[88,317],{},[22,319,320],{"id":320},"今日の試行錯誤",[322,323,324,346],"table",{},[325,326,327],"thead",{},[328,329,330,334,337,340,343],"tr",{},[331,332,333],"th",{},"#",[331,335,336],{},"テーマ",[331,338,339],{},"試したこと",[331,341,342],{},"結果",[331,344,345],{},"気づき",[347,348,349,371,388,405,428,445,473,496,515,540,560,577],"tbody",{},[328,350,351,355,358,365,368],{},[352,353,354],"td",{},"1",[352,356,357],{},"図解の書体統一",[352,359,360,361,364],{},"27系の ",[66,362,363],{},"font-family"," だけ揃えさせた",[352,366,367],{},"座標が全部引き直されて返ってきた",[352,369,370],{},"原典のカードは幅140で、7〜12pxの極小フォント前提に組まれている。33系のサイズを入れると1語で152px要るので、確かに位置は動く。ただし頼んだのは書体だけなので、16行の差分に収めさせた",[328,372,373,376,379,382,385],{},[352,374,375],{},"2",[352,377,378],{},"意味グリッド",[352,380,381],{},"新しい座標に合わせてグリッドを引かせた",[352,383,384],{},"差し戻し",[352,386,387],{},"座標に合わせて引いた線はグリッドではない。ツリーの意味モデルを先に決めさせ、そこから座標を導出し直させた",[328,389,390,393,396,399,402],{},[352,391,392],{},"3",[352,394,395],{},"カテゴリA 11型の仕上げ",[352,397,398],{},"テスト19,681件が通ったという報告のあと、自分で詳細ページを開いた",[352,400,401],{},"撤回",[352,403,404],{},"「27系のピラミッドの最小フォントを1.5倍」と言ったのを27系全体に広げられ、ツリーの左端が148.5 / 397.5 / 480.5 / 729.5 と半端になっていた。原典と1バイト差なしに書き戻させた",[328,406,407,410,413,419,425],{},[352,408,409],{},"4",[352,411,412],{},"dev サーバー",[352,414,415,418],{},[66,416,417],{},"/procs"," で掃除したあとポート3000を叩いた",[352,420,421,422],{},"20秒待っても ",[66,423,424],{},"status=000",[352,426,427],{},"プロセスは生きているのに、8秒間CPU時間が動かない（101→101）。無限ループではなくイベントループの停止だった。犯人は直前の掃除で、巨大なプロセスを止めると子プロセスも道連れになる。殻だけが listen し続けていた",[328,429,430,433,436,439,442],{},[352,431,432],{},"5",[352,434,435],{},"フレームの持ち方",[352,437,438],{},"A案、B案、C案を3つのworktreeで並行実装させた",[352,440,441],{},"B案を推奨",[352,443,444],{},"キャンバス高を560から600へ変える試験でA案は27系だけ取り残された。C案が前提にしていた「記事からSVG単体を参照する」は、調べさせたら成立していなかった",[328,446,447,450,453,456,459],{},[352,448,449],{},"6",[352,451,452],{},"LINE通知",[352,454,455],{},"テスト送信した",[352,457,458],{},"HTTP 200 が返るのにトークには何も増えない",[352,460,461,464,465,468,469,472],{},[66,462,463],{},"bot/info"," に別のボット名が出た。",[66,466,467],{},".env"," の値は最初から正しく、システム環境変数が勝っていた。",[66,470,471],{},"--env-file"," は既存の環境変数を上書きしない",[328,474,475,478,481,484,487],{},[352,476,477],{},"7",[352,479,480],{},"管理者権限",[352,482,483],{},"管理画面に入れないので判定ロジックを調べさせた",[352,485,486],{},"3ヶ月前から消えていた",[352,488,489,491,492,495],{},[66,490,114],{}," は空で、判定は環境変数1本にぶら下がっていた。本番の暗号化環境変数5つにその名前は無い。",[66,493,494],{},"DEPLOY.md"," には「設定済み」と書いてある。書いた人と入れる人が同じだと誰も検証しない",[328,497,498,501,504,509,512],{},[352,499,500],{},"8",[352,502,503],{},"非公開フラグ",[352,505,506,508],{},[66,507,144],{}," で非公開にした",[352,510,511],{},"本文は読める状態のままだった",[352,513,514],{},"認証不要の公開SQLダンプ（12.5MB）に本文が残る。フラグが止めるのは出力を作る側だけで、コレクションへの取り込みは止まらない",[328,516,517,520,523,526,529],{},[352,518,519],{},"9",[352,521,522],{},"ダンプからの除去設計",[352,524,525],{},"「1レコード＝1要素」の前提で計画を書かせた",[352,527,528],{},"Codex の指摘8件で前提が崩れた",[352,530,531,532,535,536,539],{},"長文記事は ",[66,533,534],{},"INSERT"," のあとに ",[66,537,538],{},"UPDATE ... CONCAT(body, ...)"," が98件重なっていた。要素単位で消すと本文の後半が残る。取り込む前に除外する方式へ変えた",[328,541,542,545,548,551,557],{},[352,543,544],{},"10",[352,546,547],{},"GA4 の疎通",[352,549,550],{},"タグを本番へ戻し、ハードリロードで送信を確認した",[352,552,553,556],{},[66,554,555],{},"/g/collect"," は204、GAは0のまま",[352,558,559],{},"204は受理の証拠にならない。測定IDが無効でもGA4は204を返して黙って捨てる。DebugViewが0だったことのほうが重い",[328,561,562,565,568,571,574],{},[352,563,564],{},"11",[352,566,567],{},"台湾チャートの「過去最高」",[352,569,570],{},"4社とも最新月が過去最高と出た",[352,572,573],{},"嘘になりかけた",[352,575,576],{},"手元のTSデータは2024年1月以降しか無い。ASEの2022年9月666.5億とPowertechの2022年6月80.9億を判定に織り込ませた。結論は変わらず、根拠だけが正しくなった",[328,578,579,582,585,588,591],{},[352,580,581],{},"12",[352,583,584],{},"MiniMax H3 の比較",[352,586,587],{},"手元のPCで動くか聞き、検討中の MacBook Air M5 の構成を貼った",[352,589,590],{},"軸がずれた",[352,592,593],{},"知りたかったのは2020年のWindows機と2026年のノートの素のスペック差だった。動画生成が動くかの話に引きずられていた。言い直したら、6年でCPUは追い越し、GPUは追い越していないと出た",[88,595],{},[22,597,598],{"id":598},"今日の学び",[56,600,601,604,607,610,613],{},[59,602,603],{},"「隠す」には導線を消すものと、出力そのものを作らないものがある。設定ファイルに「非公開フラグ」と書いてあっても、どちらなのかは実装を読むまで決まらない",[59,605,606],{},"ステータスコードは届いた証拠にならない。通知は200を返してから別のボットへ行き、GAは204を返してから黙って捨てていた。どちらも受け取り側を見るまで分からなかった",[59,608,609],{},"権限のように「無いと詰むもの」を環境変数1本にぶら下げない。DBに持たせて、消えたらデプロイが止まる形にした",[59,611,612],{},"図の崩れは目で気づけるが、データの範囲は目では気づけない。「N ヶ月ぶり」「過去最高」と書く前に数える、を手順書の厳守事項に入れさせた",[59,614,615],{},"実装を回すのは速い。速いぶん、頼んでいない変更が成果報告に紛れて出てくる。今日それを見つけられたのは、テストが全部通ったという報告のあとで自分の目で画面を開いたからだった",[88,617],{},[22,619,620],{"id":620},"明日やること",[56,622,625,635,641,647,653],{"className":623},[624],"contains-task-list",[59,626,629,634],{"className":627},[628],"task-list-item",[630,631],"input",{"disabled":632,"type":633},true,"checkbox"," 送信は通っているのにGAが記録しない件を切り分ける（プロパティの状態、測定IDの現行値、移行前の測定ID、新ストリーム作成の順）",[59,636,638,640],{"className":637},[628],[630,639],{"disabled":632,"type":633}," このブログ用の GA4 プロパティを作ってタグを置く",[59,642,644,646],{"className":643},[628],[630,645],{"disabled":632,"type":633}," 非公開記事の取り込み前除外を本番へ反映する",[59,648,650,652],{"className":649},[628],[630,651],{"disabled":632,"type":633}," 図解カタログのカテゴリB以降を展開する",[59,654,656,658],{"className":655},[628],[630,657],{"disabled":632,"type":633}," フレームの持ち方のB案を、worktree から master へ入れるか決める",[88,660],{},[22,662,663],{"id":663},"関連記事",[56,665,666,670,674,678,682,686],{},[59,667,668],{},[83,669,86],{"href":85},[59,671,672],{},[83,673,132],{"href":131},[59,675,676],{},[83,677,182],{"href":181},[59,679,680],{},[83,681,220],{"href":219},[59,683,684],{},[83,685,265],{"href":264},[59,687,688],{},[83,689,303],{"href":302},{"title":691,"searchDepth":692,"depth":692,"links":693},"",2,[694,695,705,706,707,708],{"id":24,"depth":692,"text":24},{"id":37,"depth":692,"text":37,"children":696},[697,699,700,701,702,703,704],{"id":41,"depth":698,"text":42},3,{"id":92,"depth":698,"text":93},{"id":137,"depth":698,"text":138},{"id":187,"depth":698,"text":188},{"id":225,"depth":698,"text":226},{"id":270,"depth":698,"text":271},{"id":308,"depth":698,"text":309},{"id":320,"depth":692,"text":320},{"id":598,"depth":692,"text":598},{"id":620,"depth":692,"text":620},{"id":663,"depth":692,"text":663},"diary",null,"非公開フラグの記事が公開ダンプに残り、HTTP 200 も 204 も通知が届いた証拠にならず、テスト19,681件が通った図解はピクセルが揃っていなかった。報告と画面のずれを拾い続けた1日の記録。","md",{},"/2026-08-12-diary","daily-log",false,"2026-08-12T00:00:00.000Z",{"title":5,"description":711},"make-diary","2026-08/2026-08-12/diary-2026-08-12",[722,723,724,725,726],"日記","Claude Code","SVG図解","GA4","非公開記事","vDfkGz7PRSddusyTNYaJ_13Zb5CgzLkC5V0YM2kpN4k",[],[730,731,732,736,740],{"title":303,"path":302,"publishedAt":717},{"title":182,"path":181,"publishedAt":717},{"title":733,"path":734,"publishedAt":735},"2026年8月11日の開発日記 - 起動しただけで消えるコンテキストと、消えたと思って消えていなかったもの","/2026-08-11-diary","2026-08-11T00:00:00.000Z",{"title":737,"path":738,"publishedAt":739},"2026年8月10日の開発日記 - 図解カタログ27型をグリッドに載せ直した","/2026-08-10-diary","2026-08-10T00:00:00.000Z",{"title":741,"path":742,"publishedAt":743},"2026年8月9日の開発日記 - 評価基盤の立ち上げと、8日間止まっていたバックアップ","/2026-08-09-diary","2026-08-09T00:00:00.000Z","https://log.eurekapu.com/og/blog/2026-08-12-diary.png?v=2026-08-12T00%3A00%3A00.000Z&title=2026%E5%B9%B48%E6%9C%8812%E6%97%A5%E3%81%AE%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98%20-%20%E9%9A%A0%E3%81%97%E3%81%9F%E3%81%A4%E3%82%82%E3%82%8A%E3%80%81%E5%B1%8A%E3%81%84%E3%81%9F%E3%81%A4%E3%82%82%E3%82%8A%E3%80%81%E6%8F%83%E3%81%A3%E3%81%9F%E3%81%A4%E3%82%82%E3%82%8A%E3%82%921%E6%97%A5%E3%81%A7%E5%89%A5%E3%81%8C%E3%81%97%E3%81%9F&author=Kei%20Komatsu&sig=07671ebf837015bf",1786603467953]