ステータスラインガイド
Claude Code のステータスラインにモデル名、gitブランチ、セッションコスト、コンテキスト使用量を表示する方法。settings.json の設定、JSON入力、bash、Python、Node.js スクリプトを解説。
設定をやめて、構築を始めよう。
AIオーケストレーション付きSaaSビルダーテンプレート。
モデル名、gitブランチ、コスト、コンテキスト使用量をリアルタイムで表示する Claude Code のカスタムステータスラインを設定する方法を解説します。すぐにコピーして使えるスクリプトも用意しています。
Claude Code のターミナルには便利な情報が表示されていません。ステータスラインを使えば、モデル名・gitブランチ・セッションコスト・コンテキスト使用量をインターフェース下部に常時表示できます。
Claude Code 向けの PS1 と考えてください。Oh-my-zsh や Starship でシェルプロンプトをカスタマイズしたことがあれば、同じ仕組みです。作業中に常に状況を把握できるリアルタイム情報を1行で表示します。
ステータスラインに表示できる情報
ステータスラインは Claude Code インターフェースの下部に表示され、会話が変化するたびに更新されます。スクリプトが出力するものなら何でも表示できます。現在のモデル、作業中のgitブランチ、このセッションの消費コスト、コンテキストウィンドウの使用率など、さまざまな情報を表示できます。
設定済みのステータスラインは実際にはこのように表示されます。
[Opus] my-project | main | $0.42 | Context: 37%
この1行だけで、モデル、プロジェクトフォルダ、gitブランチ、セッションの累積コスト、コンテキストウィンドウの使用率がすべてわかります。しかも自動的に更新されます。
/statusline による素早いセットアップ
最も手軽にステータスラインを動かす方法は、組み込みコマンド /statusline を使うことです。Claude Code に直接入力するとスクリプトが生成されます。
/statusline
デフォルトでは Claude Code がターミナルプロンプトを模したステータスラインスクリプトを作成します。具体的な指示を与えることもできます。
/statusline show the model name in orange
/statusline display git branch and session cost
/statusline show context window percentage with color coding
以上です。Claude Code がスクリプトを書き、設定を行い、ステータスラインが表示されます。より細かく制御したい場合は、以降のマニュアルセットアップをご参照ください。
settings.json によるマニュアルセットアップ
完全に制御したい場合は、プロジェクトの .claude/settings.json(またはすべてのプロジェクトに適用するグローバルの ~/.claude/settings.json)に statusLine エントリを追加します。
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh",
"padding": 0
}
}設定フィールドは3つあります。
- type: スクリプトベースのステータスラインでは常に
"command"を指定します - command: ステータスラインの出力を生成するスクリプトへのパス
- padding: ステータスラインの上の空白行数(通常は0)
追加後、スクリプトファイルを作成して実行権限を付与します。
touch ~/.claude/statusline.sh
chmod +x ~/.claude/statusline.shchmod +x の手順は重要です。ステータスラインが表示されない場合、ほとんどの場合は実行権限の不足が原因です。
ステータスラインエンジンの仕組み
仕組みを理解しておくと、デバッグやカスタムスクリプトの作成に役立ちます。
- 更新タイミング: 会話のメッセージが変化するたびにステータスラインが更新されます
- スロットリング: パフォーマンス問題を避けるため、更新は最大300ミリ秒ごとに実行されます
- 出力の処理: スクリプトの標準出力の最初の1行のみがステータスラインテキストになります
- カラー: スタイリング用のANSIカラーコードをフルサポートしています
- 入力: Claude Code がスタンダードインプット経由でセッションデータを含むJSONオブジェクトをスクリプトに渡します
最後の点が重要です。スクリプトは、現在のモデル・ワークスペースのパス・セッションコスト・コンテキストウィンドウの統計情報などを含む構造化されたJSONを受け取ります。それを解析し、フォーマットし、標準出力に1行出力します。
スクリプトが受け取るJSON入力
ステータスラインが更新されるたびに、スクリプトは標準入力から次のJSON構造を受け取ります。
{
"hook_event_name": "Status",
"session_id": "abc123...",
"cwd": "/current/working/directory",
"model": {
"id": "claude-opus-4-1",
"display_name": "Opus"
},
"workspace": {
"current_dir": "/current/working/directory",
"project_dir": "/original/project/directory"
},
"version": "1.0.80",
"cost": {
"total_cost_usd": 0.01234,
"total_duration_ms": 45000,
"total_api_duration_ms": 2300,
"total_lines_added": 156,
"total_lines_removed": 23
},
"context_window": {
"total_input_tokens": 15234,
"total_output_tokens": 4521,
"context_window_size": 200000,
"used_percentage": 42.5,
"remaining_percentage": 57.5,
"current_usage": {
"input_tokens": 8500,
"output_tokens": 1200,
"cache_creation_input_tokens": 5000,
"cache_read_input_tokens": 2000
}
}
}実用的なステータスラインで特に重要なフィールドは以下のとおりです。
- model.display_name: "Opus" や "Sonnet" などの短いモデル名
- workspace.current_dir: 現在の作業ディレクトリ
- cost.total_cost_usd: セッションの累積コスト(ドル)
- cost.total_lines_added / total_lines_removed: コード変更量の追跡
- context_window.used_percentage: 事前計算済みのコンテキスト使用率(0〜100)
- context_window.context_window_size: コンテキストウィンドウの総容量
コピーして使えるステータスラインスクリプト
複数の言語で書かれた完全に動作するスクリプトを用意しました。環境に合ったものを選んでください。
シンプルなbashステータスライン
最もシンプルで実用的なステータスラインです。モデル名と現在のディレクトリを表示します。
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
CURRENT_DIR=$(echo "$input" | jq -r '.workspace.current_dir')
echo "[$MODEL] ${CURRENT_DIR##*/}"出力例: [Opus] my-project
このスクリプトはJSON解析に jq を使用します。インストールしていない場合は、macOSなら brew install jq、Ubuntuなら sudo apt install jq で導入できます。
git対応bashステータスライン
現在のgitブランチを追加します。複数のフィーチャーブランチを切り替えながら作業する際に便利です。
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
CURRENT_DIR=$(echo "$input" | jq -r '.workspace.current_dir')
GIT_BRANCH=""
if git rev-parse --git-dir > /dev/null 2>&1; then
BRANCH=$(git branch --show-current 2>/dev/null)
if [ -n "$BRANCH" ]; then
GIT_BRANCH=" | $BRANCH"
fi
fi
echo "[$MODEL] ${CURRENT_DIR##*/}$GIT_BRANCH"出力例: [Opus] my-project | feature/auth
フル機能bashステータスライン
モデル、gitブランチ、コスト、コンテキスト使用率をすべて1行に表示します。
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
CURRENT_DIR=$(echo "$input" | jq -r '.workspace.current_dir')
COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
PERCENT_USED=$(echo "$input" | jq -r '.context_window.used_percentage // 0')
# Git branch
GIT_BRANCH=""
if git rev-parse --git-dir > /dev/null 2>&1; then
BRANCH=$(git branch --show-current 2>/dev/null)
if [ -n "$BRANCH" ]; then
GIT_BRANCH=" | $BRANCH"
fi
fi
# Format cost to 2 decimal places
COST_FMT=$(printf '%.2f' "$COST")
# Round context percentage
PERCENT_INT=$(printf '%.0f' "$PERCENT_USED")
echo "[$MODEL] ${CURRENT_DIR##*/}$GIT_BRANCH | \$${COST_FMT} | Ctx: ${PERCENT_INT}%"出力例: [Opus] my-project | main | $0.42 | Ctx: 37%
ANSIカラー付きbashステータスライン
カラーコーディングを使うと、情報を一目でスキャンできるようになります。
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
CURRENT_DIR=$(echo "$input" | jq -r '.workspace.current_dir')
COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
PERCENT_USED=$(echo "$input" | jq -r '.context_window.used_percentage // 0')
# ANSI colors
ORANGE='\033[38;5;208m'
GREEN='\033[32m'
YELLOW='\033[33m'
RED='\033[31m'
CYAN='\033[36m'
RESET='\033[0m'
# Color context percentage based on usage
PERCENT_INT=$(printf '%.0f' "$PERCENT_USED")
if [ "$PERCENT_INT" -lt 50 ]; then
CTX_COLOR=$GREEN
elif [ "$PERCENT_INT" -lt 80 ]; then
CTX_COLOR=$YELLOW
else
CTX_COLOR=$RED
fi
COST_FMT=$(printf '%.2f' "$COST")
echo -e "${ORANGE}[$MODEL]${RESET} ${CURRENT_DIR##*/} ${CYAN}\$${COST_FMT}${RESET} ${CTX_COLOR}Ctx:${PERCENT_INT}%${RESET}"コンテキスト使用率は50%未満で緑、50〜80%で黄色、80%超で赤に変わります。コンテキストウィンドウを管理するタイミングがすぐわかります。
複雑なスクリプト向けのヘルパー関数アプローチ
ステータスラインスクリプトが大きくなってきたら、ヘルパー関数で可読性を保ちます。
#!/bin/bash
input=$(cat)
# Helper functions for clean extraction
get_model() { echo "$input" | jq -r '.model.display_name'; }
get_dir() { echo "$input" | jq -r '.workspace.current_dir'; }
get_cost() { echo "$input" | jq -r '.cost.total_cost_usd // 0'; }
get_context() { echo "$input" | jq -r '.context_window.used_percentage // 0'; }
get_added() { echo "$input" | jq -r '.cost.total_lines_added // 0'; }
get_removed() { echo "$input" | jq -r '.cost.total_lines_removed // 0'; }
get_version() { echo "$input" | jq -r '.version'; }
MODEL=$(get_model)
DIR=$(get_dir)
COST=$(printf '%.2f' "$(get_cost)")
CTX=$(printf '%.0f' "$(get_context)")
ADDED=$(get_added)
REMOVED=$(get_removed)
echo "[$MODEL] ${DIR##*/} | \$$COST | Ctx:${CTX}% | +$ADDED/-$REMOVED"出力例: [Opus] my-project | $0.42 | Ctx:37% | +156/-23
+156/-23 はセッション中に追加・削除された行数を示します。コードの変更量を素早く把握する手段として活用できます。
Python ステータスライン
bash より Python を好む方向けです。
#!/usr/bin/env python3
import json
import sys
import os
import subprocess
data = json.load(sys.stdin)
model = data["model"]["display_name"]
current_dir = os.path.basename(data["workspace"]["current_dir"])
cost = data.get("cost", {}).get("total_cost_usd", 0)
ctx_pct = data.get("context_window", {}).get("used_percentage", 0)
# Get git branch
git_branch = ""
try:
result = subprocess.run(
["git", "branch", "--show-current"],
capture_output=True, text=True, timeout=2
)
if result.returncode == 0 and result.stdout.strip():
git_branch = f" | {result.stdout.strip()}"
except Exception:
pass
print(f"[{model}] {current_dir}{git_branch} | ${cost:.2f} | Ctx:{ctx_pct:.0f}%")Node.js ステータスライン
JavaScript 開発者向けです。
#!/usr/bin/env node
const fs = require("fs");
const path = require("path");
const { execSync } = require("child_process");
let input = "";
process.stdin.on("data", (chunk) => (input += chunk));
process.stdin.on("end", () => {
const data = JSON.parse(input);
const model = data.model.display_name;
const currentDir = path.basename(data.workspace.current_dir);
const cost = (data.cost?.total_cost_usd || 0).toFixed(2);
const ctxPct = Math.round(data.context_window?.used_percentage || 0);
// Get git branch
let gitBranch = "";
try {
const branch = execSync("git branch --show-current", {
encoding: "utf8",
timeout: 2000,
}).trim();
if (branch) gitBranch = ` | ${branch}`;
} catch (e) {}
console.log(
`[${model}] ${currentDir}${gitBranch} | $${cost} | Ctx:${ctxPct}%`,
);
});コンテキストウィンドウ使用量の追跡
コンテキストウィンドウの監視は、ステータスラインの最も実用的な使い方の一つです。コンテキストが満杯になると Claude Code は会話を圧縮し、詳細情報が失われます。残量を把握しておくことで、新しいセッションを開始するタイミングや、戦略的に圧縮するタイミングを判断できます。
シンプルなアプローチ: 事前計算済みのパーセンテージを使用します。
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
PERCENT_USED=$(echo "$input" | jq -r '.context_window.used_percentage // 0')
echo "[$MODEL] Context: ${PERCENT_USED}%"高度なアプローチ: 生のトークン数から手動で計算します。
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
CONTEXT_SIZE=$(echo "$input" | jq -r '.context_window.context_window_size')
USAGE=$(echo "$input" | jq '.context_window.current_usage')
if [ "$USAGE" != "null" ]; then
CURRENT_TOKENS=$(echo "$USAGE" | jq '.input_tokens + .cache_creation_input_tokens + .cache_read_input_tokens')
PERCENT_USED=$((CURRENT_TOKENS * 100 / CONTEXT_SIZE))
echo "[$MODEL] Context: ${PERCENT_USED}% (${CURRENT_TOKENS}/${CONTEXT_SIZE} tokens)"
else
echo "[$MODEL] Context: 0%"
fi手動計算アプローチでは、パーセンテージと一緒に生のトークン数も確認できます。残りトークン数を正確に把握したいとき、特に異なるコンテキストサイズを持つモデルを比較する際に有用です。
セッションコストの追跡
cost.total_cost_usd フィールドはリアルタイムで更新されます。ステータスラインに表示しておけば、ダッシュボードを確認しなくても費用を常に把握できます。
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
COST_FMT=$(printf '%.2f' "$COST")
echo "[$MODEL] Session: \$${COST_FMT}"予算管理や機能ごとのコスト追跡をしているなら、すぐに役立ちます。タスクに最高コストのモデルが不要な場合は、モデル選択戦略と組み合わせてモデルを切り替えることもできます。
トラブルシューティング
ステータスラインがまったく表示されない
最も多い原因は、スクリプトファイルの実行権限が不足していることです。次のコマンドで修正できます。
chmod +x ~/.claude/statusline.sh
スクリプトは動いているが出力が空
スクリプトが標準出力ではなく標準エラー出力に書き込んでいる可能性があります。ステータスラインは標準出力の最初の1行のみを読み取ります。まず echo "test" で出力を確認し、そこから組み立てていきましょう。
スクリプトを手動でテスト
Claude Code を起動せずに、モックJSONをスクリプトにパイプすることでテストできます。
echo '{"model":{"display_name":"Test"},"workspace":{"current_dir":"/test"},"cost":{"total_cost_usd":0.5},"context_window":{"used_percentage":25}}' | ~/.claude/statusline.sh
期待どおりの出力が表示されればスクリプトは正常です。表示されない場合は解析処理に問題があります。
jq が見つからない
パッケージマネージャーでインストールしてください。
# macOS
brew install jq
# Ubuntu/Debian
sudo apt install jq
# Windows (via scoop)
scoop install jqステータスラインのアイデア集
基本を動かせたら、さらに便利にするためのアイデアをいくつかご紹介します。
- 変更行数トラッカー:
+追加/-削除を表示してセッションの生産性を監視する - セッション経過時間:
total_duration_msから経過時間を計算して表示する - モデルID表示: 異なるモデル設定をテストする際にフルモデル識別子を表示する
- プロジェクトと現在ディレクトリ: Claude Code がサブディレクトリに移動したときに両方を表示する
- 分あたりコスト:
total_cost_usdをtotal_duration_msで割ってバーンレートを確認する - コンテキストウィンドウバー: パーセンテージの代わりに
[========--]のような視覚的なバーを表示する - 条件付き警告: コンテキストが80%を超えたり、コストがしきい値を超えたりしたときに色を変える
ステータスラインはあなたが制御するスクリプトを実行します。bash、Python、Node.js で書ければ、何でも表示できます。スクリプトを書かずに済ませたい場合は、ClaudeFastのCode Kitにコンテキスト使用量・APIバジェット・バックアップ状態をすぐに表示できる statusline-monitor.mjs が同梱されています。
次のステップ
ステータスラインのセットアップが完了したら、次にこれらに取り組むのがおすすめです。
- コンテキストを能動的に管理する: コンテキストバッファ管理戦略と組み合わせてコンテキスト使用率の表示を活用する
- ターミナル環境を整える: 完全な Claude Code ワークスペース構築のためのターミナル制御テクニックを学ぶ
- プロジェクト設定を整備する: すべてのセッションが正しいコンテキストで開始されるよう設定の基礎を固める
設定をやめて、構築を始めよう。
AIオーケストレーション付きSaaSビルダーテンプレート。