開発claude-code-tools

きっかけ

毎朝 /make-diary を走らせると、統合日記マークダウン・詳細記事・タイムライン PNG・SVG が apps/web/content/{YYYY-MM}/{TARGET_DATE}/ に積み上がり、加えてチェーン処理が tripleBeatmemory-makers の TS データを書き換える。これまではコマンドが終わるたびに「で、コミットどうする?」と一拍止まり、手で git add していた。

今朝もコマンド終了後に「ありがとう。make-diaryコマンドで毎回出力するじゃないですか。マークダウンとか、SVGとか。コマンド終わったら必ずコミットしといてください。それもmake-diaryコマンドのワークフローに入れといてください」とユーザー(自分)から差し戻された。手間を消すなら、ワークフローの末尾を書き換えるのが筋。.claude/commands/make-diary.md に Step 13(コミット)と Step 14(掃除)を足した。

Step 13: 生成物を明示パスでコミット

成果物コミットは「明示パスのみ・glob 禁止」で固めた。/make-diary 走行中も裏で別の編集が走っていることがあり、git add -Agit add . をすると無関係な手作業差分を巻き込んで日記のコミットが汚れる。

コミット対象に絞ったのは次の4種類。

  • 当日生成した日記コンテンツ: apps/web/content/{YYYY-MM}/{TARGET_DATE}/ 配下の diary-*.md / 詳細記事 / タイムライン PNG / SVG
  • チェーン処理が再生成した TS データ: app/data/memory-makers/*MonthlyRevenue.tsexportStats.ts / koreaChip*.ts
  • earnings-dynamics の TS: app/data/earningsDynamics/*.tsmanifest.ts(毎日コミットしないと本番の /earnings-dynamics/{ticker} が古いまま固まる)
  • beat-monitoring 自動更新分: app/data/tripleBeat/*.jsonsummaries.ts(Step 10.5 が走ったときだけ)

データファイル側は git status --porcelain で「AM のもの」だけを抜き出して xargs -r git add に流す形にした。改行コードだけの CRLF 差分は git diff --cached --stat で 0 行になるので、結果的にコミットされない。

push は組み込まなかった。複数日分をまとめてレビューしたい朝もあるので、push する/しないの判断は自分の手元に残す。

git add apps/web/content/{YYYY-MM}/{TARGET_DATE}/

git status --porcelain \
  apps/web/app/data/memory-makers/ \
  apps/web/app/data/tripleBeat/ \
  apps/web/app/data/earningsDynamics/ \
  | awk '$1 ~ /^[AM]/ { print $2 }' \
  | xargs -r git add

git diff --cached --stat
git commit -m "docs(diary): {TARGET_DATE} の作業日記を追加 ..."

pre-commit hook が落ちたら --no-verify で迂回せず、エラー内容を報告して止める方針も明記した。フックは大抵正しいことを言ってくる。

Step 14: 検証スクショと同期ログを掃除

コミットを足した直後、ユーザーから「だからスクリーンショットのログとかも履歴から消しといてくださいね」と続けて言われた。Step 8(ブラウザ表示確認)で mcp__chrome-devtools__take_screenshot を叩くと memo/{CURRENT_DATE}/diary-top.png などが残る。これがコミット対象外のまま memo/ 配下に積み上がっていく。Step 14 でその後始末を入れた。

掃除対象は2つ。

  • 検証スクショ: memo/{CURRENT_DATE}/diary-top.png / diary-bottom.png / korea-article.png など、Step 8 で名前を決めて撮ったファイル
  • 同期ログ: claude-code-sync/{TARGET_DATE}/ ディレクトリ全体(gitignore 済みなので git には影響しない)

rm memo/{CURRENT_DATE}/*.png のような glob を絶対に書かない、と注意書きを残した。memo/{CURRENT_DATE}/ には、計画書のスクショや調査メモ用の正規の PNG が同居していることがある。glob で雑に消すと、その「残しておきたい1枚」まで巻き込む。スクショの名前を増やしたら、右辺に明示で1行ずつ足す運用にした。

rm -f を使うので、ファイルが無くても exit 0。/make-diary 全体を止めない。

設計上の判断

書き終わって振り返ると、判断はこの3つに集約された。

  • glob 禁止・明示パスのみ: 自動化が暴走する典型が「広めに add / rm して人間が後で困る」パターン。/make-diary は毎日走るので、1回のミスが1日分の汚れに直結する。冗長でも明示する。
  • push は組み込まない: コミットは決定論的な操作だが、push はネットワーク・レビュー・他ブランチとの関係が絡む。自動化の境界はコミットまでで切る。
  • 失敗をブロッキングにしない箇所を切り分ける: 掃除(Step 14)の rm -f は失敗しても先に進める。コミット(Step 13)の pre-commit hook 失敗は止めて報告する。「直さなくていい失敗」と「直すべき失敗」を分けて扱う。

今日の効果

ワークフロー更新後、その場で当日分の生成物を Step 13 の手順でコミットし、Step 14 でスクショを消した。明日からは /make-diary を走らせ終えた時点で、apps/web/content/2026-06/2026-06-24/ 配下と関連 TS データが自動でコミット済みになり、memo/2026-06-24/ には手作業メモだけが残る。

朝のルーチンから「コミット忘れた」「スクショ消し忘れた」の二拍が消える。地味だが、毎日積もる手間なので確実に効く。