Claude Codeでどこまでできる?

Claude Codeの使い方や連携を、実際に試してわかりやすく伝えるサイト

Claude Codeのステータスラインを設定してコンテキスト・コスト・Git状態を見える化する方法

,
CC-056

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ステップだ。

  1. スクリプトファイルを作る — Claude Codeから渡されるJSONを受け取って、見やすい形にフォーマットするbashスクリプトを配置する
  2. settings.jsonに設定を追加するstatusLine設定にスクリプトのパスを指定する
  3. 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-xx)が付いていれば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 .

エラーメッセージが出た場合は、その箇所を修正する。jqparse 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_tokout_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_colorprintfの該当箇所に挟むと、使用率に応じて色が変わる。ただし、ターミナルが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.jsoncommandを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に突然圧縮されるリスクを減らせる。