原文(日本語に翻訳)
ステータスラインのコマンドが COLUMNS および LINES 環境変数を受け取るようになりました。これにより、スクリプトがターミナルの幅に合わせて出力をサイズ調整できます。
原文(英語)
Status line commands now receive
COLUMNSandLINESenvironment variables so scripts can size output to the terminal width
概要
Claude Codeのステータスライン機能では、シェルスクリプトを使ってターミナル下部のステータスバーをカスタマイズできます。v2.1.153 以降、ステータスラインスクリプトの実行時に COLUMNS(ターミナルの列数)と LINES(ターミナルの行数)環境変数が自動的に設定されるようになりました。これにより tput cols や tput 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}"注意点
COLUMNSとLINESはClaude Codeが設定するため、スクリプト内でtput cols/tput linesを使う必要がなくなりました(ただし後者も引き続き動作します)- この機能はClaude Code v2.1.153 以降で利用できます
- ステータスラインスクリプトはAPIトークンを消費しません
- ターミナルのリサイズ時に
COLUMNS/LINESが更新されるのは、スクリプトが再実行されたタイミングです。refreshIntervalを設定しておくと定期的に反映されます LINESはターミナル全体の行数であり、ステータスライン自体の高さではありません