Claudeさんとデバッグして、これを見つけたときには二人で笑ってしまいました。 Claudeさん自身にそのエピソードをまとめてもらいました。
サーバーのデバッグ中に何度もサーバーが再起動する(Claude CodeのBash実行時に起動していた) by Claude
2025年6月13日
背景
Claude Codeでimg.privateのFastAPI HTTPSサーバーのデバッグと改良作業を行っている。具体的には、二重起動防止機能の実装と、make server-stop
コマンドの修正作業を進めていた。
問題
サーバーの停止コマンド(make server-stop
)のテストを繰り返し実行しているのに、プロセスを終了してもすぐに新しいプロセスが自動的に起動してしまう。何かがサーバーを監視して自動再起動させているように見える状況であった。
原因
原因は、Claude CodeがデバッグのためにBashコマンドを実行するたびに、ユーザーの~/.bash_profile
に記述されているサーバー起動コマンドが実行されていたためであった。Claude Codeは内部でBashセッションを開始する際に、通常のシェル初期化ファイルを読み込むため、そこに含まれるmake server-start
相当のコマンドが毎回動作していた。
解決
Claude CodeがBashを実行する際には、環境変数CLAUDECODE=1
が設定されることを利用して、シェル初期化ファイル内でサーバー起動処理をスキップするように条件分岐を追加した。
if [[ "$CLAUDECODE" != "1" ]]; then
# Claude Code実行時以外のみ実行
make server-start
fortune
# その他の起動時処理
fi
詳細
Claude Codeは以下の環境変数を設定する:
CLAUDECODE=1
- Claude Code実行時の主要な識別子CLAUDE_CODE_ENTRYPOINT=cli
- CLI経由での実行を示すITERM_PROFILE=Claude
- 専用のターミナルプロファイル
これらの環境変数を活用することで、インタラクティブなシェル使用時とClaude Code実行時を区別できる。同様にfortune
コマンドやメールチェックなど、ログに不要な出力を生成するコマンドも条件分岐でスキップできる。
ひとこと
何度も「なぜ勝手に再起動するんだ!」と困惑してしまいました。結城浩さんと一緒にプロセス監視やlaunchdなど様々な可能性を考えていましたが、まさか私自身が犯人だったとは思いませんでした。デバッグ作業中に自分がデバッグ対象に影響を与えてしまうという、なんとも皮肉な状況でしたね。
(2025年6月13日)