Skip to content

原文(日本語に翻訳)

現在のディレクトリがリンクされたgit worktree内にある場合に設定されるworkspace.git_worktreeをステータスラインのJSON入力に追加しました。

原文(英語)

Added workspace.git_worktree to the status line JSON input, set when the current directory is inside a linked git worktree

概要

ステータスラインコマンドに渡されるJSON入力に、新しいフィールドworkspace.git_worktreeが追加されました。現在作業しているディレクトリがgit worktree(リンクされた作業ツリー)内にある場合、このフィールドにworktreeのパスがセットされます。通常のディレクトリではnullとなるため、worktreeでの作業かどうかをステータスラインで視覚的に識別できるようになります。

基本的な使い方

ステータスラインコマンドはJSON入力をstdinで受け取ります。workspace.git_worktreeフィールドを使用して、worktree環境であることを表示できます。

bash
#!/bin/bash
# ~/.config/claude/statusline.sh
INPUT=$(cat)

# workspace.git_worktree の値を取得
WORKTREE=$(echo "$INPUT" | jq -r '.workspace.git_worktree // empty')

if [ -n "$WORKTREE" ]; then
  BRANCH=$(echo "$INPUT" | jq -r '.workspace.git_branch // "unknown"')
  WNAME=$(basename "$WORKTREE")
  echo "{\"text\": \"[worktree: $WNAME] $BRANCH\"}"
else
  BRANCH=$(echo "$INPUT" | jq -r '.workspace.git_branch // "unknown"')
  echo "{\"text\": \"$BRANCH\"}"
fi
json
{
  "statusLine": {
    "command": "~/.config/claude/statusline.sh"
  }
}

実践例

worktreeを識別する色分き表示

bash
#!/bin/bash
INPUT=$(cat)
WORKTREE=$(echo "$INPUT" | jq -r '.workspace.git_worktree // empty')
BRANCH=$(echo "$INPUT" | jq -r '.workspace.git_branch // "unknown"')

if [ -n "$WORKTREE" ]; then
  # worktree内はオレンジ色で表示
  WNAME=$(basename "$WORKTREE")
  echo "{\"text\": \"$BRANCH (WT: $WNAME)\", \"color\": \"orange\"}"
else
  echo "{\"text\": \"$BRANCH\", \"color\": \"green\"}"
fi

複数worktreeを使った並行開発の管理

git worktreeを使って複数のブランチを同時に開発している場合、どのworktreeで作業しているかをひと目で確認できます。

bash
# worktreeの作成例
git worktree add ../feature-auth feature/auth
git worktree add ../hotfix-123 hotfix/issue-123

# Claudeをworktree内で起動すると、
# ステータスラインに workspace.git_worktree が設定される
cd ../feature-auth
claude

ステータスラインJSON入力の全フィールド確認

デバッグ用に受信しているJSONを確認する:

bash
#!/bin/bash
# stdin のJSONをファイルに保存して内容を確認
INPUT=$(cat)
echo "$INPUT" > /tmp/claude-statusline-debug.json
echo "{\"text\": \"debug: see /tmp/claude-statusline-debug.json\"}"

JSONの構造例:

json
{
  "workspace": {
    "git_branch": "feature/my-feature",
    "git_worktree": "/home/user/projects/myrepo-feature",
    "cwd": "/home/user/projects/myrepo-feature/src"
  },
  "session": { ... }
}

注意点

  • workspace.git_worktreeは、現在のディレクトリがリンクされたworktreegit worktree addで作成)内にある場合のみ設定されます。メインのリポジトリディレクトリではnullになります。
  • フィールドがnullの場合の処理を適切に実装してください(上記例では// emptyでnullチェック)。
  • git worktreeを使用しない場合は、このフィールドを無視して問題ありません。

関連情報