1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeを「部下」にしたら、寝てる間にPRが上がってくるようになった

1
Posted at

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マージで次タスク実行

やってみてわかったこと

向いているタスク: 方針が明確で、受け入れ基準が具体的なもの。ドキュメント追加、テスト追加、定型的なリファクタリングなど。

向いていないタスク: 「いい感じにして」みたいな曖昧な指示。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?