「Claude Code でどう指示すれば、どのくらいのものが作れるのか」
そう気になっている方に向けて、自分が実際に行った実装をそのまま公開します。作ったのはスクリプトが失敗したときに Slack へ自動通知する仕組みです。Claude Code への指示文(プロンプト)・生成されたコード・かかった時間の目安を、省略なしでお見せします。
この記事で分かること:
- Claude Code にどんな指示を出したか(プロンプト全文)
- 実際に生成されたコード
- 「前提情報を先に渡す」指示パターンの重要性
- 自分のプロジェクトへの応用コツ
著者の立場: THINK YOU LAB の
agent-ops-monitor.py(運用監視スクリプト)に Slack 通知機能を Claude Code で追加しました。この記事はその実装記録です。
基本的なファイル操作がまだの方はこちら → Claude Code でファイルを読み書きさせる基本操作
何を作ったか — スクリプトが失敗したら Slack に飛ばす仕組み
完成イメージ
agent-ops-monitor.py が実行される
↓ 処理が正常に完了 → 何も起きない
↓ 例外が発生した場合
↓ notify_slack() が呼ばれる
↓ 環境変数 SLACK_WEBHOOK_URL に POST
↓ Slack の #ops-alert チャンネルに通知が届く
Slack にはこんなメッセージが届きます:
⚠️ エラー通知
スクリプト: agent-ops-monitor.py
エラー: [実際のエラーメッセージ]
時刻: 2026-04-15T10:30:00+00:00
事前準備 — Slack Incoming Webhook URL の取得
Claude Code に実装を任せる前に、Slack 側の設定が必要です。
Slack App の作成(最小手順)
- Slack API サイト にアクセス
- 「Create New App」→「From scratch」を選択
- App 名を入力し、対象のワークスペースを選択
- 「Incoming Webhooks」を有効化
- 「Add New Webhook to Workspace」→ 通知を送るチャンネルを選択
- 生成された Webhook URL をコピー
環境変数への設定
Webhook URL は絶対にコードに直書きしません。
# .env ファイル
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxxx/yyyy/zzzz# .gitignore に追加
.env
Claude Code への指示にも「.env の SLACK_WEBHOOK_URL を使うこと」と明示します。これを書かないと、Claude Code が URL をハードコードする実装を提案する場合があります。
Claude Code への指示(プロンプト全文)
ここが本記事のメインです。実際に使った指示文の形を公開します。
最初に渡したプロンプト
> @scripts/agent-ops-monitor.py を読んで。
> このスクリプトが例外(Exception)をキャッチしたとき、
> 環境変数 SLACK_WEBHOOK_URL に設定した URL に HTTP POST で通知を送る関数を追加して。
> 関数名は notify_slack とする。
> 通知メッセージには以下を含めること:
> - スクリプト名: agent-ops-monitor.py
> - エラーメッセージ: str(e)
> - タイムスタンプ: ISO 8601 形式
> 既存の except ブロックでこの関数を呼び出すように変更すること。
> requests ライブラリを使う。すでに requirements.txt にあるか確認してから追加すること。
> 変更内容を説明してから実行して。
ポイント: 最初に @ファイル名 でファイルを指定し、「読んで」と明示しています。ファイルを読まずに実装させると既存コードのスタイルや変数名を無視した実装になりやすいです。
Claude Code が返したこと
agent-ops-monitor.pyを読んで既存のexceptブロックの一覧を表示- 追加する
notify_slack()関数の説明 - 「実行してよいか確認」を求めてきた(指示に「説明してから実行して」を入れたため)
説明を確認して「実行して」と返すと、以下のコードが追加されました。
生成されたコード
import os
import requests
from datetime import datetime, timezone
def notify_slack(script_name: str, error_message: str) -> None:
"""スクリプトエラーを Slack に通知する"""
webhook_url = os.environ.get("SLACK_WEBHOOK_URL")
if not webhook_url:
print("[WARNING] SLACK_WEBHOOK_URL が設定されていません")
return
timestamp = datetime.now(timezone.utc).isoformat()
payload = {
"text": (
f":warning: *エラー通知*\n"
f"*スクリプト*: {script_name}\n"
f"*エラー*: {error_message}\n"
f"*時刻*: {timestamp}"
)
}
try:
response = requests.post(webhook_url, json=payload, timeout=10)
response.raise_for_status()
except requests.RequestException as e:
print(f"[ERROR] Slack 通知の送信に失敗しました: {e}")既存の except ブロックへの追加:
# 変更前
try:
run_monitor()
except Exception as e:
print(f"エラー: {e}")
# 変更後
try:
run_monitor()
except Exception as e:
print(f"エラー: {e}")
notify_slack("agent-ops-monitor.py", str(e))生成されたコードの解説
Slack に送るメッセージの構造
Slack の Incoming Webhook は {"text": "メッセージ"} という JSON を受け取ります。:warning: は Slack の絵文字記法、*スクリプト*: は太字マークダウンです。Slack API の仕様に合わせた書き方を Claude Code が自動的に選択しました。
エラーハンドリングの実装
notify_slack 関数自体がエラーになっても元のスクリプトが止まらないようにしています。通知が届かないことより、通知処理でスクリプトが止まる方が問題だからです。
if not webhook_url のチェックも重要です。Webhook URL が設定されていない環境(CI など)でも安全に動作します。
requirements.txt の更新
Claude Code は requirements.txt の存在を確認した上で requests を追加しました。「確認してから追加すること」という指示が効いています。
所要時間とコストの目安
作業時間の目安
| フェーズ | 所要時間(目安) | |---|---| | Slack App 設定・Webhook URL 取得 | 5〜10分 | | Claude Code への指示(1回目) | 2〜3分 | | コード確認・承認 | 2〜3分 | | テスト・動作確認 | 5〜10分 | | 合計 | 約15〜25分 |
API コストの目安
今回のような「既存ファイル1本を読んで関数を1つ追加する」タスクの場合:
- 入力トークン: 2,000〜5,000程度(ファイルサイズによる)
- 出力トークン: 500〜1,500程度
- 費用目安: $0.02〜$0.10程度(Claude Sonnet 4.6 使用時)
Claude Code の料金の全体感については「Claude Code と Cursor の違い」の料金比較セクションを参照してください。
Claude Code に指示するときのコツ(この実装で学んだこと)
前提情報を先に渡すと精度が上がる
今回の指示では最初に「@scripts/agent-ops-monitor.py を読んで」と伝えました。ファイルを読まずに実装させると、既存のコードスタイルや変数名を無視したコードが生成されやすいです。
良い例(前提ファイルを先に渡す):
> @scripts/agent-ops-monitor.py を読んで。
> このファイルに notify_slack 関数を追加して。
良くない例(前提なしで実装させる):
> Python で Slack に通知を送る関数を書いて
後者の場合、THINK YOU LAB のコードスタイルと合わない実装が返ってくる可能性があります。前者は Claude Code がファイルを読んで既存コードのスタイルに合わせた実装をしてくれます。
制約を明示すると意図しない変更を防げる
「.env の環境変数を使うこと」「requests.txt を確認してから追加すること」のように制約を明示することで、Claude Code が余計な変更をするのを防げます。
「説明してから実行して」でダブルチェック
変更内容を先に説明させる指示(「説明してから実行して」)を入れると、想定外の変更を事前に確認できます。特に本番コードを変更するときは有効です。
自分のプロジェクトへの応用
今回のパターン(既存ファイルを読んで → 関数を追加 → 既存コードに組み込む)は他の実装にも応用できます。
応用例:
- スクリプトのログを Slack に転送する
- API のレスポンスを定期的に Slack に投稿する
- GitHub Actions の失敗通知を Slack に送る
いずれも今回と同じプロンプトパターン(「@ファイル名を読んで → 追加する機能の仕様 → 制約 → 確認してから実行」)で対応できます。
まとめ
今回の実装で使ったプロンプトパターン:
> @[対象ファイル] を読んで。
> [追加する機能の仕様(具体的に)]
> [制約(環境変数を使う、他のファイルは触らないなど)]
> 変更内容を説明してから実行して。
このパターンを使うと:
- Claude Code が既存コードのスタイルに合わせた実装をしてくれる
- 意図しない変更(環境変数の直書きなど)を防げる
- 変更前に確認できるため安全
次のステップ:
「指示が雑だと何度もやり直しになる」というのを実感してきたら、プロンプトテンプレが効いてきます。実務で使っている Claude Code 操作プロンプト集を LINE で無料配布中です。
→ Claude Code 操作プロンプトテンプレ集を受け取る(LINE登録・無料)
LINE 公式アカウント
俺が実際に使っているプロンプト集を LINE で配布中