Claude Codeで長めの作業をしていると、途中で会話が圧縮され、前の流れが少し薄く感じることがあります。作業中に、あとどれくらいコンテキストが残っているのか、コストがどれくらい積み上がっているのかを見られると安心です。Windows環境でステータスラインを設定する手順を、コピペで動く完成品と一緒に紹介します。
この記事でやること
Claude CodeにはstatusLineという設定項目があり、これにスクリプトを組み合わせると、ターミナルの下部にコンテキスト使用率・セッションの累積コスト・現在のGitブランチを、作業中に確認しやすい形で表示できる。
通常の作業中は、次のような情報をターミナル下部で確認できる。
[Sonnet] ctx: 34.2% | in: 12,450 / out: 3,210 | cost: $0.18 | branch: main
Windows環境(Git Bash)をメインルートにして、コピペで動く完成品スクリプトを配置→settings.jsonに1行追加→動作確認、の流れで進める。PowerShellでの代替手順も最後に載せる。
事前に必要なもの
手順に入る前に、以下が揃っていることを確認しておく。
Claude Code v2.1.6以降
ステータスラインのカスタマイズ機能はv2.1.6以降で利用できる。バージョンが古いと設定しても何も表示されない。
claude --version
出力に2.1.6以上のバージョン番号が含まれていれば大丈夫。
Git for Windows(Git Bash)
この記事はGit Bashをメインルートにする。Claude CodeをWindowsで使っているなら、Git for Windowsはすでに入っていることが多い。
git --version
バージョンが表示されればOK。
jq
JSONの解析に使うコマンド。後述のスクリプトが依存する。入っていない場合はwingetで導入できる。
jq --version
jq-1.7のような出力が出れば準備完了。出力がない(コマンドが見つからない)場合は、次のコマンドで入れる。
winget install jqlang.jq
インストール後、Git Bashを開き直してからjq --versionで確認する。
Windows 10 / 11
この記事はWindows環境前提で書く。Windows 10でも11でも手順は同じ。
メインルートの全体像
やることは大きく3ステップだ。
- スクリプトファイルを作る — Claude Codeから渡されるJSONを受け取って、見やすい形にフォーマットするbashスクリプトを配置する
settings.jsonに設定を追加する —statusLine設定にスクリプトのパスを指定する- Claude Codeを再起動して動作確認する — ステータスラインが表示されることを確認する
難しそうに見えるが、やっていること自体は「スクリプトを1個置いて、設定ファイルに1行足す」だけ。
Step 1: ステータスライン用スクリプトを作る
まずは完成品のスクリプトを配置する。中身の仕組みは後で触れる。
スクリプトの配置と権限設定
Git Bashを開いて、次のコマンドを順に実行する。
mkdir -p ~/.claude
cat > ~/.claude/statusline.sh << 'SCRIPT'
#!/usr/bin/env bash
# Claude Code Status Line Script
# stdin から JSON を読み取り、ステータスライン用の文字列を出力する
input=$(cat)
# モデル名
model=$(echo "$input" | jq -r '.model.display_name // "?"' 2>/dev/null)
# コンテキスト使用率
ctx_pct=$(echo "$input" | jq -r '.context_window.used_percentage // 0' 2>/dev/null)
# トークン数
in_tok=$(echo "$input" | jq -r '.context_window.total_input_tokens // 0' 2>/dev/null)
out_tok=$(echo "$input" | jq -r '.context_window.total_output_tokens // 0' 2>/dev/null)
# コスト
cost=$(echo "$input" | jq -r '.cost.total_cost_usd // 0' 2>/dev/null)
# Git ブランチ(リポジトリ内の場合のみ)
branch=$(echo "$input" | jq -r '.workspace.current_dir // empty' 2>/dev/null | xargs -I{} git -C {} branch --show-current 2>/dev/null)
branch_part=""
dir=$(echo "$input" | jq -r '.workspace.current_dir // empty' 2>/dev/null)
branch=""
if [ -n "$dir" ]; then
branch=$(git -C "$dir" branch --show-current 2>/dev/null)
fi
branch_part=""
if [ -n "$branch" ]; then
branch_part=" | branch: $branch"
fi
# 出力
printf "[%s] ctx: %s%% | in: %s / out: %s | cost: \$%s%s" \
"$model" "$ctx_pct" "$in_tok" "$out_tok" "$cost" "$branch_part"
SCRIPT
chmod +x ~/.claude/statusline.sh
配置されたことを確認する。
ls -l ~/.claude/statusline.sh
次のように実行権限(-rwxr-xr-xのx)が付いていればOK。
-rwxr-xr-x 1 user user 780 Apr 23 10:00 /c/Users/user/.claude/statusline.sh
スクリプトがやっていること
Claude Codeが起動中にstdin(標準入力)へJSONデータを流し込んでくるので、それをjqで必要な項目だけ抜き出して整形している。
抜き出している項目は次のとおり。
model.display_name— 現在のモデル名(例:Sonnet)context_window.used_percentage— コンテキストウィンドウの使用率(%)context_window.total_input_tokens— 入力トークンの累計context_window.total_output_tokens— 出力トークンの累計cost.total_cost_usd— セッションの累積コスト(USD)workspace.current_dir— 現在のディレクトリ(ここからGitブランチを取得)
スクリプト単体で動作確認する
本番前にダミーデータで試せる。
echo '{"model":{"display_name":"Sonnet"},"context_window":{"used_percentage":42.5,"total_input_tokens":8500,"total_output_tokens":2100},"cost":{"total_cost_usd":0.12},"workspace":{"current_dir":"/c/Users/user/myproject"}}' | ~/.claude/statusline.sh
次のように表示されればスクリプトは正常に動いている。
[Sonnet] ctx: 42.5% | in: 8500 / out: 2100 | cost: $0.12 | branch: main
(ディレクトリにGitリポジトリがあればbranch:が付く。なければ表示されない)
Step 2: settings.jsonに設定を追加する
続いて、Claude Codeの設定ファイルにstatusLineの項目を追加する。
設定ファイルの場所
Claude Codeの設定には、主に次の3種類がある。
| 種類 | パス | 適用範囲 |
|---|---|---|
| グローバル設定 | `~/.claude/settings.json` | すべてのプロジェクト |
| ローカル設定 | `.claude/settings.local.json`(プロジェクト直下) | 自分の環境だけ。通常はGit管理しない |
| プロジェクト設定 | `.claude/settings.json`(プロジェクト直下) | そのプロジェクトだけ |
ステータスラインはどのプロジェクトでも表示したいはずなので、グローバル設定(~/.claude/settings.json)に書くのが基本。
設定を追加する
まず現在の設定ファイルを確認する。
cat ~/.claude/settings.json
ファイルが存在しない場合は、空のJSONオブジェクトから始める。
echo '{}' > ~/.claude/settings.json
既存の設定がある場合は、statusLineの行を追加する。statusLineのキーはすでに存在するかもしれない。その場合は値を上書きする。
追加するのは次の1行(既存のJSON構造を崩さないよう注意)。
{
"statusLine": {
"type": "command",
"command": "bash ~/.claude/statusline.sh"
}
}
既に他の設定が入っている場合は、カンマで区切ってstatusLineを追加する。例えば次のような形。
{
"permissions": {
"allow": ["Bash(git:*)"]
},
"statusLine": {
"type": "command",
"command": "bash ~/.claude/statusline.sh"
}
}
注意: JSONの構文エラー(カンマの過不足、括弧の閉じ忘れ等)があると、Claude Codeが起動しなくなる。編集後は必ずJSONのバリデーションを通すこと。
jqが入っていればcat ~/.claude/settings.json | jq .で確認できる。エラーが出なければ構文は正しい。
Step 3: 動作確認する
設定が終わったらClaude Codeを再起動する。
再起動方法
起動中のClaude Codeがある場合は一度終了(Ctrl+Cまたは/exit)して、改めてclaudeコマンドで起動する。
確認方法
Claude Codeが起動すると、ターミナルの下部(ステータスライン領域)に次のような表示が出るはずだ。
[Sonnet] ctx: 2.1% | in: 320 / out: 85 | cost: $0.01 | branch: main
各項目の意味は次のとおり。
- モデル名 — 現在Claude Codeが使っているモデル
- ctx: N% — コンテキストウィンドウの使用率。セッションが進むにつれて増えていく
- in: N / out: N — 入力トークン数と出力トークン数の累計
- cost: $N — このセッションでの累積コスト(USD)
- branch: XXX — 現在のGitブランチ名(Gitリポジトリ内で作業している場合のみ表示)
起動直後はコンテキスト使用率が数%程度だが、会話が進むにつれて上がっていく。メッセージを送るたびに値がリアルタイムで更新されるのを確認してみる。
表示が出ない場合は「うまくいかない時のトラブルシューティング」を参照する。
うまくいかない時のトラブルシューティング
Windows環境でステータスラインを設定するときにつまずきやすいポイントを5つ挙げる。症状から原因を特定して解決する。
症状1: ステータスラインが全く表示されない
一番よくある原因はsettings.jsonの書き間違い。JSONのカンマ忘れや括弧の閉じ忘れがあると、Claude Codeが設定を読み込めずステータスラインが表示されない。
確認方法:
cat ~/.claude/settings.json | jq .
エラーメッセージが出た場合は、その箇所を修正する。jqがparse errorを出したら構文が壊れている。
もう一つの原因は、settings.jsonのパス間違い。~/.claude/settings.json(グローバル)に書いたつもりが、別の場所にファイルを作っている場合がある。
ls -la ~/.claude/settings.json
ファイルが存在することを確認する。
症状2: スクリプトが見つからないエラーが出る
Windowsのパス区切り文字(\と/)の違いが原因になることがある。settings.jsonにはbash ~/.claude/statusline.shとスラッシュで書く。
ls ~/.claude/statusline.sh
ファイルが存在しない場合は、Step 1の配置コマンドをもう一度実行する。
症状3: jqが見つからないというエラーが出る
スクリプトの中でjqを呼び出しているが、Git Bashの環境変数(PATH)にjqが含まれていない場合に発生する。
which jq
パスが表示されなければインストールが必要。
winget install jqlang.jq
インストール後、Git Bashを開き直す必要がある。開き直さないとPATHが反映されない。
症状4: モデル名やコンテキスト情報が空欄になる
Claude Codeのバージョンが古いと、stdinに渡されるJSONのフィールド構造が違う、あるいはフィールド自体が存在しないことがある。
claude --version
v2.1.6未満の場合はアップデートする。
npm update -g @anthropic-ai/claude-code
症状5: プロジェクト設定で上書きされている
グローバル設定(~/.claude/settings.json)に書いたのに反映されない場合、プロジェクト側の設定(.claude/settings.json)にstatusLineが定義されている可能性がある。優先順位は、ローカル設定、プロジェクト設定、グローバル設定の順に高い。グローバル設定に書いたのに反映されない場合は、.claude/settings.jsonだけでなく.claude/settings.local.jsonも確認する。
cat .claude/settings.json
statusLineの項目があった場合は、グローバル側に合わせるか、プロジェクト側の設定を使うか選ぶ。
表示をカスタマイズする
Step 1のスクリプトは、好みに合わせて表示内容やフォーマットを変えられる。
レート制限のプログレスバーを追加する
Claude Codeのstdinには、5時間および7日間のレート制限情報も含まれている。次のコードをスクリプトに追加すると、残り使用量をバーで表示できる。
# レート制限(5時間ウィンドウ)
rate_5h=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty' 2>/dev/null)
rate_bar=""
if [ -n "$rate_5h" ]; then
filled=$(awk "BEGIN { printf \"%d\", $rate_5h / 10 }")
empty=$((10 - filled))
hashes=$(printf '%*s' "$filled" '' | tr ' ' '#')
dashes=$(printf '%*s' "$empty" '' | tr ' ' '-')
rate_bar=" | rate5h: [${hashes}${dashes}] ${rate_5h}%"
fi
表示例:
[Sonnet] ctx: 42.5% | cost: $0.12 | rate5h: [####------] 40%
レート制限を気にする人は追加しておくと安心できる。
不要な情報を非表示にする
例えばトークン数が不要なら、スクリプト内のin_tokとout_tokの行と、printfの該当部分を削除するだけで消える。表示項目はスクリプトを1〜2行書き換えるだけで増減できる。
表示色の変更
ANSIカラーコードを使うと、ターミナルで色付き表示ができる。コンテキスト使用率が高くなったら赤くする、など。
# 使用率に応じた色分け
ctx_level=$(awk "BEGIN {
if ($ctx_pct >= 80) print \"high\";
else if ($ctx_pct >= 50) print \"mid\";
else print \"low\";
}")
if [ "$ctx_level" = "high" ]; then
ctx_color='\033[31m' # 赤
elif [ "$ctx_level" = "mid" ]; then
ctx_color='\033[33m' # 黄
else
ctx_color='\033[32m' # 緑
fi
reset_color='\033[0m'
この$ctx_colorと$reset_colorをprintfの該当箇所に挟むと、使用率に応じて色が変わる。ただし、ターミナルがANSIエスケープシーケンスに対応している必要がある。Git Bashは標準で対応している。
コンテキスト管理のコツ
ステータスラインを設定する目的の半分は、この「コンテキスト管理」にある。
なぜコンテキスト使用率を見るのか
Claude Codeは会話の履歴をコンテキストウィンドウに詰め込んでいる。セッションが長引くと使用率が上がり、コンテキスト使用率が高くなるとauto-compactが自動で発動する。auto-compactが動くと、それまでの会話の文脈が圧縮される。圧縮自体は必要な処理だが、タイミングが読めないと作業の途中で文脈が薄まる体験になる。
ステータスラインがあれば、使用率を自分の目で追える。
80〜90%のタイミングで/compactを実行する
コンテキスト使用率が80〜90%に達したら、自分のタイミングで/compactコマンドを実行するのが一つの目安。auto-compactに任せる前に圧縮しておくと、作業の区切りで文脈を整理できる。
[Sonnet] ctx: 87.3% | in: 42000 / out: 8500 | cost: $0.45 | branch: feature/add-statusline
この表示を見たら、今の作業の区切りが良いところで/compactを打つ。
/compact
実行すると使用率が下がる。
[Sonnet] ctx: 12.5% | in: 6200 / out: 8500 | cost: $0.45 | branch: feature/add-statusline
コストは累積なので変わらないが、コンテキスト使用率はリセットされる。このサイクルを繰り返すことで、auto-compactに突然圧縮されるリスクを減らせる。
コストの目安
ステータスラインのcostはセッション単位の累積。モデルやセッションの長さによって大きく変わるが、目安として数十セント〜数ドルの間を推移することが多い。気になる値になったら、新しいセッションを始めるか、/compactでコンテキストを絞ることでトークン消費を抑えられる。
PowerShellで動かしたい場合(代替手順)
Git Bashが使えない、あるいはPowerShellで統一したい場合は、PowerShell版のスクリプトでも動く。メインルートではないので、Git Bashで問題ない人はこのセクションは飛ばして構わない。
PowerShell版スクリプト
次の内容を$HOME\.claude\statusline.ps1として保存する。
# statusline.ps1 — PowerShell版ステータスラインスクリプト
$inputJson = [Console]::In.ReadToEnd()
$model = ($inputJson | ConvertFrom-Json -ErrorAction SilentlyContinue).model.display_name
if (-not $model) { $model = "?" }
$ctx = ($inputJson | ConvertFrom-Json).context_window.used_percentage
if (-not $ctx) { $ctx = 0 }
$inTok = ($inputJson | ConvertFrom-Json).context_window.total_input_tokens
$outTok = ($inputJson | ConvertFrom-Json).context_window.total_output_tokens
$cost = ($inputJson | ConvertFrom-Json).cost.total_cost_usd
if (-not $cost) { $cost = 0 }
$dir = ($inputJson | ConvertFrom-Json).workspace.current_dir
$branch = ""
if ($dir) {
try {
$branch = git -C $dir branch --show-current 2>$null
if ($branch) { $branch = " | branch: $branch" }
} catch {}
}
Write-Host "[$model] ctx: ${ctx}% | in: ${inTok} / out: ${outTok} | cost: `$$cost$branch" -NoNewline
PowerShell向けのsettings.json設定
settings.jsonのcommandをPowerShell用に変更する。
{
"statusLine": {
"type": "command",
"command": "powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/ユーザー名/.claude/statusline.ps1"
}
}
PowerShell実行ポリシーの確認
スクリプトが実行できない場合は、実行ポリシーの確認が必要。
Get-ExecutionPolicy
Restrictedになっている場合は、スクリプトの実行がブロックされている。次のコマンドで変更できる(管理者権限のPowerShellで実行)。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
RemoteSignedは、ローカルのスクリプトは実行を許可し、ダウンロードしたスクリプトは署名付きのみ許可するポリシー。セキュリティ的にもバランスが良い設定。
最後に確認すること
設定が完了したら、次のチェックリストを確認する。
- Claude Codeを起動したとき、ターミナル下部にステータスラインが表示される
- コンテキスト使用率(
ctx: N%)が数値で確認できる - コスト(
cost: $N)が数値で確認できる - Gitリポジトリ内で作業している場合、ブランチ名が表示される
すべて表示されていれば設定は完了。
次に試すこと
- 会話を進めて、コンテキスト使用率が80%を超えたら
/compactを試してみる - レート制限の表示を追加して、使用量の監視を強化する
- スクリプトの出力フォーマットを自分好みに調整する
- Claude Codeのステータスラインに渡せる全フィールドを確認したい場合は、スクリプトの
inputをファイルに書き出して中身を見ることもできる
まとめ
Claude CodeのstatusLine設定にスクリプトを1つ置くだけで、コンテキスト使用率・コスト・Gitブランチがターミナルに常時表示される。設定はスクリプトを~/.claude/に配置してsettings.jsonに1行追加するだけ。Windows環境ではGit Bashを使えばchmod +xで権限設定も問題なく通る。コンテキスト使用率を見ながら80〜90%のタイミングで/compactを実行する運用を覚えておくと、auto-compactに突然圧縮されるリスクを減らせる。
