[{"data":1,"prerenderedAt":643},["ShallowReactive",2],{"content-/2026-05-20-diary":3,"all-pages-for-dir":641,"og-image-/2026-05-20-diary":642},{"id":4,"title":5,"body":6,"category":622,"description":623,"extension":624,"meta":625,"navigation":553,"ogImage":626,"path":627,"project_name":628,"published":629,"publishedAt":630,"seo":631,"stem":632,"tags":633,"todo":626,"unpublished":629,"updatedAt":626,"__hash__":640},"pages/2026-05/2026-05-20/diary-2026-05-20.md","2026年5月20日の開発日記 - 画面の違和感拾いで日本円パーサ未対応バグを発掘",{"type":7,"value":8,"toc":603},"minimark",[9,14,27,30,37,40,44,51,54,59,76,82,97,108,111,115,126,130,144,152,154,158,173,177,191,199,201,205,208,214,218,238,246,248,252,255,259,267,275,277,281,288,292,306,314,316,320,331,335,346,354,356,359,495,497,500,537,539,542,568,570,573],[10,11,13],"h1",{"id":12},"_2026年5月20日の開発日記","2026年5月20日の開発日記",[15,16,17,18,22,23,26],"p",{},"朝はワークフロー整備から入った。",[19,20,21],"code",{},"/make-diary"," と ",[19,24,25],{},"/check-earnings"," を毎朝2回叩いていたのを、1コマンドに畳む。ついでに「昨日と今日で予想数値がどう動いたか」の差分を出すスクリプトを正式化した。",[15,28,29],{},"午後はイビデン株（4062）をビートモニタリングに追加。米国半導体銘柄ばかりだったところに日本企業を初めて入れた。データ集めは agent-browser で株探・Yahoo・irbank を並列に当てて手集計、JSON化までスムーズに進んだ。",[15,31,32,33,36],{},"つもりでいたら、ローカル確認でチャートが何も描画されていない。「これでヨシ」と言いそうになった寸前で違和感を拾い、",[19,34,35],{},"parseCurrencyToNumber"," が日本円表記を全部 null にしていることに辿り着いた。バグを修正してテストを足して着地。",[15,38,39],{},"夜はGitHub関連のサプライチェーン攻撃報道を受けて、VS Code の拡張自動更新を止め、Chrome拡張を53→31に削った。「自動更新オン＝安全」だった常識が、今は「オフの方が安全」に傾きつつあるのを、自分の直感と報道調査で裏取りした記録。",[41,42,43],"h2",{"id":43},"今日のタイムライン",[15,45,46],{},[47,48],"img",{"alt":49,"src":50},"タイムライン","/2026-05/2026-05-20/timeline-2026-05-20.png",[41,52,53],{"id":53},"今日やったこと",[55,56,58],"h3",{"id":57},"_1-make-diary-と-check-earnings-をチェーン化-前日差分を正式化","1. /make-diary と /check-earnings をチェーン化 + 前日差分を正式化",[15,60,61,62,64,65,67,68,71,72,75],{},"朝の繰り返し作業を1コマンドに畳んだ。",[19,63,21],{}," の末尾に ",[19,66,25],{}," を呼ぶ手順10を追加。前日との差分は ",[19,69,70],{},"turso-replicas/scripts/diff_estimates.py"," として正式化し、",[19,73,74],{},"check-earnings.md"," に Step 2 として組み込んだ。",[15,77,78],{},[79,80,81],"strong",{},"主な成果:",[83,84,85,91,94],"ul",{},[86,87,88,90],"li",{},[19,89,21],{}," 1コマンドで日記生成→決算データ取り込み→前日差分まで一気通貫",[86,92,93],{},"171セル中91セル（53%）が前日比で変化していることが毎日見える",[86,95,96],{},"cp932文字化けはUTF-8出力で潰した",[15,98,99,102,103],{},[79,100,101],{},"詳細:"," ",[104,105,107],"a",{"href":106},"/check-earnings-diff-and-chain","/make-diaryから/check-earningsをチェーン実行 + 前日差分ステップを追加した",[109,110],"hr",{},[55,112,114],{"id":113},"_2-blog-verify-を-_payloadjson-廃止に対応してhtml走査ベースに切替","2. blog-verify を _payload.json 廃止に対応してHTML走査ベースに切替",[15,116,117,118,121,122,125],{},"Nuxt Content 3.11 で ",[19,119,120],{},"_payload.json"," から collection 結果が消えたため、ブログインデックス検証スクリプトを HTML 直接走査に作り直した。デバッグ残骸の ",[19,123,124],{},"blog-index-sample.html"," も削除して2コミットに分けた。",[15,127,128],{},[79,129,81],{},[83,131,132,138,141],{},[86,133,134,137],{},[19,135,136],{},"verify-blog-payload.mjs"," を HTML 走査ベースに作り直し",[86,139,140],{},"不要な残骸ファイルの整理",[86,142,143],{},"fix と content をコミット分割",[15,145,146,102,148],{},[79,147,101],{},[104,149,151],{"href":150},"/blog-verify-html-walker","blog-verifyを_payload.json廃止に対応してHTML走査ベースに切り替えた",[109,153],{},[55,155,157],{"id":156},"_3-x_search_tool-を-claude-code-スキルに固めた","3. x_search_tool を Claude Code スキルに固めた",[15,159,160,161,164,165,168,169,172],{},"Hermes Agent 経由で xAI の ",[19,162,163],{},"x_search_tool"," を呼ぶ手順をユーザースキル化。SuperGrok の ",[19,166,167],{},"grok-4.20-reasoning"," がレスポンスから確認でき、自分のサブスク枠で動くことも腑に落ちた。",[19,170,171],{},"allowed_x_handles"," だけではハンドル名を拾わなかったので、query 本文にもハンドルを書くハマりどころも記録した。",[15,174,175],{},[79,176,81],{},[83,178,179,185,188],{},[86,180,181,184],{},[19,182,183],{},"~/.claude/skills/x-search/SKILL.md"," を作成",[86,186,187],{},"「Xを検索」「ツイッターを検索」「エックスを検索」の音声入力フックで起動できる",[86,189,190],{},"個人ポストデータをディスクに残さない手順を含めた",[15,192,193,102,195],{},[79,194,101],{},[104,196,198],{"href":197},"/x-search-skill","x_search_tool を Claude Code スキルに固めて、自分のXハンドルを派遣調査させる仕組みを作った",[109,200],{},[55,202,204],{"id":203},"_4-イビデン4062をビートモニタリングに追加-jpyパーサ未対応バグを修正","4. イビデン（4062）をビートモニタリングに追加 + JPYパーサ未対応バグを修正",[15,206,207],{},"米国半導体・AI銘柄しか乗っていなかったビートモニタリングに、日本企業として初めてイビデンを追加。日本のガイダンスは1年後通期で粒度が違うため null 運用とし、「実績 vs アナリストコンセンサス」「YoY」「翌日株価」だけ埋める方針で着地。",[15,209,210,211,213],{},"ローカル確認でチャート空欄に気づき、",[19,212,35],{}," がドル表記しかパースできず日本円表記（925億円・3,784円）を全部 null にしていたバグを修正。",[15,215,216],{},[79,217,81],{},[83,219,220,230,235],{},[86,221,222,225,226,229],{},[19,223,224],{},"apps/web/app/data/tripleBeat/4062.json"," 新規作成、",[19,227,228],{},"tickerMeta.ts"," に登録",[86,231,232,234],{},[19,233,35],{}," を日本円対応に拡張、テスト追加",[86,236,237],{},"画面の違和感を拾えなかったら、そのままデプロイされてた",[15,239,240,102,242],{},[79,241,101],{},[104,243,245],{"href":244},"/ibiden-beat-monitoring","イビデン（4062）をビートモニタリングに追加：チャート空欄を画面で拾い、parseCurrencyToNumberの日本円バグを潰した",[109,247],{},[55,249,251],{"id":250},"_5-高千穂峡の貸しボート予約サイトを偵察-明日の予約トライをカレンダー登録","5. 高千穂峡の貸しボート予約サイトを偵察 → 明日の予約トライをカレンダー登録",[15,253,254],{},"夏休みの宮崎旅行に向けて、高千穂峡の貸しボート予約サイトを Claude Code に偵察させた。WebFetch が SPA で弾かれたが、グローバル設定通りに agent-browser に自動フォールバック。予約ルールを把握して Google Calendar に翌朝（5/21 8:55）の予約リハーサル枠を登録した。",[15,256,257],{},[79,258,81],{},[83,260,261,264],{},[86,262,263],{},"WebFetch失敗→agent-browser→Calendar登録 の連鎖が手放しで通った",[86,265,266],{},"明日のリハで「どれぐらいの混雑か」を実地で測れる準備",[15,268,269,102,271],{},[79,270,101],{},[104,272,274],{"href":273},"/takachiho-boat-reservation","高千穂峡の貸しボート予約サイトをClaude Codeに偵察させて、明日の予約トライをGoogleカレンダーに登録した",[109,276],{},[55,278,280],{"id":279},"_6-github侵入事件を受けてvs-codechrome拡張機能を棚卸し","6. GitHub侵入事件を受けてVS Code・Chrome拡張機能を棚卸し",[15,282,283,284,287],{},"2026年5月18日のGitHub関連サプライチェーン攻撃報道を受けて拡張機能を整理。VS Code の自動更新を停止し、",[19,285,286],{},"settings.json"," を点検（APIキーなし）、軽微な注意レベルの拡張3つを削除。Chrome拡張は53個から31個に削減（22個削減、想定の5個を大幅に超過）。",[15,289,290],{},[79,291,81],{},[83,293,294,297,300,303],{},[86,295,296],{},"VS Code 拡張の自動更新オフ運用に切替",[86,298,299],{},"VS Code 拡張3つを CLI で削除",[86,301,302],{},"Chrome 拡張 53→31（想定外の大整理）",[86,304,305],{},"後で便利だった Vimium を戻した",[15,307,308,102,310],{},[79,309,101],{},[104,311,313],{"href":312},"/extension-purge-after-github-breach","GitHub侵入事件を受けてVS Codeの自動更新を止め、Chrome拡張を53→31に削った話",[109,315],{},[55,317,319],{"id":318},"_7-family-trips-astro-ガントで828最終便が見切れる問題を修正","7. family-trips Astro ガントで8/28最終便が見切れる問題を修正",[15,321,322,323,326,327,330],{},"家族旅行アーカイブサイト（Astro + Cloudflare Pages）の旅行詳細ページで、ガントカレンダーの 8/28 最終便（大分→羽田 6J096 16:50-18:35）が右端で見切れていた。コンテンツデータの ",[19,324,325],{},"endDate"," は触らず、描画用に ",[19,328,329],{},"ganttEndDate = endDate + 1日"," のダミー終点を渡して右側にバッファを足した。",[15,332,333],{},[79,334,81],{},[83,336,337,340,343],{},[86,338,339],{},"表示側で +1日 のバッファを追加",[86,341,342],{},"コンテンツの正データは無傷",[86,344,345],{},"8/29(土) のバッファ行が下に追加されて見切れ解消",[15,347,348,102,350],{},[79,349,101],{},[104,351,353],{"href":352},"/family-trips-gantt-buffer","Astroガントで8/28最終便が見切れる問題を表示用endDate+1日バッファで直した",[109,355],{},[41,357,358],{"id":358},"今日の試行錯誤",[360,361,362,384],"table",{},[363,364,365],"thead",{},[366,367,368,372,375,378,381],"tr",{},[369,370,371],"th",{},"#",[369,373,374],{},"テーマ",[369,376,377],{},"試したこと",[369,379,380],{},"結果",[369,382,383],{},"気づき",[385,386,387,408,425,444,461,478],"tbody",{},[366,388,389,393,396,402,405],{},[390,391,392],"td",{},"1",[390,394,395],{},"x_search のハンドル指定",[390,397,398,401],{},[19,399,400],{},"allowed_x_handles=[\"EUREKAPU_com\"]"," だけで叩く",[390,403,404],{},"Grok 側がハンドル名を認識せず空振り",[390,406,407],{},"パラメータと query 本文の両方にハンドルを書く必要があった",[366,409,410,413,416,419,422],{},[390,411,412],{},"2",[390,414,415],{},"イビデン株のデータ集め",[390,417,418],{},"WebFetch で株探にアタック",[390,420,421],{},"通期実績は取れた",[390,423,424],{},"過去四半期データは Yahoo / irbank に分散しており agent-browser で並列に当てるのが速かった",[366,426,427,430,433,436,439],{},[390,428,429],{},"3",[390,431,432],{},"イビデンチャート描画",[390,434,435],{},"ローカル一覧と詳細ページを確認、「これでヨシ」",[390,437,438],{},"チャート空欄を画面で発見（ユーザー指摘）",[390,440,441,443],{},[19,442,35],{}," が日本円表記を全 null にしていた。画面の違和感を拾わないとデプロイされていた",[366,445,446,449,452,455,458],{},[390,447,448],{},"4",[390,450,451],{},"高千穂峡サイトのスクレイピング",[390,453,454],{},"WebFetch",[390,456,457],{},"SPA / JS必須で本文取れず",[390,459,460],{},"グローバル設定通り agent-browser に自動フォールバック、一発で通った",[366,462,463,466,469,472,475],{},[390,464,465],{},"5",[390,467,468],{},"Chrome 拡張削除",[390,470,471],{},"フォルダ削除を試みる",[390,473,474],{},"同期で復活する仕組みで CLI 削除不可",[390,476,477],{},"「ワンクリックで個別の削除ページを開く動線」を提示してユーザーに手動操作してもらう形に切替",[366,479,480,483,486,489,492],{},[390,481,482],{},"6",[390,484,485],{},"check-earnings 差分の Top movers 表示",[390,487,488],{},"初回出力",[390,490,491],{},"cp932 で文字化け",[390,493,494],{},"UTF-8 出力に書き直して関連ファイル表にも追記",[109,496],{},[41,498,499],{"id":499},"今日の学び",[83,501,502,508,514,520,531],{},[86,503,504,507],{},[79,505,506],{},"画面の違和感は人間が拾う係","。ローカル確認で「これでヨシ」と言いそうになった寸前で気づけたから良かったが、次は気づけない可能性もある。一覧・詳細・チャートの3点セットでスクショ撮るくらいの粒度で確認する習慣にしておきたい",[86,509,510,513],{},[79,511,512],{},"WebFetch → agent-browser のグローバル設定が今日も効いた","。CLAUDE.md に書いておいたフォールバックルールが、自分が何もしなくても自動で発動する。設定を一度書いておくと、毎回判断する手間がゼロになる",[86,515,516,519],{},[79,517,518],{},"拡張機能の棚卸しは「今が安全とは限らない」前提でやる","。自動更新オンが当たり前だった世界から、自動更新オフの方が安全な世界に移ってきている。報道が出てから動くのではなく、定期的に棚卸しする運用に変える",[86,521,522,525,526,22,528,530],{},[79,523,524],{},"ワークフローは畳めるなら畳む","。",[19,527,21],{},[19,529,25],{}," を別々に叩くのは設計としては正しい責務分離だが、運用としては毎朝2コマンドを忘れずに叩くのは続かない。畳んだら3日で習慣化した",[86,532,533,536],{},[79,534,535],{},"日本企業のガイダンスは米国とは粒度が違う","。1年後通期のガイダンスしか出ないので、四半期ガイダンスとの比較はそもそも無理筋。実績 vs コンセンサスと YoY だけ揃えれば、ビートモニタリングの価値は十分取れる",[109,538],{},[41,540,541],{"id":541},"明日やること",[83,543,546,556,562],{"className":544},[545],"contains-task-list",[86,547,550,555],{"className":548},[549],"task-list-item",[551,552],"input",{"disabled":553,"type":554},true,"checkbox"," 高千穂峡の貸しボート予約リハーサル（8:55 開始、Google Calendar に登録済み）",[86,557,559,561],{"className":558},[549],[551,560],{"disabled":553,"type":554}," イビデン以外の日本企業（半導体関連で1〜2銘柄）の追加検討",[86,563,565,567],{"className":564},[549],[551,566],{"disabled":553,"type":554}," x-search スキルを Mac 側でも使えるか確認",[109,569],{},[41,571,572],{"id":572},"関連記事",[83,574,575,579,583,587,591,595,599],{},[86,576,577],{},[104,578,107],{"href":106},[86,580,581],{},[104,582,151],{"href":150},[86,584,585],{},[104,586,198],{"href":197},[86,588,589],{},[104,590,245],{"href":244},[86,592,593],{},[104,594,274],{"href":273},[86,596,597],{},[104,598,313],{"href":312},[86,600,601],{},[104,602,353],{"href":352},{"title":604,"searchDepth":605,"depth":605,"links":606},"",2,[607,608,618,619,620,621],{"id":43,"depth":605,"text":43},{"id":53,"depth":605,"text":53,"children":609},[610,612,613,614,615,616,617],{"id":57,"depth":611,"text":58},3,{"id":113,"depth":611,"text":114},{"id":156,"depth":611,"text":157},{"id":203,"depth":611,"text":204},{"id":250,"depth":611,"text":251},{"id":279,"depth":611,"text":280},{"id":318,"depth":611,"text":319},{"id":358,"depth":605,"text":358},{"id":499,"depth":605,"text":499},{"id":541,"depth":605,"text":541},{"id":572,"depth":605,"text":572},"diary","イビデン株を追加してチャートが空欄になる現象を画面で拾い、parseCurrencyToNumberの日本円バグを潰した。/make-diaryと/check-earningsをチェーン化、GitHub侵入事件契機にChrome拡張を53→31に削減。","md",{},null,"/2026-05-20-diary","daily-log",false,"2026-05-20T00:00:00.000Z",{"title":5,"description":623},"2026-05/2026-05-20/diary-2026-05-20",[634,635,636,637,638,639],"日記","イビデン","parseCurrency","セキュリティ","Claude Code","agent-browser","Qmbory4_v3QnED1xlXCaE5cxn_bxKR3WfIJALYPVNG0",[],"https://log.eurekapu.com/og/blog/2026-05-20-diary.png?v=2026-05-20T00%3A00%3A00.000Z&title=2026%E5%B9%B45%E6%9C%8820%E6%97%A5%E3%81%AE%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98%20-%20%E7%94%BB%E9%9D%A2%E3%81%AE%E9%81%95%E5%92%8C%E6%84%9F%E6%8B%BE%E3%81%84%E3%81%A7%E6%97%A5%E6%9C%AC%E5%86%86%E3%83%91%E3%83%BC%E3%82%B5%E6%9C%AA%E5%AF%BE%E5%BF%9C%E3%83%90%E3%82%B0%E3%82%92%E7%99%BA%E6%8E%98&author=Kei%20Komatsu&sig=f421f2e5a0f4d5cd",1782528839962]