Claude Codeを自動制御して自律開発するGoツール Sleepship

この記事は GMOインターネットグループ Advent Calendar 2025 12日目の記事です。

こんにちは。GMOペパボ株式会社のdaiです。今回、Claude Codeを自動制御してタスクを完全自律実行するGoツール「Sleepship」を作りました。

「毎回手動でプロンプト入力するの面倒だな…」という課題から開発し、自動リトライや再帰実行などの機能を実装しました。

この記事では、主要機能から実装のポイント、実践的な活用方法まで共有します。

はじめに

「寝る前にタスクリストを作っておけば、翌朝には実装が完了している」——そんな開発体験を実現してみませんか?

現代の開発者が直面する課題

現代のソフトウェア開発では、AIツールの活用が当たり前になってきました。特にClaude Code(Anthropic社のAIコーディングエージェント)は、コード生成からテスト、リファクタリングまで幅広く支援してくれる強力なツールです。

しかし、私は下記のような課題があると感じました。

手動操作の煩わしさ:

  • 毎回Claude Codeを起動してプロンプトを入力する必要がある
  • 複数のタスクを順次実行する際、前のタスクが完了するまで待機する必要がある
  • 夜間や休日に開発を進められない(手動操作が必要なため)

開発フローの非効率性:

  • タスクの実行結果を確認し、次のタスクを考える時間が必要
  • エラーが発生した際、原因を分析して修正プロンプトを作成する手間
  • 同じようなタスクパターンを毎回手動で実行する必要がある

そして、これらの課題を解決するために、完全自律型の開発支援ツールを作りました。

Sleepshipの誕生

本記事では、Claude Codeを自動制御し、タスクファイルから実装・テスト・検証までを完全自律で実行するGoツール「Sleepship」を紹介します。

https://github.com/daisuke0926dev/sleepship

Sleepshipという名前には、「寝ている間も開発が進む」という意味が込められています。

実装のポイントはexec.CommandによるClaude Codeの子プロセス制御です。失敗時の自動リトライ、段階的な開発を可能にする再帰実行、実行履歴管理などの機能を搭載しています。

Sleepshipとは

Sleepshipは、Claude Codeを自動制御してタスクを実行する開発支援ツールです。

基本的な開発フローはこのようになります:

タスクファイル作成 → コマンド実行 → AIが自律開発 → 自動検証 → 完成

主要機能:

  • タスクファイルからの自動実行
  • 失敗時の自動リトライ(デフォルト3回)
  • 再帰実行による段階的開発(調査→計画→実装)
  • 実行履歴の記録と統計表示

使い方

インストール

まずはリポジトリをクローンしてビルドしましょう:

git clone https://github.com/daisuke0926dev/sleepship.git
cd sleepship
go build -o bin/sleepship

基本的な使い方

タスクファイルを作成して実行するだけで動作します:

## タスク1: HTTPサーバー実装
基本的なHTTPサーバーを main.go に実装

### 確認
go build

## タスク2: テスト追加
HTTPハンドラーのユニットテストを追加

### 確認
go test ./...
./bin/sleepship sync tasks.txt

これだけで、Claude Codeがバックグラウンドで自律的に実装を開始します。

主要機能

Sleepshipに搭載されているそれぞれの機能について、詳しく見ていきましょう。

1. 自動リトライ機能

開発において、一度で完璧な実装ができることは稀です。テストの失敗、ビルドエラー、予期しない動作など、様々な問題が発生します。Sleepshipの自動リトライ機能は、これらの問題に自動的に対応します。

基本的な使い方

タスクが失敗しても、自動的に再試行します(デフォルト3回):

./bin/sleepship sync tasks.txt --max-retries 5

エラーを分析して修正し、再検証まで自動で実行します。リトライ回数は環境変数SLEEPSHIP_SYNC_MAX_RETRIESでも設定可能です。

リトライの仕組み

リトライ時には、前回のエラー情報がプロンプトに含まれます:

// リトライ時のプロンプト生成(簡略版)
func buildRetryPrompt(task Task, previousError string) string {
    return fmt.Sprintf(`
前回の実行でエラーが発生しました:
%s

このエラーを修正して、タスクを再実行してください。
`, previousError)
}

これにより、Claude Codeは前回の失敗原因を理解し、適切な修正を行えます。

実際の使用例

例えば、以下のようなタスクで型エラーが発生した場合:

## タスク1: API実装
RESTful APIを実装してください

### 確認
go build && go test ./...

1回目の実行:

  • APIを実装
  • ビルド時に型エラー発生 → 失敗

2回目の実行(自動リトライ):

  • 型エラーを分析
  • 修正を実施
  • ビルド成功、テスト実行 → 成功

このように、人間の介入なしで問題を解決できます。

リトライ回数の設定指針

プロジェクトの種類に応じて、適切なリトライ回数を設定しましょう:

  • 簡単なタスク(ファイル作成など): 1-2回
  • 通常のタスク(機能実装): 3-5回(デフォルト)
  • 複雑なタスク(大規模リファクタリング): 5-10回
  • 実験的なタスク: 10回以上

環境変数による設定

チームで統一した設定を使う場合、環境変数が便利です:

# .bashrc または .zshrc に追加
export SLEEPSHIP_SYNC_MAX_RETRIES=5

# これで毎回 --max-retries を指定する必要がなくなります
./bin/sleepship sync tasks.txt

2. 再帰実行(動的タスク生成)

タスク実行中に新しいタスクを動的生成できるため、調査→計画→実装のような段階的な開発フローを自動化できます。

なぜ再帰実行が必要なのか

通常のタスク実行では、すべてのタスクを事前に定義する必要があります。しかし、実際の開発では:

  • 調査してみないと何をすべきか分からないことがある
  • 実装の詳細は既存コードを見てから決める必要がある
  • 段階的に計画を立てたい場合がある

再帰実行は、これらの「動的な開発フロー」を実現します。

基本的な使用例

具体例を見てみましょう:

## タスク1: 既存API調査
既存APIを調査し、実装計画をtasks-impl.txtに出力

### 確認
test -f tasks-impl.txt

## タスク2: 実装実行
生成された計画を実行

### 確認
./bin/sleepship sync tasks-impl.txt && go test ./...

このタスクファイルを実行すると、Claude Codeは以下を自律的に実行します:

  • 既存コードを調査
  • 実装計画(新しいタスクファイル)を生成
  • 生成したタスクを自動実行
  • テストまで完了

無限再帰を防ぐため、再帰深度は最大3階層に制限しています。

実践的な使用パターン

パターン1: 調査 → 設計 → 実装

## タスク1: 既存システム調査
既存の認証システムを調査し、OAuth2.0追加の計画をtasks-oauth-plan.txtに出力

### 確認
test -f tasks-oauth-plan.txt

## タスク2: 設計実行
OAuth2.0の詳細設計をtasks-oauth-impl.txtに出力

### 確認
./bin/sleepship sync tasks-oauth-plan.txt

## タスク3: 実装とテスト
設計に基づいて実装を実行

### 確認
./bin/sleepship sync tasks-oauth-impl.txt && go test ./internal/auth/...

パターン2: 大規模タスクの自動分割

## タスク1: リファクタリング計画作成
レガシーコードを分析し、リファクタリング計画(10個程度のサブタスク)をtasks-refactor-steps.txtに出力

### 確認
test -f tasks-refactor-steps.txt

## タスク2: サブタスクの順次実行
生成されたサブタスクを実行

### 確認
./bin/sleepship sync tasks-refactor-steps.txt

このパターンでは、Claude Codeが自動的に:

  • レガシーコードを分析
  • 適切なサイズのサブタスクに分割
  • 分割されたタスクを順次実行

パターン3: 環境依存の動的対応

## タスク1: 環境調査と設定計画
現在の環境を調査し、必要な設定タスクをtasks-env-setup.txtに出力

### 確認
test -f tasks-env-setup.txt

## タスク2: 環境セットアップ実行
生成された設定タスクを実行

### 確認
./bin/sleepship sync tasks-env-setup.txt

開発環境によって必要な設定が異なる場合、Claude Codeが環境を調査して適切なタスクを生成します。

再帰深度の管理

Sleepshipは環境変数SLEEPSHIP_DEPTHで再帰深度を追跡します:

階層深度説明
1SLEEPSHIP_DEPTH=1メインタスクtasks.txt
2SLEEPSHIP_DEPTH=2動的生成された第1階層tasks-impl.txt
3SLEEPSHIP_DEPTH=3動的生成された第2階層tasks-detail.txt
4+エラー最大深度超過実行不可

深度超過時のエラーメッセージ:

最大再帰深度(3)に達しました。これ以上のsleepship実行はできません。

このように、調査結果に基づいた具体的なタスクが自動生成されます。

3. 実行履歴管理

すべてのタスク実行履歴を.sleepship/history.jsonに自動記録します。これにより、過去の実行を振り返り、問題の分析やパフォーマンスの改善に役立てられます。

履歴の表示

# すべての実行履歴を表示
./bin/sleepship history

# 最新5件のみ表示
./bin/sleepship history --last 5

# 失敗した実行のみ表示
./bin/sleepship history --failed

記録される情報

各実行について、以下の情報が記録されます:

{
  "task_file": "tasks-feature.txt",
  "start_time": "2025-12-09T10:00:00Z",
  "end_time": "2025-12-09T10:15:30Z",
  "duration": "15m30s",
  "status": "success",
  "total_tasks": 5,
  "completed_tasks": 5,
  "retry_count": 2,
  "branch": "feature/new-api",
  "error_message": ""
}

統計情報の活用

履歴表示時には統計情報も表示されます:

=== Execution History ===
Total executions: 50
Successful: 45 (90%)
Failed: 5 (10%)
Average duration: 12m30s
Total time spent: 10h25m

この情報から、以下のような分析ができます:

  • どのタスクが頻繁に失敗するか
  • 実行時間の傾向
  • リトライ回数の最適化

トラブルシューティングでの活用

失敗した実行を確認し、問題を特定:

# 失敗した実行を確認
./bin/sleepship history --failed

# 出力例
[FAILED] 2025-12-09 10:30 - tasks-api.txt
Duration: 5m20s
Error: go test ./... failed: undefined: User
Tasks: 2/5 completed
Branch: feature/api-v2

この情報を元に、失敗したタスクから再実行:

# タスク3から再実行
./bin/sleepship sync tasks-api.txt --start-from=3

4. エイリアス機能

よく使うコマンドをエイリアスとして登録できます。これにより、長いコマンドを短縮し、作業効率を向上させられます。

設定方法

プロジェクトディレクトリまたはホームディレクトリに.sleepship.tomlを作成:

[aliases]
dev = "sync tasks-dev.txt"
test = "sync tasks-test.txt --max-retries=5"
prod = "sync tasks-prod.txt --max-retries=10"
quick = "sync tasks-quick.txt --max-retries=1"

エイリアスの使用

# 通常のコマンドの代わりに
./bin/sleepship dev

# これは以下と同等
./bin/sleepship sync tasks-dev.txt

エイリアスの管理

# エイリアス一覧を表示
./bin/sleepship alias list

# 出力例
Available aliases:
dev -> sync tasks-dev.txt
test -> sync tasks-test.txt --max-retries=5
prod -> sync tasks-prod.txt --max-retries=10
quick -> sync tasks-quick.txt --max-retries=1

# 特定のエイリアスの詳細を表示
./bin/sleepship alias get dev

実用的なエイリアス例

環境別の実行:

[aliases]
local = "sync tasks-local.txt"
staging = "sync tasks-staging.txt --dir=/path/to/staging"
production = "sync tasks-prod.txt --dir=/path/to/prod --max-retries=10"

開発フェーズ別:

[aliases]
prototype = "sync tasks-prototype.txt --max-retries=3"
implement = "sync tasks-implement.txt --max-retries=5"
refactor = "sync tasks-refactor.txt --max-retries=7"
optimize = "sync tasks-optimize.txt --max-retries=5"

5. 環境変数による設定

環境変数を使用することで、実行環境ごとに異なる設定を適用できます。

サポートされる環境変数

環境変数説明デフォルト
SLEEPSHIP_PROJECT_DIRプロジェクトディレクトリカレントディレクトリ
SLEEPSHIP_SYNC_MAX_RETRIES最大リトライ回数3
SLEEPSHIP_SYNC_LOG_DIRログ出力ディレクトリ./logs
SLEEPSHIP_SYNC_START_FROM開始タスク番号1
SLEEPSHIP_CLAUDE_FLAGSClaude Codeフラグなし

使用例

CI/CD環境での設定:

# GitHub Actions
export SLEEPSHIP_PROJECT_DIR=/workspace
export SLEEPSHIP_SYNC_MAX_RETRIES=10
export SLEEPSHIP_SYNC_LOG_DIR=/logs

./bin/sleepship sync tasks-ci.txt

開発環境での設定:

# .bashrc または .zshrc に追加
export SLEEPSHIP_SYNC_MAX_RETRIES=5
export SLEEPSHIP_SYNC_LOG_DIR=~/sleepship-logs

# デフォルト設定で実行
./bin/sleepship sync tasks-dev.txt

一時的な設定変更:

# 特定の実行時のみ設定を変更
SLEEPSHIP_SYNC_MAX_RETRIES=10 ./bin/sleepship sync tasks-critical.txt

技術実装のポイント

Claude Codeの自動制御の仕組み

Sleepshipの核心部分は、exec.Commandを使ったClaude Codeの子プロセス制御です:

func executeTask(task Task) error {
    prompt := fmt.Sprintf(`
あなたは自律的にソフトウェア開発を行うエンジニアです。

# タスク
%s: %s

# 指示
1. このタスクを完全に実装してください
2. 実装後、必ず動作確認してください
`, task.Number, task.Title)

    cmd := exec.Command("claude", "--yes", prompt)
    return cmd.Run()
}

実装の工夫:

  • 構造化プロンプト: タスク内容を明確に伝達
  • --yesフラグ: ユーザー確認を省略し完全自動化
  • コンテキスト継承: リトライ時に前回のエラー情報を含める

ベストプラクティス

Sleepshipを効果的に活用するためのベストプラクティスを紹介します。

チーム開発での活用

1. タスクテンプレートの共有

チーム共通のタスクテンプレートを Git 管理:

templates/
├── tasks-feature-template.txt
├── tasks-refactor-template.txt
└── tasks-bugfix-template.txt

使用時にコピーして使う:

cp templates/tasks-feature-template.txt tasks-my-feature.txt
# tasks-my-feature.txt を編集
./bin/sleepship sync tasks-my-feature.txt

2. エイリアスの共有

.sleepship.toml を Git 管理してチーム全体で共有:

[aliases]
test = "sync tasks-test.txt"
lint = "sync tasks-lint.txt"
prototype = "sync tasks-prototype.txt --max-retries=5"

FAQ(よくある質問)

Q1: Sleepship を使うには Claude Code のライセンスが必要ですか?

A: はい、Sleepship は Claude Code(CLI版)を内部で使用するため、Claude Code が利用可能な環境が必要です。Claude Code は Anthropic の公式ツールとして提供されています。

Q2: タスクファイルはどこに保存すればよいですか?

A: プロジェクトのルートディレクトリに保存するのが推奨です。タスクファイル(tasks-*.txt)は .gitignore で除外することをお勧めします。ただし、チームで共有したいタスクテンプレートは Git 管理しても構いません。

Q3: 実行中のタスクを中断できますか?

A: はい、Ctrl+C で中断できます。中断した場合、次回は --start-from オプションで続きから再開できます。

./bin/sleepship sync tasks.txt --start-from=3

まとめ

Sleepshipは、タスクファイルから完全自律開発を実現するGoツールです。

主な技術的特徴:

  • exec.CommandによるClaude Codeの子プロセス制御
  • 自動リトライ機能(デフォルト3回、カスタマイズ可能)
  • 再帰実行による段階的開発フロー(最大3階層まで)
  • 実行履歴の自動記録とエイリアス機能

今すぐ試してみる:

git clone https://github.com/daisuke0926dev/sleepship.git
cd sleepship
go build -o bin/sleepship
./bin/sleepship sync tasks.txt

プログラミングは「書く」から「設計する」へ——AIと協働する開発の時代が、もう始まっています。

バグ報告や機能提案がありましたら、GitHub Issuesでお知らせください。お待ちしています!

ブログの著者欄

dai

GMOペパボ株式会社

プログラマ / 2021年9月GMOペパボ株式会社入社。業務基幹システムの開発に従事するほか、事業部の内部監査サポート業務に従事。

採用情報

関連記事

KEYWORD

TAG

もっとタグを見る

採用情報

SNS FOLLOW

GMOインターネットグループのSNSをフォローして最新情報をチェック