はじめに
だいぶ長いこと、Claude Codeを使っているのですが、開発時にはコンテキスト超過することは少ない使い方をしているのですが、
実環境のエラー調査などを任せると、コードも見て、ログを探索して、DBを確認して。。。とコンテキストが長くなり、
ふとしたときにauto compactionで情報落ちてる。。。ということがしばしば起きるので、遅まきながらステータスラインでわかるようにしようと思いました。
シンプルにモデルとコンテキスト使用量、残りコンテキストが分かればと思い、以下イメージを目指します。
s完成イメージ:
Opus 4.6 │ Context: 11% (22K/200K) │ Remaining: 178K
また、Macでできた内容をそのままWindowsに持っていくとうまくいかなかったので、
Windowsでの設定も記載しています。
前提
- Claude Codeがインストール済みであること
-
jqがインストール済みであること(JSONパース用)
設定方法
Step 1: ステータスライン表示スクリプトの作成
~/.claude/statusline.sh を作成し、~/.claude配下に配置します。
#!/bin/bash
INPUT=$(cat)
MODEL=$(echo "$INPUT" | jq -r '.model.display_name // "--"')
USED_PCT=$(echo "$INPUT" | jq -r '.context_window.used_percentage // "--"')
REM_PCT=$(echo "$INPUT" | jq -r '.context_window.remaining_percentage // "--"')
CTX_SIZE=$(echo "$INPUT" | jq -r '.context_window.context_window_size // "--"')
# トークン数をK単位で表示するヘルパー
format_tokens() {
local t=$1
if [ "$t" = "--" ] || [ "$t" = "null" ]; then echo "--"; return; fi
echo "$((t / 1000))K"
}
# 使用トークン・残りトークンを計算
if [ "$CTX_SIZE" != "--" ] && [ "$CTX_SIZE" != "null" ] && [ "$USED_PCT" != "--" ] && [ "$USED_PCT" != "null" ]; then
USED_TOKENS=$((CTX_SIZE * USED_PCT / 100))
REMAINING=$((CTX_SIZE * REM_PCT / 100))
else
USED_TOKENS="--"
REMAINING="--"
fi
USED_K=$(format_tokens "$USED_TOKENS")
MAX_K=$(format_tokens "$CTX_SIZE")
REM_K=$(format_tokens "$REMAINING")
echo "${MODEL} │ Context: ${USED_PCT}% (${USED_K}/${MAX_K}) │ Remaining: ${REM_K}"
Step 2: 実行権限の付与
chmod +x ~/.claude/statusline.sh
Step 3: settings.json への設定追加
~/.claude/settings.json に statusLine セクションを追加します。
{
"statusLine": {
"type": "command",
"command": "cat | bash ~/.claude/statusline.sh"
}
}
Windows (MINGW64/Git Bash) 環境では cat | を除去して "command": "bash ~/.claude/statusline.sh" としてください。詳しくは後述。
設定後、Claude Codeを再起動すれば、画面下部にステータスラインが表示されます。
仕組みの解説
Claude Codeは statusLine に設定されたコマンドに対し、標準入力でJSON形式のセッション情報を渡します。
スクリプトはこのJSONを jq でパースして、表示用の文字列を標準出力に返します。
Claude Codeが渡すJSONの構造は以下のとおりです(実際のセッションから取得した例)。
{
"session_id": "xxx",
"cwd": "xxx",
"model": {
"id": "claude-opus-4-6",
"display_name": "Opus 4.6"
},
"version": "2.1.71",
"context_window": {
"total_input_tokens": 8,
"total_output_tokens": 776,
"context_window_size": 200000,
"current_usage": {
"input_tokens": 1,
"output_tokens": 8,
"cache_creation_input_tokens": 447,
"cache_read_input_tokens": 21233
},
"used_percentage": 11,
"remaining_percentage": 89
},
"cost": {
"total_cost_usd": 0.08,
"total_duration_ms": 50671,
"total_api_duration_ms": 19801
}
}
主要なフィールドの意味:
| フィールド | 説明 |
|---|---|
model.display_name |
使用中のモデル名 |
context_window.used_percentage |
コンテキストウィンドウの使用率(%) |
context_window.remaining_percentage |
コンテキストウィンドウの残り率(%) |
context_window.context_window_size |
コンテキストウィンドウの最大トークン数 |
cost.total_cost_usd |
セッションの累計コスト(USD) |
ハマりポイント
ステータスラインのスクリプトを作る際、最初は「トークン数に関するフィールドが直接JSONに含まれているだろう」と想定していました。
しかし実際にJSONの中身をデバッグ出力してみると、
提供されるのは以下の3つだけで、トークン数を直接示すフィールドは存在しませんでした。
-
context_window.used_percentage(使用率 %) -
context_window.remaining_percentage(残り率 %) -
context_window.context_window_size(最大トークン数)
そのため、使用トークン数と残りトークン数はパーセンテージから自分で計算する必要がありました。
USED_TOKENS=$((CTX_SIZE * USED_PCT / 100))
REMAINING=$((CTX_SIZE * REM_PCT / 100))
デバッグ時は以下のように標準入力のJSONをファイルに書き出すと、構造の確認に便利です。
# statusline.sh の先頭に追加
INPUT=$(cat)
echo "$INPUT" > /tmp/claude_statusline_debug.json
Windows (MINGW64/Git Bash) 環境での注意
Windows + Git Bash で、
上記の設定をそのまま適用したところ、ステータスラインの表示が以下のようになってしまいました。
│ Context: % (0K/0K) │ Remaining: 0K
原因は settings.json の command に指定した cat | bash ~/.claude/statusline.sh のパイプでした。
macOS/Linuxでは問題なく動作するこの書き方ですが、
Windows環境ではパイプラインの中間プロセスを経由する際に、Claude Codeが提供するstdinのファイルディスクリプタが失われてしまいます。
修正方法は cat | を除去してスクリプトを直接指定するだけです。
{
"statusLine": {
"type": "command",
"command": "bash ~/.claude/statusline.sh"
}
}
この変更により、Claude CodeがJSONをスクリプトのstdinに直接渡すようになり、正常に表示されるようになりました。
/statusline コマンドで簡単セットアップ
ここまで手動でスクリプトを書いて設定する方法を紹介しましたが、
実はClaude Codeには /statusline コマンドが組み込まれており、指示するだけでスクリプトの生成から設定の適用まで行ってくれます。
(Windowsのトラブルシューティングしている中で気づきました)
使い方
Claude Codeのプロンプトで /statusline に続けて表示したい内容を入力します。
/statusline モデル名やコンテキスト使用料を表示して
これだけで、Claude Codeが以下を自動的に行います。
- 表示用スクリプトの生成(
~/.claude/配下に配置) -
settings.jsonへのstatusLine設定の追加 - 設定の即時適用
まとめ
上記設定を入れることで必要なステータスラインを設定することが出来ました。
渡される情報だったり、そこから計算できる内容だったろであれば自由に出力できるので、
色々カスタマイズしてみてもらうといいのではと思います!