開発claude-code-tools

朝起きてターミナルを開くたびに /make-diary/check-earnings を順番に叩いていた。3日続けたところで指が止まった。「これ毎日2回叩くの、明らかに無駄では?」と思って Claude Code に整理させた記録。

ついでに、決算ガイダンスの数字が「昨日と比べて何が動いたか」が気になりだしたので、毎回 diff を出す Step も足してもらった。

きっかけ: 朝の手数を減らしたかった

/make-diary は前日分の日記をまとめるコマンドで、/check-earnings は MU/NVDA/SNDK の決算ガイダンスを SEC EDGAR と外部のコンセンサスデータプロバイダから日次で取りに行って Turso に積むコマンドだ。両方とも「朝、必ず1回叩く」運用にしていた。

ところが朝はだいたい寝ぼけている。2回叩くだけなのに片方を忘れる日が出てきた。Claude Code に向かって「make-diary 1コマンドで全部やってほしい」と頼んだ。

対応1: make-diary の末尾に check-earnings をぶら下げる

最初にやらせたのはチェーン実行。apps/web/.claude/commands/make-diary.md の末尾にステップ10を追加して、/check-earnings の Step 0〜Step 1 をそのまま実行する形にした。

ここで一つだけ罠があった。/make-diary前日の日記を生成するコマンドなのに対して、/check-earnings当日の snapshot_date で SEC と外部 API にアクセスする。日付引数の意味が違うので、make-diary の中から呼ぶときに「日付を引き継がない」ことを明文化した。AI 側が気を利かせて前日日付を check-earnings に渡そうとするのを止めるためのガード文を入れた。

これで朝の手数は半分になった。/make-diary 1発で、前日日記の生成と当日ガイダンスのスナップショット取得まで一気通貫で終わる。

対応2: 「昨日と何が変わった?」が気になり始めた

snapshot を毎日積み始めて1週間くらい経った頃、ふと「今日の数字と昨日の数字、何か変化ありましたか?」と Claude Code に聞いた。コンセンサスがどれくらいの速度で動いているのか体感したかった。

その場で一時スクリプトを書いてもらって diff を計算させたら、面白い結果が出た。

  • 171セル中91セル(53%)が変化
  • 残りの80セルは据え置き
  • 実績(A)は不変、すべて予想(E)の動き

実績は変わるわけがないので当然として、予想(E)の半分以上が日次で更新されている、というのは想像より動きが速かった。アナリストが連日でモデルを叩き直しているのが数字に出ている。

その場で「これ毎日 check-earnings の最後でやってほしい」と頼んだ。

対応3: 正式化と Step 2 への組み込み

一時スクリプトを turso-replicas/scripts/diff_estimates.py として正式化した。雑な diff だと数字の羅列が流れるだけで意味が取れないので、出力を以下の構成に整えてもらった。

  • 銘柄別サマリ: 各銘柄で何セル動いたか
  • Top movers: 変化幅が大きい上位セル
  • A/E 内訳: 実績側か予想側か

~/.claude/commands/check-earnings.md の手順に Step 2(差分表示)を追加して、Step 1 で snapshot を入れた直後に必ず Step 2 で diff を出す流れにした。これで毎朝、/make-diary を叩くだけで「前日日記 → 当日 snapshot → 前日比 diff」が連続して画面に流れてくる。

ハマったポイント: cp932 で文字化け

正式化したスクリプトを Windows で叩いたら、Top movers の出力が文字化けで読めなかった。Python のデフォルトが cp932 で吐いていたせいで、矢印記号などのマルチバイト文字が壊れていた。出力を UTF-8 に固定する1行を入れて解決。

Windows で Python スクリプトを書くたびに同じ罠を踏んでいる気がする。Claude Code 側のテンプレに sys.stdout.reconfigure(encoding='utf-8') をデフォルトで入れる方針を、後でルール化したい。

仕上げ: ドキュメントの整合性

最後に check-earnings.md の「関連ファイル」表にも diff_estimates.py を追記した。スラッシュコマンドのドキュメントは、関連ファイル表を見れば全構成が掴めるようにしておきたい。次に半年後の自分が読んでも迷わないように。

やったこと

  • apps/web/.claude/commands/make-diary.md Step 10 に /check-earnings チェーン実行を追加
  • make-diary は前日日付、check-earnings は当日 snapshot_date という日付引数の違いを明文化
  • 一時スクリプトで前日 diff を計算(171セル中91セル変化、すべて予想側)
  • turso-replicas/scripts/diff_estimates.py として正式化(銘柄別サマリ + Top movers)
  • ~/.claude/commands/check-earnings.md に Step 2(差分表示)を追加
  • cp932 文字化けを UTF-8 出力に切り替えて解消
  • check-earnings.md の関連ファイル表に diff_estimates.py を追記

振り返り

今日の動きは「人間が面倒くさがる → AI に畳ませる」の典型例だった。/make-diary/check-earnings を別々に持っていた状態は、設計としては正しい(責務が分離されている)。ただ毎日叩く立場からすると、最後の入口を1つに揃えてくれた方が圧倒的に楽だ。

差分計算の正式化も同じ構図。最初は「ちょっと気になったから見せて」と頼んだだけだった。出てきた数字が想像より面白くて「これ毎日見たい」になり、その場で正式化を頼んだ。思いつきの一時スクリプトを Step として組み込むまでが10分で済む、というのは Claude Code がいないと成立しない速度だ。

朝起きて /make-diary だけ叩けば、日記とガイダンスと前日比までまとめて流れてくる。これで明日からの朝が少し軽くなる。