🚀 devtap
devtapは、ビルドや開発プロセスの出力を自動的にAIコーディングセッションに橋渡しします。devtap は、ビルドや開発コマンドの標準出力と標準エラー出力をキャプチャし、MCP(Model Context Protocol)を介してAIコーディングツールのセッションに送ります。また、同じ出力を複数のコーディングエージェントに配信することもできます。各エージェントは独自のコピーを消費するため、並列セッションは相互に干渉しません。
🚀 クイックスタート
インストール
go install github.com/killme2008/devtap/cmd/devtap@latest
またはHomebrewを使ってインストールすることもできます。
brew install killme2008/tap/devtap
あるいは、GitHub Releases からダウンロードしてください。
セットアップ
cd /path/to/your-project
devtap install --adapter claude-code
これにより、MCPサーバーが設定され、devtapの指示がプロジェクトの指示ファイル(例:CLAUDE.md)に挿入されます。利用可能なすべてのアダプターについては、サポートされているツール を参照してください。
スキル(オプション)
devtapには、MCPが利用できない場合にCLIのフォールバックとして機能する組み込みの スキル が付属しています。これをインストールすると、エージェントが必要に応じてビルド出力を取得できます。
mkdir -p ~/.claude/skills && cp -r skills/devtap-get-build-errors ~/.claude/skills/
mkdir -p ~/.codex/skills && cp -r skills/devtap-get-build-errors ~/.codex/skills/
または、リポジトリをクローンせずに直接取得することもできます。
DEST=~/.claude/skills/devtap-get-build-errors
mkdir -p "$DEST" && cd "$DEST"
for f in SKILL.md scripts/get_build_errors.sh; do
mkdir -p "$(dirname "$f")"
curl -sL "https://raw.githubusercontent.com/killme2008/devtap/main/skills/devtap-get-build-errors/$f" -o "$f"
done
chmod +x scripts/get_build_errors.sh
使用方法
ターミナルA — ビルド出力をキャプチャします。
devtap -- cargo check
devtap -- go build ./...
devtap --filter-regex "error|warning" -- npm run build
devtap -- npm run dev
ターミナルB — 通常通りAIコーディングツールを使用します。これにより、自動的に get_build_errors がMCPを介して呼び出され、キャプチャされたビルドエラーが取得されます。
MCPを使用せずに検証する場合は、以下のコマンドを実行します。
devtap drain
典型的な出力は次のようになります。
[devtap: cargo check] Build failed (exit code 101):
...
ヒント: devtapは任意のコマンドの標準出力をキャプチャするため、コーディングエージェントに任意のメッセージを送信することができます。
devtap -- echo "Please refactor the auth module to use JWT"
これにより、devtapは一般的な人→エージェントのメッセージチャネルになり、コピーアンドペーストは不要です。
✨ 主な機能
問題解決
バイブコーディングワークフローでは、1つのターミナルでAIコーディングツールを実行し、別のターミナルでビルドコマンドを実行します。エラーが発生した場合、手動でログをコピーしてコーディングセッションに貼り付ける必要があります。devtap はこのフィードバックループを自動化します。
特に苦痛な3つの一般的なケースがあります。
- 複数のローカル開発プロセス(フロントエンド + バックエンド + ワーカー)を監視し、迅速に修正する必要がある場合。
- 同じプロジェクトで複数のコーディングエージェントが動作しており、並列に同じ障害を分析し、結果を比較したい場合。
- リモートマシン(CI、開発ボックス)でのビルド/テスト実行の出力を、ローカルのコーディングエージェントにフィードバックする必要がある場合。
動作原理
ローカルモード(デフォルト、ファイルベース)
Terminal A (Claude Code) Terminal B (build/dev)
┌──────────────────┐ ┌────────────────────────────┐
│ MCP tool call: │ stdio │ devtap -- cargo check │
│ get_build_errors├─────────────┤ │
│ │ JSON-RPC │ captures stdout/stderr, │
│ receives errors,│ │ fans out to all adapters: │
│ fixes code │ │ ~/.devtap/<s>/claude-code/│
└──────────────────┘ │ ~/.devtap/<s>/codex/ │
└────────────────────────────┘
クロスマシンモード(GreptimeDB を使用)
Your laptop CI / remote build server
┌──────────────────┐ ┌────────────────────────────┐
│ Claude Code │ │ devtap -- make │
│ get_build_errors│ │ │
│ │ │ captures stdout/stderr │
│ receives errors,│ └─────────────┬──────────────┘
│ fixes code │ │ write
└────────┬─────────┘ ▼
│ drain ┌────────────────────────────┐
└───────────────────►│ GreptimeDB │
│ (shared session store) │
└────────────────────────────┘
devtap install でAIツールのMCPサーバーを設定します(クロスマシン設定の場合は --session と --store を渡します)。
devtap -- <cmd> でコマンドを実行し、標準出力と標準エラー出力をキャプチャし、登録されたすべてのアダプターに配信します。
- 各AIツールは
get_build_errors を介して独自のコピーを独立して消費します。
- AIはエラーを確認し、修正します。
mcp-serve/drain を明示的な --session または --store で起動すると、devtapは2つのソースからの出力を統合できます。
local:デフォルトのバックエンドから自動検出されたプロジェクトセッション
configured:明示的な --session/--store ターゲット
両方が同じバックエンド+セッションに解決される場合、devtapは単一のソースを使用します。それ以外の場合は、両方を排出し、同一のメッセージを重複排除し、ソース情報をタグに付けます(例:myhost/local |)。
📦 インストール
前述の通り、Goを使ったインストール、Homebrewを使ったインストール、GitHub Releasesからのダウンロードが可能です。
💻 使用例
基本的な使用法
devtap -- cargo check
高度な使用法
devtap --tag cargo-check -- cargo watch -x check
devtap --tag cargo-test --debounce 5s -- cargo watch -x test
📚 詳細ドキュメント
サポートされているツール
| ツール |
アダプター |
統合方法 |
設定ファイル |
指示ファイル |
| Claude Code |
claude-code |
MCPサーバー |
.mcp.json |
CLAUDE.md |
| Codex CLI |
codex |
MCPサーバー |
.codex/config.toml |
AGENTS.md |
| OpenCode |
opencode |
MCPサーバー |
opencode.json |
AGENTS.md |
| Gemini CLI |
gemini |
MCPサーバー |
.gemini/settings.json |
GEMINI.md |
| aider |
aider |
--lint-cmd ラッパー |
.devtap-aider-lint.sh |
CONVENTIONS.md |
任意のMCP互換ツールは、直接 devtap mcp-serve を使用できます。
自動ループモード(Claude Code)
Claude Codeは、エラーが残っている場合にClaudeの停止をブロックするStopフックをサポートしています。
devtap install --adapter claude-code --auto-loop --max-retries 5
これにより、以下が設定されます。
- オンデマンドのエラークエリー用のMCPサーバー
- ビルドエラーが保留中の場合にClaudeの終了をブロックするStopフック
- 停止を許可する前の最大5回のリトライの安全制限
ストレージバックエンド
ファイル(デフォルト)
~/.devtap/<session>/<adapter>/pending.jsonl に依存関係のないJSONLファイルが保存されます。各アダプターは独自のキューを持ち、独立して消費できます。並行性を保証するために原子的なリネームが行われます。
永続的な履歴、SQLベースのフィルタリング、より豊富な統計情報が必要な場合は、GreptimeDBを使用できます。リモートのGreptimeDBインスタンスを使用すると、ビルドとAIツールが同じマシン上にある必要さえありません。詳細については、クロスマシンビルド を参照してください。
GreptimeDBのインストールガイドについては、GreptimeDB installation guide を参照してください。
Dockerを使ったクイックスタート:
docker run -d \
--name greptime-devtap \
--restart unless-stopped \
-p 127.0.0.1:4000-4002:4000-4002 \
-v ~/.devtap/greptimedb_data:/greptimedb_data \
greptime/greptimedb:latest standalone start \
--http-addr 0.0.0.0:4000 \
--rpc-bind-addr 0.0.0.0:4001 \
--mysql-addr 0.0.0.0:4002
コンテナはバックグラウンドで実行され(-d)、Dockerとともに自動起動します(--restart unless-stopped)。-v フラグは、永続的なストレージのために ~/.devtap/greptimedb_data/ をマウントします。
cat > ~/.devtap/config.toml <<EOF
[store]
backend = "greptimedb"
[store.greptimedb]
endpoint = "127.0.0.1:4001"
mysql_endpoint = "127.0.0.1:4002"
database = "public"
EOF
devtap -- cargo check
devtap drain --filter-sql "content LIKE '%error%'"
devtap history --since 24h
devtap --store file -- cargo check
open http://127.0.0.1:4000/dashboard/#/dashboard/logs-query
環境変数を使った認証情報の設定:
export DEVTAP_GREPTIMEDB_USERNAME=...
export DEVTAP_GREPTIMEDB_PASSWORD=...
高度な使用方法
- 複数インスタンス —
--tag を使って、同じセッションに対して並行してウォッチャーを実行できます。
devtap --tag cargo-check -- cargo watch -x check
devtap --tag cargo-test --debounce 5s -- cargo watch -x test
- マルチアダプター配信 — 複数のAIツールがインストールされている場合、ビルド出力は自動的にすべてのツールに配信されます。各ツールは独自のコピーを独立して消費します。
- クロスマシンビルド — 共有の GreptimeDB インスタンスを使用すると、ビルドとAIツールを異なるマシンで実行できます。
--session を使って、両方の側に同じ論理的なセッション名を指定します。
devtap install --adapter claude-code --session myproject --store greptimedb
devtap --store greptimedb --session myproject -- make
devtap install は --session と --store フラグをMCP設定ファイル(例:.mcp.json)に書き込むため、AIツールのMCPサーバーは自動的に正しいGreptimeDBインスタンスとセッションに接続します。
複数のビルドマシンが同時に同じセッションに書き込むことができます。各エントリにはソースがタグ付けされ、AIツールはすべてのエントリを排出します。
- ローカル + リモートの統合排出 — ローカルのループとリモートの共有セッションを同時に表示できます。
devtap -- cargo check
devtap --store greptimedb --session myproject -- make
devtap install --adapter claude-code --store greptimedb --session myproject
devtap drain --store greptimedb --session myproject
devtap drain は統合されたヘッダー(Draining from N sources)を表示し、部分的な障害が発生した場合にソースが到達不能であることを警告し、到達可能なソースからの利用可能な出力を引き続き返します。
典型的な統合ヘッダー:
[devtap] Draining from 2 sources (2 reachable)
- セッション自動検出 —
--session auto(デフォルト)の場合、devtapはプロジェクトディレクトリを次のように解決します。
- Gitルート(
.git を持つ最も近い親ディレクトリ)
- プロジェクトマーカーファイル(
go.mod、package.json、pyproject.toml、Cargo.toml、pom.xml、build.gradle、build.gradle.kts、composer.json、Gemfile、setup.py のいずれかを持つ最も近い親ディレクトリ)
- 現在の作業ディレクトリ
- コマンドのチェーン —
devtap は -- の後の単一のコマンドをキャプチャします。&& などのシェル演算子が必要な場合は、コマンドをシェルでラップします。
devtap -- sh -c "npm install && npm run dev"
または、別々に実行します。
devtap -- npm install
devtap -- npm run dev
CLIリファレンス
devtap [flags] -- <command> [args...]
Flags:
-a, --adapter <name> AIツールアダプター(デフォルト "claude-code")
-s, --session <id> ターゲットセッション("auto"、"pick"、または明示的な名前)
--store <backend> ストレージバックエンド("file" または "greptimedb")
--filter-regex <pat> 出力行の正規表現フィルター
--filter-invert フィルターを反転する(一致する行を除外)
--max-lines <n> 排出ごとの最大行数(デフォルト 10000)
--tag <label> ログタグの接頭辞(デフォルト: コマンド名)
--debounce <dur> キャプチャされた出力のフラッシュ間隔(デフォルト "2s"、0で無効化)
Subcommands:
install AIツールの統合を設定する(--session と --store はMCP設定に転送されます)
mcp-serve MCP標準入出力サーバーを起動する
drain 保留中のメッセージを平文で読み取る
-q, --quiet ソース/タグヘッダーなしの生の出力
status 保留中のメッセージの数を表示する
-q, --quiet コンパクトな出力(保留中の数のみ)
history ビルドエラー履歴をクエリする(GreptimeDBのみ)
--since <dur> 時間範囲(デフォルト "24h")
--tag <label> タグでフィルターする
--limit <n> 最大エントリ数(デフォルト 20)
gc 期限切れのセッションデータを削除する(デフォルトのTTL: 7日)
--max-lines を超える行はスマートに切り捨てられます。先頭と末尾が保持され、省略通知が表示されます。連続する重複行は統合されます。
devtap mcp-serve と devtap drain は、前述のように複数のソース(ローカル + 設定済み)を集約できます。devtap drain --filter-sql は単一ソースモードで、--store greptimedb が必要です。
トラブルシューティング
- 出力がないがログが期待される場合: まず
devtap status を実行し、次に devtap drain --max-lines 200 を実行します。
- 予期しないセッションを使用している場合: 一度
--session pick を指定して実行し、ターゲットセッションを確認します。
- マルチソース排出で警告が表示される場合: 到達可能なソースは引き続き返されます。警告は、1つのソースが利用できないことを示しています。
- MCPツールが呼び出されない場合: プロジェクトルートで
devtap install --adapter <adapter> を再実行し、AIツールのセッションを再起動します。
セキュリティとプライバシー
- すべてのデータはローカルに留まります。 ビルド出力は、あなたのマシン上の
~/.devtap/(ファイルバックエンド)または自己ホスト型のGreptimeDBインスタンスに保存されます。外部サーバーには何も送信されません。
- MCP通信はローカルの標準入出力です。 MCPサーバーはAIツールの子プロセスとして実行され、標準入出力のJSON-RPCを介して通信します。ネットワークソケットは開かれません。
- テレメトリはありません。 devtapは使用データ、分析情報、またはクラッシュレポートを収集しません。
--filter-sql はセキュリティ境界ではありません。 尽力でキーワードブロックリストを含んでいますが、利便性を目的として設計されており、敵対的な入力に対応するものではありません。ユーザーはすでに完全なローカルおよびデータベースアクセス権を持っています。
- クリーンアップ:
devtap gc を実行して期限切れのセッションデータを削除するか、~/.devtap/ を完全に削除してすべての保存データを削除します。
📄 ライセンス
MIT