AIを「部下」として使うという発想
Claude Codeを触っていて思った。これ、対話で使うより仕事を任せた方が強いんじゃないか。
「このファイル読んで」「ここ直して」みたいなやり取りも便利だけど、それはあくまでペアプロ。やりたかったのは丸投げだ。
- Issueを渡す
- 寝る
- 朝起きたらPRが上がってる
どういう仕組みか
全体の流れはこう。
Claude Codeと会話して方針を決める
↓
/create-task → GitHub Issue作成
↓
run-task.sh でバックグラウンド実行
↓
Claude Code が勝手に実装 → コミット → PR作成
↓
Discord通知が飛んでくる
↓
PRをレビューしてマージ
↓
依存タスクがあれば自動で次を実行
上司(自分)がやることは方針決めとレビューだけ。実装は部下(Claude Code)に任せる。
必要なもの
- Claude Code CLI
- GitHub CLI(
gh) - セルフホストのGitHub Actions Runner
- Discord Webhook(通知用)
仕組みの中身
カスタムスラッシュコマンドで「指示書」を標準化する
Claude Codeは ~/.claude/commands/ にMarkdownを置くとスラッシュコマンドとして使える。これを3つ作った。
/create-task — 会話から指示書(Issue)を作る
「README追加して」みたいな会話をした後に /create-task と打つと、会話の文脈を読み取って構造化されたIssueを自動生成する。
## Objective
何を達成するか
## Implementation Direction
どうやるか
## Acceptance Criteria
- [ ] 完了条件1
- [ ] 完了条件2
## Dependencies
- #13 must be completed first
/execute <番号> — Issueを自律実行する
Issueを読む → ブランチを切る → 実装 → コミット → PR作成 → Discord通知。全部自動。
重要なのは詰まったら止まるようにしてあること。
## When You Are Stuck
- Same error 3 times in a row → stop and notify
- Ambiguous requirement → stop and notify
- Need user decision → stop and notify
「わからなかったら聞け」というルールを明文化してある。
/setup-project — 新しいリポジトリの初期化
CLAUDE.md生成、GitHub Actionsワークフロー作成、ラベル作成、Webhook設定を一発でやる。新しいプロジェクトでもすぐ自動化を始められる。
バックグラウンド実行
対話的に /execute を使うこともできるけど、本番は run-task.sh。
# 1つ任せる
./run-task.sh 17
# 複数まとめて(順次)
./run-task.sh 13 14 15
# 並列で流す
./run-task.sh 13 14 15 --parallel
中身はClaude Codeのプロンプトモード(-p)を使って非対話的に実行している。
claude -p "/execute $ISSUE" \
--allowedTools "Edit,Write,Read,Glob,Grep,Bash,Agent" \
--max-turns "$MAX_TURNS" \
> "$LOG_FILE" 2>&1
GitHub Actionsで「中断→再開」と「タスクチェーン」
3つのワークフローを入れてある。
1. Issueコメントでタスク再開
Claude Codeが「ここ判断できません」とDiscordで聞いてきたら、GitHub Issueにコメントで回答する。するとGitHub Actionsが検知して自動で作業を再開する。
on:
issue_comment:
types: [created]
jobs:
resume:
if: |
contains(github.event.issue.labels.*.name, 'auto-task') &&
github.event.comment.user.login == github.repository_owner
runs-on: [self-hosted, claude]
上司はスマホからIssueにコメントするだけでいい。
2. pushごとにDiscord通知
task/* ブランチへのpushを検知してDiscordに飛ばす。
3. PRマージで次のタスクを自動実行
Issueに #13 must be completed first と書いておくと、#13のPRがマージされた時点で依存チェックして自動実行する。
#13 README英語版 → マージ
↓ 自動で
#14 README日本語版 → マージ
↓ 自動で
#15 アーキテクチャ図追加
安全装置は必須
部下に権限を渡すなら、やってはいけないことを明確にしておく必要がある。
Claude Codeの PreToolUse Hook で、Bashコマンド実行前に危険なパターンを検出・ブロックしている。
DANGEROUS_PATTERNS=(
"rm -rf /"
"git push.*--force"
"git reset --hard"
"DROP TABLE"
"curl.*|.*bash"
"shutdown"
# ...etc
)
for pattern in "${DANGEROUS_PATTERNS[@]}"; do
if echo "$COMMAND" | grep -qiE "$pattern"; then
echo "BLOCKED: dangerous command pattern detected" >&2
exit 2 # exit 2 = ブロック
fi
done
他にも:
-
--max-turns 40で実行ターン数を制限(無限ループ防止) -
--allowedToolsで使えるツールを明示的に制限
構成ファイルまとめ
~/.claude/
├── CLAUDE.md # グローバルルール
├── settings.json # Hook設定
├── commands/
│ ├── setup-project.md # /setup-project
│ ├── create-task.md # /create-task
│ └── execute.md # /execute
├── hooks/
│ └── safety-check.sh # 危険コマンドブロック
└── scripts/
└── run-task.sh # バックグラウンド実行
<project>/.github/workflows/
├── resume-task.yml # Issueコメントで再開
├── notify-progress.yml # push通知
└── run-next-task.yml # PRマージで次タスク実行
やってみてわかったこと
向いているタスク: 方針が明確で、受け入れ基準が具体的なもの。ドキュメント追加、テスト追加、定型的なリファクタリングなど。
向いていないタスク: 「いい感じにして」みたいな曖昧な指示。