この記事は 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.txt2. 再帰実行(動的タスク生成)
タスク実行中に新しいタスクを動的生成できるため、調査→計画→実装のような段階的な開発フローを自動化できます。
なぜ再帰実行が必要なのか
通常のタスク実行では、すべてのタスクを事前に定義する必要があります。しかし、実際の開発では:
- 調査してみないと何をすべきか分からないことがある
- 実装の詳細は既存コードを見てから決める必要がある
- 段階的に計画を立てたい場合がある
再帰実行は、これらの「動的な開発フロー」を実現します。
基本的な使用例
具体例を見てみましょう:
## タスク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で再帰深度を追跡します:
| 階層 | 深度 | 説明 | 例 |
|---|---|---|---|
| 1 | SLEEPSHIP_DEPTH=1 | メインタスク | tasks.txt |
| 2 | SLEEPSHIP_DEPTH=2 | 動的生成された第1階層 | tasks-impl.txt |
| 3 | SLEEPSHIP_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=34. エイリアス機能
よく使うコマンドをエイリアスとして登録できます。これにより、長いコマンドを短縮し、作業効率を向上させられます。
設定方法
プロジェクトディレクトリまたはホームディレクトリに.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_FLAGS | Claude 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.txt2. エイリアスの共有
.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でお知らせください。お待ちしています!
ブログの著者欄
採用情報
関連記事
KEYWORD
CATEGORY
-
技術情報(532)
-
イベント(198)
-
カルチャー(54)
-
デザイン(52)
TAG
- "eVTOL"
- "Japan Drone"
- "ロボティクス"
- "空飛ぶクルマ"
- 5G
- Adam byGMO
- AdventCalender
- AGI
- AI
- AI人財
- APT攻撃
- AWX
- BIT VALLEY
- Blade
- blockchain
- Canva
- ChatGPT
- ChatGPT Team
- Claude Team
- cloudflare
- cloudnative
- CloudStack
- CM
- CNDO
- CNDT
- CODEBLUE
- CODEGYM Academy
- ConoHa
- ConoHa、Dify
- CS
- CSS
- CTF
- DC
- design
- Designship
- Desiner
- DeveloperExper
- DeveloperExpert
- DevRel
- DevSecOpsThon
- DiceCTF
- Dify
- DNS
- Docker
- DTF
- Excel
- Expert
- Experts
- Felo
- GitLab
- GMO AIR
- GMO AIロボティクス大会議&表彰式
- GMO DESIGN AWARD
- GMO Developers Day
- GMO Developers Night
- GMO Developers ブログ
- GMO Flatt Security
- GMO GPUクラウド
- GMO Hacking Night
- GMO kitaQ
- GMO SONIC
- GMOアドパートナーズ
- GMOアドマーケティング
- GMOイエラエ
- GMOインターネット
- GMOインターネットグループ
- GMOクラウド]
- GMOグローバルサイン
- GMOサイバーセキュリティbyイエラエ
- GMOサイバーセキュリティ大会議
- GMOサイバーセキュリティ大会議&表彰式
- GMOソリューションパートナー
- GMOデジキッズ
- GMOブランドセキュリティ
- GMOペイメントゲートウェイ
- GMOペパボ
- GMOメディア
- GMOリサーチ
- GMO大会議
- Go
- GPU
- GPUクラウド
- GTB
- Hardning
- Harvester
- HCI
- iOS
- IoT
- ISUCON
- JapanDrone
- Java
- JJUG
- K8s
- Kaigi on Rails
- Kids VALLEY
- KidsVALLEY
- Linux
- LLM
- MCP
- MetaMask
- MySQL
- NFT
- NVIDIA
- NW構成図
- NW設定
- Ollama
- OpenStack
- Perl
- perplexity
- PHP
- PHPcon
- PHPerKaigi
- PHPカンファレンス
- Python
- QUIC
- Rancher
- RPA
- Ruby
- Selenium
- Slack
- Slack活用
- Spectrum Tokyo Meetup
- splunk
- SRE
- sshd
- SSL
- Terraform
- TLS
- TypeScript
- UI/UX
- vibe
- VLAN
- VS Code
- Webアプリケーション
- WEBディレクター
- XSS
- アドベントカレンダー
- イベントレポート
- インターンシップ
- インハウス
- オブジェクト指向
- オンボーディング
- お名前.com
- カルチャー
- クリエイター
- クリエイティブ
- コーディング
- コンテナ
- サイバーセキュリティ
- システム研修
- スクラム
- スペシャリスト
- セキュリティ
- ソフトウェアテスト
- チームビルディング
- デザイン
- ドローン
- ネットのセキュリティもGMO
- ネットワーク
- ビジネス職
- ヒューマノイド
- ヒューマノイドロボット
- プログラミング教育
- ブロックチェーン
- ベイズ統計学
- マルチプレイ
- ミドルウェア
- モバイル
- ゆめみらいワーク
- リモートワーク
- レンタルサーバー
- ロボット
- 京大ミートアップ
- 人材派遣
- 出展レポート
- 動画
- 協賛レポート
- 基礎
- 多拠点開発
- 大学授業
- 宮崎オフィス
- 展示会
- 広告
- 形
- 応用
- 情報伝達
- 技育プロジェクト
- 技術広報
- 技術書典
- 採用
- 採用サイトリニューアル
- 採用活動
- 新卒
- 新卒研修
- 日本科学未来館
- 映像
- 映像クリエイター
- 暗号
- 業務効率化
- 業務時間削減
- 機械学習
- 決済
- 物理暗号
- 生成AI
- 色
- 視覚暗号
- 開発生産性
- 開発生産性向上
- 階層ベイズ
- 高機能暗号
PICKUP
-
Claude Codeを自動制御して自律開発するGoツール Sleepship
技術情報
-
DynamoDB設計で痛い目にあった話 – RDB脳から抜け出すための実践ガイド
技術情報
-
【協賛レポート・後編】Designship 2025|“勝つデザイン”と“やさしいデザイン”──現場から見えたこれからの指針
デザイン
-
説明が可能なプロダクトセキュリティについての一考察
技術情報
-
「ユーザー目線」を習得する!UI/UX向上業務に初めて取り組んだビギナーがニールセンの10原則を「調査・改善提案の指針」にした話
技術情報
-
「LLMにファイルとプロンプトを投げるだけ」では失敗する。Excelデータ抽出に学ぶコンテキストエンジニアリングの勘所
技術情報