この記事は 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.gitcd sleepshipgo 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.txt2SLEEPSHIP_DEPTH=2動的生成された第1階層tasks-impl.txt3SLEEPSHIP_DEPTH=3動的生成された第2階層tasks-detail.txt4+エラー最大深度超過実行不可
深度超過時のエラーメッセージ:
最大再帰深度(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: 50Successful: 45 (90%)Failed: 5 (10%)Average duration: 12m30sTotal 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最大リトライ回数3SLEEPSHIP_SYNC_LOG_DIRログ出力ディレクトリ./logsSLEEPSHIP_SYNC_START_FROM開始タスク番号1SLEEPSHIP_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=5export 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.gitcd sleepshipgo build -o bin/sleepship./bin/sleepship sync tasks.txt
プログラミングは「書く」から「設計する」へ——AIと協働する開発の時代が、もう始まっています。
バグ報告や機能提案がありましたら、GitHub Issuesでお知らせください。お待ちしています!