Skip to content

原文(日本語に翻訳)

ステータスラインのコマンドが COLUMNS および LINES 環境変数を受け取るようになりました。これにより、スクリプトがターミナルの幅に合わせて出力をサイズ調整できます。

原文(英語)

Status line commands now receive COLUMNS and LINES environment variables so scripts can size output to the terminal width

概要

Claude Codeのステータスライン機能では、シェルスクリプトを使ってターミナル下部のステータスバーをカスタマイズできます。v2.1.153 以降、ステータスラインスクリプトの実行時に COLUMNS(ターミナルの列数)と LINES(ターミナルの行数)環境変数が自動的に設定されるようになりました。これにより tput colstput lines を使わずにスクリプト内でターミナルサイズを取得でき、出力をターミナル幅に合わせて動的に調整することが可能になります。

基本的な使い方

ステータスラインスクリプト内で $COLUMNS$LINES を直接参照できます:

bash
#!/bin/bash
# ~/.claude/statusline.sh

# ターミナル幅を使って出力を調整
MAX_WIDTH=$COLUMNS

# ブランチ名が長い場合は切り詰める
BRANCH=$(git branch --show-current 2>/dev/null || echo "no-git")
if [ ${#BRANCH} -gt 20 ]; then
  BRANCH="${BRANCH:0:17}..."
fi

echo "Branch: $BRANCH | Width: ${COLUMNS}cols"

設定ファイルでスクリプトを登録します:

json
{
  "statusLine": {
    "command": "~/.claude/statusline.sh"
  }
}

実践例

ケース1:ターミナル幅に応じてコンテキスト情報を切り替える

bash
#!/bin/bash
# ~/.claude/statusline.sh

BRANCH=$(git branch --show-current 2>/dev/null || echo "")
DIRTY=$(git diff --quiet 2>/dev/null || echo "*")

if [ "$COLUMNS" -ge 100 ]; then
  # 広いターミナル:詳細表示
  COMMIT=$(git log -1 --format="%h %s" 2>/dev/null | cut -c1-40)
  echo "Git: ${BRANCH}${DIRTY} | ${COMMIT}"
elif [ "$COLUMNS" -ge 60 ]; then
  # 中程度のターミナル:ブランチのみ
  echo "Git: ${BRANCH}${DIRTY}"
else
  # 狭いターミナル:最小表示
  echo "${BRANCH}${DIRTY}"
fi

ケース2:区切り線をターミナル幅に合わせて生成

bash
#!/bin/bash
# ~/.claude/statusline.sh

# ターミナル幅いっぱいの区切り線
SEPARATOR=$(printf '%*s' "$COLUMNS" '' | tr ' ' '-')

# ステータス情報
BRANCH=$(git branch --show-current 2>/dev/null || echo "no-git")
SESSION_INFO="Branch: $BRANCH"

echo "$SESSION_INFO"

ケース3:コスト情報とgit情報を幅に応じて表示

bash
#!/bin/bash
# ステータスラインスクリプト例

# stdin からセッションデータを読み込む
SESSION=$(cat)
TOKENS=$(echo "$SESSION" | jq -r '.tokenCount // 0' 2>/dev/null)
BRANCH=$(git branch --show-current 2>/dev/null || echo "")

# 利用可能な幅に応じて表示内容を調整
if [ "$COLUMNS" -ge 80 ]; then
  echo "Tokens: ${TOKENS} | Branch: ${BRANCH} | Cols: ${COLUMNS}"
else
  echo "T:${TOKENS} B:${BRANCH}"
fi

ケース4:マルチライン出力での活用

bash
#!/bin/bash
# 複数行にわたるステータス表示

LINE1_MAX=$((COLUMNS - 10))
BRANCH=$(git branch --show-current 2>/dev/null || echo "no-git")

# 1行目:ブランチ情報(幅制限あり)
printf "%-${LINE1_MAX}.${LINE1_MAX}s\n" "Branch: $BRANCH"

# 2行目:ターミナルサイズ情報
echo "Terminal: ${COLUMNS}x${LINES}"

注意点

  • COLUMNSLINES はClaude Codeが設定するため、スクリプト内で tput cols / tput lines を使う必要がなくなりました(ただし後者も引き続き動作します)
  • この機能はClaude Code v2.1.153 以降で利用できます
  • ステータスラインスクリプトはAPIトークンを消費しません
  • ターミナルのリサイズ時に COLUMNS / LINES が更新されるのは、スクリプトが再実行されたタイミングです。refreshInterval を設定しておくと定期的に反映されます
  • LINES はターミナル全体の行数であり、ステータスライン自体の高さではありません

関連情報