Skip to content

修正:深いディレクトリの TMPDIR 設定でクロスセッションメッセージが失敗する問題

原文(日本語に翻訳)

CLAUDE_CODE_TMPDIR または $TMPDIR が深いディレクトリを指している場合にクロスセッションメッセージ(SendMessage)が無音で失敗する問題を修正しました。

原文(英語)

Fixed cross-session messaging (SendMessage) silently breaking when CLAUDE_CODE_TMPDIR or $TMPDIR points at a deep directory

概要

SendMessage ツールを使ったクロスセッションメッセージング機能は、内部的に一時ファイルを通じてセッション間の通信を行っています。CLAUDE_CODE_TMPDIR または $TMPDIR 環境変数が深いパス(パス長が長いディレクトリ)を指している場合、Unix ソケットのパス長制限(通常 108 文字)に引っかかり、無音で失敗していました。v2.1.162 でこの問題が修正されました。

基本的な使い方

bash
# 深いパスの TMPDIR を設定しても動作するようになった
export TMPDIR=/very/long/path/to/custom/temporary/directory/location
claude "セッション間でメッセージを送って"

実践例

カスタム TMPDIR を使った環境での動作確認

bash
# 深いパスの TMPDIR でも動作するようになった
export CLAUDE_CODE_TMPDIR=/home/user/projects/my-project/.tmp/claude-code-temp

# SendMessage を使ったクロスセッション通信
claude "バックグラウンドセッションに進捗を送って"

Docker/コンテナ環境での設定

dockerfile
# Dockerfile での設定
ENV TMPDIR=/workspace/tmp/claude

# または深いプロジェクトパス内でも動作
ENV CLAUDE_CODE_TMPDIR=/home/runner/work/project-name/project-name/.claude-tmp

CI/CD パイプラインでの活用

yaml
# GitHub Actions での設定例
env:
  CLAUDE_CODE_TMPDIR: ${{ github.workspace }}/.claude-tmp

steps:
  - name: Create tmp dir
    run: mkdir -p ${{ github.workspace }}/.claude-tmp
  
  - name: Run Claude Code
    run: claude "CI パイプラインのタスクを実行して"
    # 修正後: 深いワークスペースパスでも動作する

注意点

  • この問題は Unix ソケットのパス長制限(108 文字)が原因でした
  • CLAUDE_CODE_TMPDIR が設定されていない場合は $TMPDIR が使用され、それもない場合はデフォルトの /tmp が使用されます
  • パスが非常に長い環境(例: Docker のネストしたワークスペース)では引き続き注意が必要な場合があります
  • この修正により、長いパスの TMPDIR でも Socket のパスが短くなるよう自動的に処理されます

関連情報