[{"data":1,"prerenderedAt":521},["ShallowReactive",2],{"content-/make-diary-daily-run":3,"all-pages-for-dir":519,"og-image-/make-diary-daily-run":520},{"id":4,"title":5,"body":6,"category":500,"description":501,"extension":502,"meta":503,"navigation":454,"ogImage":504,"path":505,"project_name":506,"published":507,"publishedAt":508,"seo":509,"stem":510,"tags":511,"todo":504,"unpublished":507,"updatedAt":504,"__hash__":518},"pages/2026-05/2026-05-29/make-diary-daily-run.md","毎朝の日記生成と決算データ取り込みを1コマンドのパイプラインで回した記録",{"type":7,"value":8,"toc":487},"minimark",[9,13,22,25,28,33,39,51,64,67,74,76,80,87,113,120,123,125,129,132,146,153,155,159,170,173,175,179,186,189,217,238,241,243,247,254,261,278,281,283,286,415,417,420,438,440,443,469,471,474,483],[10,11,12],"h1",{"id":12},"毎朝の日記生成と決算データ取り込みを1コマンドで回した記録",[14,15,16,17,21],"p",{},"毎朝の ",[18,19,20],"code",{},"/make-diary"," を「日記を書くだけのコマンド」から「日記生成 → 決算データ取り込み → 決算ビートのXサーチまで一気に回るパイプライン」に育てた、その初日の記録。\nコマンドを叩いてコーヒーを淹れて戻ってくると、前日の日記6本と統合日記、タイムラインのPNG、Xポスト案5個、そして3銘柄ぶんの決算スナップショットがTursoに積まれている。ここまで1本のコマンドで通るようにした。",[14,23,24],{},"主役はあくまで自分で、AIは実行係。「どう分けるか」「どこを公開記事にするか」を決めるのが自分の仕事で、手を動かすのはサブエージェントに任せた。",[26,27],"hr",{},[29,30,32],"h2",{"id":31},"_1-前日2026-05-28の日記を生成する","1. 前日(2026-05-28)の日記を生成する",[14,34,35,36,38],{},"まず ",[18,37,20],{}," を引数なしで実行して、前日ぶんの日記を作らせた。\nsyncログを読むと、前日は9セッション動いていた。これを内容で8カテゴリに切り分ける。プロジェクト本体の作業、財務データまわり、決算記事、自動化スクリプト、家族の予定メモ……と性質がバラバラなので、1本の記事に押し込むと読み返したときに何も思い出せない。だからカテゴリごとに記事を分ける。",[14,40,41,42,45,46,50],{},"切り分けが決まったら、",[18,43,44],{},"file-editor"," サブエージェントを",[47,48,49],"strong",{},"並列で派遣","して詳細記事を一気に書かせた。",[52,53,54,58,61],"ul",{},[55,56,57],"li",{},"詳細記事6本（カテゴリ別）",[55,59,60],{},"統合日記1本（各記事へのリンク + 試行錯誤テーブル）",[55,62,63],{},"タイムラインPNG 1枚",[14,65,66],{},"並列で投げると、1本ずつ直列に書かせるより体感で待ち時間が3分の1くらいに縮む。各エージェントには「100〜200行」「サービス名・書籍名は匿名化」「主語は本人」のルールを毎回渡す。ここを渡し忘れると、AIが主役の文章が混ざってきて後から書き直すはめになる。",[14,68,69,70,73],{},"タイムラインは ",[18,71,72],{},"generate-timeline-full.mjs"," にその日の日付を渡して生成させた。セッションのJSONLを読んでPlaywrightで色帯のPNGをレンダリングする仕組みで、プロジェクトごとに何時から何時まで触っていたかが横帯で一目で分かる。",[26,75],{},[29,77,79],{"id":78},"_2-pathリンターを通す","2. pathリンターを通す",[14,81,82,83,86],{},"記事を全部書き終えたら、",[18,84,85],{},"update-paths.mjs --check"," でpathの整合性を検証した。",[88,89,94],"pre",{"className":90,"code":91,"language":92,"meta":93,"style":93},"language-bash shiki shiki-themes vitesse-light vitesse-light","node scripts/update-paths.mjs --check\n","bash","",[18,95,96],{"__ignoreMap":93},[97,98,101,105,109],"span",{"class":99,"line":100},"line",1,[97,102,104],{"class":103},"senZ8","node",[97,106,108],{"class":107},"sdGka"," scripts/update-paths.mjs",[97,110,112],{"class":111},"snbK4"," --check\n",[14,114,115,116,119],{},"このリンターは「path未設定の記事がないか」「同じpathが2つの記事に振られていないか」「予約語と衝突していないか」を見る。今回は ",[47,117,118],{},"1110ファイルをスキャンして1110ファイルそのまま通過","。新しく足した日記記事のpathが既存とぶつかっていないことを、件数が前後しないことで確認できた。",[14,121,122],{},"毎日記事が増えていくので、ここで重複を弾いておかないとビルド時にZodの手前で事故る。リンターが赤くならないことを毎朝の合言葉にしている。",[26,124],{},[29,126,128],{"id":127},"_3-ブラウザで実際の見た目を確認する","3. ブラウザで実際の見た目を確認する",[14,130,131],{},"リンターが緑になっても、それは「pathが整合している」だけで「ちゃんと表示される」保証ではない。Dev ServerとデバッグChromeを並列で立ち上げて、自分の目で確認した。",[52,133,134,137,140,143],{},[55,135,136],{},"Dev Serverが200を返すまで待つ",[55,138,139],{},"統合日記ページを開いてファーストビューをスクリーンショット",[55,141,142],{},"ページ最下部までスクロールして、試行錯誤テーブルと関連記事リンクが崩れていないか確認",[55,144,145],{},"詳細記事も1本だけ抜き打ちで開いて表示を確認",[14,147,148,149,152],{},"特に見るのはタイムラインのPNGがちゃんと出ているか。画像パスを絶対パスで書くと本番で割れるので、",[18,150,151],{},"./timeline-....png"," の相対パスになっているかを画面で見て確かめる。今回は統合日記・詳細記事ともにスクリーンショットで正常レンダリングを確認できた。Zodエラーの赤い画面も出なかった。",[26,154],{},[29,156,158],{"id":157},"_4-税理士会計士フォロワー向けのxポスト案を5個出す","4. 税理士・会計士フォロワー向けのXポスト案を5個出す",[14,160,161,162,165,166,169],{},"日記が固まったところで、同じセッションログから税理士・会計士フォロワー向けの単文ポスト案を5個生成させた。これは",[47,163,164],{},"コンソール出力のみ","で、公開記事には一切ファイルを作らない。",[18,167,168],{},"content/"," を汚すと日記サイトに混ざってしまうため。",[14,171,172],{},"ポスト案を作るときに毎回気をつけているのは、「自分がやったこと」と「AIがやったこと」を混ぜないこと。判断したのは自分、手を動かしたのはAI、という構図を崩すと嘘になる。あとは280文字以内・ハッシュタグなし・AI臭い言い回し禁止のいつものルールで5個揃えた。",[26,174],{},[29,176,178],{"id":177},"_5-check-earnings-をチェーンで実行する","5. /check-earnings をチェーンで実行する",[14,180,181,182,185],{},"ここからが今回パイプラインに繋いだ後半。日記が終わったら、間を置かずに ",[18,183,184],{},"/check-earnings"," の手順をそのまま流した。",[14,187,188],{},"半導体3銘柄（NVDA / MU / SNDK）の市場コンセンサス予想を、クラウド財務データサービスの内部APIから取得する。手順8で立ち上げ済みのデバッグChromeをそのまま使い、銘柄ごとに内部APIのレスポンスを一時JSONに書き出した。",[88,190,192],{"className":90,"code":191,"language":92,"meta":93,"style":93},"uv run python scripts/check_earnings.py --skip-koyfin --date 2026-05-29\n",[18,193,194],{"__ignoreMap":93},[97,195,196,199,202,205,208,211,214],{"class":99,"line":100},[97,197,198],{"class":103},"uv",[97,200,201],{"class":107}," run",[97,203,204],{"class":107}," python",[97,206,207],{"class":107}," scripts/check_earnings.py",[97,209,210],{"class":111}," --skip-koyfin",[97,212,213],{"class":111}," --date",[97,215,216],{"class":107}," 2026-05-29\n",[14,218,219,220,223,224,230,231,234,235,237],{},"書き出したJSONを取り込みスクリプトに流して、Tursoの ",[18,221,222],{},"consensus_estimates"," テーブルに ",[47,225,226,229],{},[18,227,228],{},"snapshot_date=2026-05-29"," でUPSERT","。ここで日付を間違えやすい。日記は前日(2026-05-28)を書いているのに、決算スナップショットは",[47,232,233],{},"当日基準","で積む。",[18,236,20],{}," の前日感覚を引きずって前日の日付を渡すと、別日のデータを上書きしかねない。今日の日付を渡すこと、と毎回自分に言い聞かせる。",[14,239,240],{},"3銘柄ぶんのUPSERTが通ったあと、SEC EDGARの8-Kチェックと前日との差分計算を並列で走らせた。新規の8-Kが無くてもexit 0で抜けて、最後にサマリまで到達させる。途中で1銘柄こけても全部止めず、揃ったぶんだけ流して残りは翌日に持ち越せる設計にしてある。",[26,242],{},[29,244,246],{"id":245},"_6-earnings-beat-scan-を回して公開記事として保存する運用に切り替えた","6. earnings-beat-scan を回して「公開記事として保存」する運用に切り替えた",[14,248,249,250,253],{},"最後に、3銘柄以外の米国上場企業で「ガイダンスがコンセンサスを5〜10%以上上回った銘柄」を ",[18,251,252],{},"earnings-beat-scan"," スキルで洗い出した。中身はXサーチ（Grok経由）で過去24時間の決算発表を引いてくる。",[14,255,256,257,260],{},"ここで前日決算の継続言及を拾ってしまうと、",[47,258,259],{},"もう織り込み済みの古いニュースを「今朝のビート」として誤報する","事故が起きる。過去にそれをやらかしているので、決算カレンダーの投稿で発表日ゲートをかけた。具体的には、決算カレンダー系アカウントの投稿で「2026-05-28引け後cohort」を確認し、その窓に入っている銘柄だけを残す。窓の外の言及は問答無用で捨てる。",[14,262,263,266,267,269,270,277],{},[47,264,265],{},"今回からの運用変更",": これまで ",[18,268,252],{}," の結果はコンソール出力だけで消えていた。今日からは結果を ",[47,271,272,273,276],{},"公開記事 ",[18,274,275],{},"earnings-beats"," として保存する","ことにした。サマリのテーブルと、ガイダンスをレイズした銘柄の詳細セクションを記事に落とす。毎朝の決算ビートが日記サイトに残っていけば、後から「あのときどの銘柄がレイズしたか」を遡れる。0件の朝は記事を作らず、コンソールに1行だけ出して終わる。",[14,279,280],{},"数値はGrokの要約なので、最終確認は各社IRの決算リリース本文で取る、という但し書きを記事末尾に必ず添える。ここを抜くと、要約の丸めた数字を一次情報のように扱ってしまう。",[26,282],{},[29,284,285],{"id":285},"今日の試行錯誤",[287,288,289,311],"table",{},[290,291,292],"thead",{},[293,294,295,299,302,305,308],"tr",{},[296,297,298],"th",{},"#",[296,300,301],{},"テーマ",[296,303,304],{},"試したこと",[296,306,307],{},"結果",[296,309,310],{},"気づき",[312,313,314,332,349,366,382,398],"tbody",{},[293,315,316,320,323,326,329],{},[317,318,319],"td",{},"1",[317,321,322],{},"9セッションの整理",[317,324,325],{},"8カテゴリに切り分けてサブエージェントを並列派遣",[317,327,328],{},"成功",[317,330,331],{},"直列より体感で待ち時間が3分の1。性質の違う作業を1記事に混ぜないと振り返りが効く",[293,333,334,337,340,343,346],{},[317,335,336],{},"2",[317,338,339],{},"path整合性",[317,341,342],{},"1110ファイルをリンターでスキャン",[317,344,345],{},"1110そのまま通過",[317,347,348],{},"件数が前後しないことで新規記事の重複なしを確認できる",[293,350,351,354,357,360,363],{},[317,352,353],{},"3",[317,355,356],{},"タイムライン埋め込み",[317,358,359],{},"PNGを相対パスで参照",[317,361,362],{},"表示OK",[317,364,365],{},"絶対パスだと本番で画像が割れる。画面で見て確かめるのが確実",[293,367,368,371,374,377,379],{},[317,369,370],{},"4",[317,372,373],{},"決算スナップショットの日付",[317,375,376],{},"snapshot_dateに当日を渡す",[317,378,328],{},[317,380,381],{},"日記は前日・決算は当日。前日感覚を引きずると別日を上書きする危険",[293,383,384,387,390,393,395],{},[317,385,386],{},"5",[317,388,389],{},"決算ビートの発表日ゲート",[317,391,392],{},"決算カレンダー投稿で当日cohortを確認",[317,394,328],{},[317,396,397],{},"窓外の古い言及を捨てないと、織り込み済みニュースを誤報する",[293,399,400,403,406,409,412],{},[317,401,402],{},"6",[317,404,405],{},"beat-scanの保存方式",[317,407,408],{},"コンソールのみ → 公開記事に変更",[317,410,411],{},"運用変更",[317,413,414],{},"毎朝のビートが残れば後から遡れる。0件の朝は記事を作らない",[26,416],{},[29,418,419],{"id":419},"今日の学び",[52,421,422,425,428,435],{},[55,423,424],{},"日記生成・Xポスト案・決算取り込み・決算ビートを1コマンドのチェーンに繋ぐと、朝の作業がコマンド1本に圧縮された。判断だけ自分がやって、実行はサブエージェントとスクリプトに丸ごと回せる",[55,426,427],{},"サブエージェントを並列で派遣するときは、毎回「主語は本人」「匿名化ルール」「行数の上限」を指示に同梱しないと、後で書き直す手間が発生する。指示テンプレを固定しておくのが効く",[55,429,430,431,434],{},"同じパイプラインの中でも、日記は前日・決算は当日と",[47,432,433],{},"基準日が違う","。1本のコマンドにまとめたことで、かえって日付の取り違えが起きやすくなった。当日の日付を渡す箇所をコメントで明示しておく",[55,436,437],{},"決算ビートのような外部要約は、発表日ゲートと一次情報の但し書きをセットにしないと、古いニュースや丸めた数字をそのまま流してしまう",[26,439],{},[29,441,442],{"id":442},"明日やること",[52,444,447,457,463],{"className":445},[446],"contains-task-list",[55,448,451,456],{"className":449},[450],"task-list-item",[452,453],"input",{"disabled":454,"type":455},true,"checkbox"," 決算スナップショットの取り込みで、特定銘柄だけ認証切れでこけたときに残りを確実に流せているか、翌朝のログで確認する",[55,458,460,462],{"className":459},[450],[452,461],{"disabled":454,"type":455}," earnings-beats 記事の発表日ゲートが効いているか、窓外銘柄が混ざっていないかを生成直後にざっと目視チェックするstep を運用に足す",[55,464,466,468],{"className":465},[450],[452,467],{"disabled":454,"type":455}," サブエージェントへの指示テンプレを1ファイルに切り出して、毎回コピペせず参照で済むようにする",[26,470],{},[29,472,473],{"id":473},"関連記事",[52,475,476],{},[55,477,478],{},[479,480,482],"a",{"href":481},"/earnings-beats-2026-05-28","2026-05-28 引け後の米国決算ビート速報",[484,485,486],"style",{},"html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html pre.shiki code .snbK4, html code.shiki .snbK4{--shiki-default:#A65E2B;--shiki-dark:#A65E2B}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":93,"searchDepth":488,"depth":488,"links":489},2,[490,491,492,493,494,495,496,497,498,499],{"id":31,"depth":488,"text":32},{"id":78,"depth":488,"text":79},{"id":127,"depth":488,"text":128},{"id":157,"depth":488,"text":158},{"id":177,"depth":488,"text":178},{"id":245,"depth":488,"text":246},{"id":285,"depth":488,"text":285},{"id":419,"depth":488,"text":419},{"id":442,"depth":488,"text":442},{"id":473,"depth":488,"text":473},"dev","前日分の開発日記を /make-diary で生成し、そのまま決算スナップショット取り込みと決算ビートのXサーチまでチェーン実行した1日のメモ。9セッションを8カテゴリに分けてサブエージェントを並列で派遣し、pathリンター・ブラウザ表示確認・Xポスト案生成・Turso UPSERT・SEC EDGARチェックを毎朝1本で完結させる運用に固めた。","md",{},null,"/make-diary-daily-run","daily-log",false,"2026-05-29T00:00:00.000Z",{"title":5,"description":501},"2026-05/2026-05-29/make-diary-daily-run",[512,513,514,515,516,517],"日記","make-diary","サブエージェント並列","決算データ","Turso","自動化パイプライン","lraSjOMRgPQ4zBUVoPE5l2EfgV3Oc0axM2UEgMPX4Ow",[],"https://log.eurekapu.com/og/blog/make-diary-daily-run.png?v=2026-05-29T00%3A00%3A00.000Z&title=%E6%AF%8E%E6%9C%9D%E3%81%AE%E6%97%A5%E8%A8%98%E7%94%9F%E6%88%90%E3%81%A8%E6%B1%BA%E7%AE%97%E3%83%87%E3%83%BC%E3%82%BF%E5%8F%96%E3%82%8A%E8%BE%BC%E3%81%BF%E3%82%921%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%A7%E5%9B%9E%E3%81%97%E3%81%9F%E8%A8%98%E9%8C%B2&author=Kei%20Komatsu&sig=43665b6bee479ed5",1782528844909]