📝

ターミナルの標準出力をClaude Codeに単純に渡す

に公開

課題: コピペは嫌い

  1. ターミナルに出力されているエラーをコピペしてClaude Codeさんに貼り付け
  2. なんか微妙に固まる...🤔
  3. エラーを調査してくれるようにClaude Codeさんにお願い

という行動を3回ぐらい繰り返し、一旦手を止めてMCPを探しました

既存のMCPサーバーという選択肢

claudeさんに探してもらうと、ログ監視用のMCPが既に存在します

  • stdout-mcp-server: 標準出力をキャプチャ
  • PM-MCP (Process Manager MCP): プロセス管理とログ監視
  • docker-mcp: Dockerコンテナのログ取得

確かに便利そうなんですが、スターが5のOSSとかを使うのはなかなか勇気が必要ですね。
現状のコードが安全でも開発者に悪意がなくても、今後リスクが入り込む余地は十分にあります。
また業務では野良MCPの利用が制限されている環境も多いと思います。

解決策:シンプルなファイルログ方式

基本的な考え方:
ログをファイルに出力し、Claude Codeにはそのファイルを参照させます。
最小限の権限でログ監視が可能です。

Next.js など node で実行する場合

# 画面表示しながらサイズ制限付きログ保存(1000行を超えたら500行まで自動トリミング)
npm run dev 2>&1 | while read line; do
  echo "$line" | tee -a dev.log
  [ $(wc -l < dev.log) -gt 1000 ] && sed -i '1,500d' dev.log
done

package.json への統合

{
  "scripts": {
    "dev": "next dev",
    "dev:log": "npm run dev 2>&1 | while read line; do echo \"$line\" | tee -a dev.log; [ $(wc -l < dev.log) -gt 1000 ] && sed -i '1,500d' dev.log; done"
  }
}

Docker プロジェクトの場合

# Docker Compose
docker-compose logs -f 2>&1 | while read line; do
  echo "$line" | tee -a compose.log
  [ $(wc -l < compose.log) -gt 1000 ] && sed -i '1,500d' compose.log
done

Claude Codeへの指示方法

CLAUDE.md に以下を追記すると、Claude Code君が自動でログを確認してくれます:

# ログについて

## ログファイルの場所
- **開発サーバーログ**: `./dev.log` (Next.js)
- **Dockerログ**: `./compose.log` (Docker Compose)

## ログの確認方法
```bash
# 最新50行を確認
tail -50 ./dev.log

# エラーのみ抽出
grep -i "error" ./dev.log

# 警告も含む
grep -i -E "(error|warn|fail)" ./dev.log

# 特定の文字列を検索
grep -i "検索したい文字列" ./dev.log

実運用でのワークフロー

  1. 開発開始時にログ付き開発サーバー起動
  2. Claude Codeにログファイルの場所を伝達
  3. 問題発生時は「./dev.log を確認して」と指示、またはタスクの中でログの確認をさせる(コマンドに含める)
  4. Claude Codeが自動でログを解析・報告・修正

不安な気持ちを抱えながらMCPサーバーを使うより、単純なファイルログ方式の方が安全で確実だという結論になりました。Dockerの場合はコンテナの名前なども CLAUDE.md で明示しておくとログが探しやすくなります。
自身の健忘録としてもスクリプトを書き残しておきます。

Discussion