Claude Codeに全部やらせていた頃の話
「AIに全部やらせれば楽じゃん」
私もそう思っていました。ニュースの収集、記事の執筆、サイトの更新。全部Claude Codeに任せれば、寝ている間に仕事が終わる。
実際にやってみました。Claude Codeにニュース収集を1日7回やらせ、毎回WebSearchで情報を探させ、記事を生成させ、デプロイまで一気通貫。
結果、動きました。ちゃんと動きました。
ただ、1つ問題がありました。トークン消費が想定の2倍以上だったのです。
冷静に考えれば当たり前です。RSSフィードの巡回なんて、同じURLを同じ形式で叩くだけ。判断力は要りません。それなのに毎回Claude Codeを起動し、WebSearchでニュースを探させていた。
高級シェフに皿洗いをさせていたようなものです。
判断基準はたった1つ。「ロジックが固定か、毎回判断が要るか」
この失敗から見つけた使い分けの原則は、驚くほどシンプルです。
ロジックが固定 → Python。毎回判断が変わる → Claude Code。
たとえば、RSSフィードからニュースを取得する処理。URLは決まっている。パース方法も決まっている。重複排除のロジックも決まっている。これは「固定ロジック」です。Pythonで書けば、トークン消費ゼロで動きます。
一方、「このニュースは面白いか?」「どういう角度で記事にするか?」「どのチャネルで配信するか?」。これは毎回答えが変わります。文脈を読み、判断する必要がある。これはClaude Codeの仕事です。
Pythonに任せるもの(固定ロジック)
- RSS/APIからのデータ収集
- CSV/JSONの整形・集計・フィルタリング
- ファイルの一括リネーム・移動・変換
- 定時実行(launchd/cron)
- 重複排除・テーマ分類(キーワードマッチング)
Claude Codeに任せるもの(判断が必要)
- 「どのニュースが重要か」の選別
- 記事・投稿文の生成
- 複数ファイル横断の編集
- 「今日何をやるべきか」の優先度判断
- 新しいワークフローの設計・試行錯誤
実際に作ったパイプラインの全体像
この原則で、私のニュース自動配信パイプラインを再設計しました。
Before:Claude Code単独(1日7回起動)
Claude Code (WebSearch) → 記事生成 → デプロイ × 7回/日毎回WebSearchでニュースを探すところからClaude Codeがやっていました。同じフィードを毎回探し直す。無駄です。
After:Python + Claude Codeの3フェーズ(1日3回起動)
Phase 1: Python(トークン0)
RSS収集 → テーマ自動分類 → 重複排除 → raw_news.json
Phase 2: Claude Code(判断のみ)
raw_news.json読み → ランキング → 角度決定 → atoms.csv転記
Phase 3: Claude Code(生成のみ)
新規atoms → 記事JSON生成 → サイトビルド → デプロイ → git pushPhase 1が全ての鍵です。 Pythonスクリプト(778行)がRSSフィードを巡回し、テーマを自動分類し、重複を排除します。この処理にトークンは1つも使いません。
Claude Codeが起動するのはPhase 2から。しかも、Pythonが整理済みのデータを「読むだけ」です。WebSearchで探し回る必要がない。
結果として、1日7回の起動が3回に減り、各回のトークン消費も大幅に減りました。
3フェーズ設計の技術的な中身
Phase 1:Python(データ収集 + 前処理)
# brain_content.py の構成(778行)
# - 30以上のRSSフィードを巡回
# - feedparserでパース(無料のPythonライブラリ)
# - キーワードマッチングで17テーマに自動分類
# - URL照合で重複排除
# - 結果をraw_news.jsonに保存このスクリプトはmacOSのlaunchdで定時実行されます。朝7時、昼12時、夜20時の3回。Pythonが起動し、数秒で処理が終わり、結果をJSONに吐き出して終了。
ポイントは「Pythonにやらせる仕事を増やすほど、Claude Codeの起動回数が減る」という構造です。
Phase 2:Claude Code(選別 + 判断)
Pythonが吐いたraw_news.jsonを読み、S/A/B/Cランクの重要度判定、読者に刺さる角度の決定、ネタDBへの転記判断を行います。
ここはClaude Codeでなければできません。「この研究は、自分の読者の課題と接続できるか?」——こういう判断はPythonには無理です。
Phase 3:Claude Code(生成 + デプロイ)
選別されたネタから記事JSONを生成し、事実確認、炎上リスクチェックを通し、HTMLに変換してデプロイします。記事のニュアンスを整え、事実を検証し、適切なトーンで書く。固定ロジックでは対応できない領域です。
シェルスクリプトが「橋渡し役」になる
PythonとClaude Codeをつなぐのは、シンプルなシェルスクリプトです。
# ai-news-collect.sh(簡略版)
# Phase 1: Python(トークン0)
python3 brain_content.py rss --days 1
# ニュースが0件なら終了
if [ "$NEWS_COUNT" -eq 0 ]; then exit 0; fi
# Phase 2: Claude Code(判断)
claude -p "raw_news.jsonを読んでランキング"
# Phase 3: Claude Code(生成 + デプロイ)
claude -p "新規atomsからGuide投稿を生成"シェルスクリプトの役割は3つです。
- ゲートキーパー: Pythonの結果が0件ならClaude Codeを起動しない
- コンテキスト分離: Phase 2とPhase 3を別セッションにする
- ログ管理: 各フェーズの開始・終了を記録し、問題の切り分けを容易にする
この設計で得られた具体的な効果
トークン消費の変化
1日7回のWebSearch込みフル起動から、1日3回の整理済みデータ読みに変わり、体感で半分以下になりました。
アウトプットの変化
ネタDBを中央ハブにしたことで、1つのネタからSEO記事・X投稿・note記事・Instagram投稿にも展開できるようになりました。
信頼性の変化
Pythonが「確実に情報を集める」、Claude Codeが「的確に判断する」。それぞれの強みが活きる設計です。
あなたが今日できること
「全部Claude Codeでやっている作業」を1つ思い浮かべてください。その中に「毎回同じ手順」の部分はありませんか?
あれば、それをPythonに切り出す。たったそれだけで、Claude Codeの起動回数が減り、トークン代が下がり、処理速度が上がります。
- Claude Codeに「この作業をPythonスクリプトにして」と頼む
- そのPythonスクリプトをcron/launchdで定時実行する
- 結果をJSONやCSVに吐き出す
- Claude Codeはそのファイルを読むところから始める
Claude Codeは優秀なシェフです。でもシェフに皿洗いはさせない。仕込みはPythonに任せて、Claude Codeには「味付け」に集中してもらう。
それが、私がたどり着いた最適解です。