Claude Code の statusline(ステータスライン)設定|/statusline・JSON 項目・Git や使用制限の表示例
Claude Code の statusline(ステータスライン)の設定方法を、公式ドキュメントで確かめた最新仕様で解説します。/statusline での自動生成、settings.json の statusLine の書き方、スクリプトが受け取る JSON の全項目、コンテキスト使用率・5時間/週の使用制限・Git ブランチ・費用を出すコピペ例(bash+jq・Python・PowerShell)、ccstatusline・ccusage、表示されないときの確認点までまとめました。

Claude Code の statusline(ステータスライン) は、入力欄の下に自分で決めた情報を1〜数行で表示し続ける機能です。いまのモデル、コンテキストの使用率、5時間・週の使用制限の消費、Git のブランチ、セッションの費用の目安などを、コマンドを打たずに常に確認できます。
設定のしかたは2通りあります。いちばん手早いのは、Claude Code の中で /statusline コンテキストの使用率をバーで出して のように頼む方法で、スクリプトの作成と settings.json の書き換えを Claude Code が済ませてくれます。自分で書く場合は、~/.claude/settings.json に statusLine を足し、標準入力で JSON を受け取って1行を出力するスクリプトを指定します。
本記事の情報について:2026年10月21日時点の Claude Code 公式ドキュメント(Customize your status line、Settings reference の statusLine、Commands、Settings)と CHANGELOG(最新は v2.1.305)にもとづいています。記事中の bash と Python のスクリプトは、編集部が macOS(bash 3.2・jq 1.7・Python 3.14)で公式の JSON 例と同じ形のサンプルを標準入力に渡し、出力を確かめたものです。Windows の例は公式ドキュメントの例をそのまま載せており、編集部は Windows の実機では動かしていません。
この記事を読むとわかること
- statusline が動くしくみと、表示が更新されるタイミング
/statuslineで自動生成する方法と、settings.jsonに手で書く方法- スクリプトが受け取る JSON の項目一覧と、項目が無い・null になる条件
- コンテキスト使用率・5時間/週の使用制限・Git ブランチ・費用を出すコピペ例と、その実際の出力
- Windows(PowerShell・Git Bash)での書き方
- ccstatusline・ccusage など既製ツールとの使い分け
- 表示されない・値がおかしいときの確認点
状況別の読み分け早見表
statusline でやりたいことは人によって違うので、自分の状況に近い行から読み進めてください。
| 当てはまる状況 | 次に読むセクション・アクション |
|---|---|
| とにかく早く何か表示させたい | 「/statusline に頼んで作らせる」を読み、1行の指示で作らせる |
| コンテキストがあと何%残っているか常に見たい | 「コンテキストの使用率をバーと色で出す」をコピーする |
| 5時間・週の使用制限に突然止められたくない | 「5時間・週の使用制限とリセット時刻を出す」をコピーする(Pro・Max のみ) |
| Git のブランチや費用もまとめて見たい | 「2行でまとめて出す」をコピーする |
| Windows で使っている | 「Windows(PowerShell・Git Bash)での書き方」を読む |
| スクリプトを書かずに見た目を整えたい | 「既製ツールを使う」で ccstatusline などを比べる |
| 設定したのに何も出ない | 「表示されない・値がおかしいときの確認点」を上から順に確かめる |
statusline(ステータスライン)とは:入力欄の下に好きな情報を出し続ける
statusline は、Claude Code が設定したコマンドを実行し、その出力をそのまま入力欄の下に表示する機能です。 Claude Code はセッションの状態を JSON にまとめてスクリプトの標準入力に渡し、スクリプトが標準出力に書いた文字を、組み込みのフッター表示とは別の行に並べます(出典: Customize your status line)。
表示する内容は自分で決められるので、Claude Code が持っている情報(モデル名、コンテキストの使用率、費用の目安、使用制限の消費など)と、シェルで取れる情報(Git のブランチ、時刻、ほかのコマンドの結果など)を自由に組み合わせられます。
公式ドキュメントでは次の点も明記されています。導入前に知っておくと、表示が消えたときに慌てずに済みます。
- API のトークンは消費しません。 スクリプトは手元のマシンで動くだけで、モデルへの問い合わせは発生しません。
- ヘルプメニューや権限の確認が出ている間は、一時的に隠れます。
- カスタムの statusline を設定すると、フッターのキー操作の案内(
esc to interruptなど)の多くが表示されなくなります。 案内が見えなくなるだけで、組み込みのフッターの表示が置き換わるわけではありません。
表示が更新されるタイミング
statusline は常に動き続けているわけではなく、決まったきっかけでスクリプトを実行し直します。公式ドキュメントに書かれているきっかけは次のとおりです。
- セッションの開始時(再開したときを含む)
- 新しいアシスタントの応答が届いたとき
/compactが終わったとき- 権限モードが変わったとき
- vim モードを切り替えたとき
statusLineのcommandを書き換えたときrefreshIntervalを設定していて、その秒数が経ったとき- 前回受け取った使用制限の枠が
resets_atの時刻に達したとき - 前回受け取ったプロンプトキャッシュが
expires_atの時刻に達したとき
短い間に何度も変化があった場合は 300ミリ秒の待ち時間でまとめて1回だけ実行され、スクリプトの実行中に次の更新が来ると、実行中のスクリプトは止められます。このため、遅いスクリプトほど表示が古いまま残りやすい点に注意が必要です(出典: When the status line updates、2026年10月時点)。スクリプトを書き直したときは、次のきっかけが来るまで表示は変わりません。一方で command 自体を書き換えたときは待ち時間なしですぐ実行されます。
注意したいのは、Claude Code が待機している間はきっかけが来ないことです。時計を出したい場合や、バックグラウンドのサブエージェントが Git の状態を変える使い方をする場合は、refreshInterval(最小1秒)で一定間隔の再実行を足すよう公式ドキュメントが勧めています。
スクリプトが出力できるもの
1回の echo(Python なら print)が1行になるので、複数行の表示もできます。ANSI のエスケープシーケンス(\033[32m で緑など)を使えば色を付けられ、OSC 8 のエスケープシーケンスを使えば Cmd(Windows・Linux は Ctrl)+クリックで開けるリンクも出せます。リンクは iTerm2・Kitty・WezTerm のように対応したターミナルが必要で、macOS 標準の Terminal.app はクリックできるリンクに対応していません。
ターミナルの幅に合わせて表示を変えたいときは、スクリプトの中で tput cols を使っても正しい幅は取れません。Claude Code が出力を受け取る形で実行しているためで、代わりに Claude Code が設定する環境変数 COLUMNS と LINES を読みます。
設定は2通り:/statusline で作らせるか、settings.json に書くか
最初の1本は /statusline に作らせ、細かい調整は生成されたスクリプトを直接編集するのが早道です。 どちらの方法でも、最終的には settings.json の statusLine にスクリプトが登録されるという同じ形になります。
/statusline に頼んで作らせる
Claude Code のセッションで /statusline に続けて、表示したい内容を日本語か英語で書きます。
/statusline モデル名とコンテキストの使用率をプログレスバーで表示して
Claude Code が ~/.claude/ にスクリプトを作り、設定ファイルも書き換えます。途中でファイル編集の許可を求められたら承認してください。引数なしで /statusline だけを実行すると、いま使っているシェルのプロンプトの設定をもとに自動で作られます(出典: Commands)。
やめたいときは /statusline delete や /statusline clear のように頼むか、settings.json から statusLine を消します。
settings.json に自分で書く
手で設定する場合は、ユーザー設定の ~/.claude/settings.json に statusLine を足します。type は "command" で固定、command にスクリプトのパスか、シェルで実行できる1行のコマンドを書きます。
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh",
"padding": 2
}
}
スクリプトを作らず、command に jq の1行を直接書くこともできます。次は公式ドキュメントの例で、モデル名とコンテキストの使用率を出します。
{
"statusLine": {
"type": "command",
"command": "jq -r '\"[\\(.model.display_name)] \\(.context_window.used_percentage // 0)% context\"'"
}
}
この1行を編集部のサンプル JSON で試すと、出力は [Opus] 72.75% context でした。used_percentage は小数で届くことがあるので、整数で見たいときは後で紹介するスクリプトのように切り捨ててから表示します。
statusLine に書ける項目は次の5つです(出典: Settings reference)。
| 項目 | 内容 | 既定値・制約 |
|---|---|---|
type | 実行方式。"command" を指定する | 必須 |
command | 実行するスクリプトのパス、またはシェルのコマンド | 必須 |
padding | 左右に足す余白(文字数)。画面の組み込みの余白に加算される | 既定は 0 |
refreshInterval | イベントとは別に、何秒ごとに再実行するか | 最小 1。未設定ならイベント時だけ |
hideVimModeIndicator | -- INSERT -- の表示を消す。スクリプトで vim のモードを出すときに使う | true・false |
保存すると Claude Code が設定を読み直し、すぐにスクリプトが実行されます。再起動は要りません。
どの settings.json に書くか
statusLine は、ユーザー・プロジェクト・ローカル・管理者(managed)のどの設定ファイルにも書けます(出典: Settings)。
| 書く場所 | ファイル | 誰に効くか | 向いている使い方 |
|---|---|---|---|
| ユーザー | ~/.claude/settings.json | 自分の全プロジェクト | 個人の好みの表示。まずはここ |
| プロジェクト(共有) | .claude/settings.json | リポジトリに含めれば、チーム全員 | チームで同じ表示にそろえたいとき |
| プロジェクト(自分だけ) | .claude/settings.local.json | 自分の、そのプロジェクトだけ | 特定のプロジェクトだけ表示を変えたいとき |
| 管理者 | managed settings | 組織の全員 | 組織として表示を決めたいとき |
プロジェクトの共有設定に入れると、チームのメンバーの手元でそのコマンドが実行されることに注意してください。statusline はシェルのコマンドを動かすので、Claude Code はフック(hooks)と同じく、フォルダの信頼(workspace trust)を承認するまで実行しません。共有する場合は、スクリプトの中身をレビューできる状態にしておくのが安全です。フックの扱いはClaude Code の Hooks 活用ガイドも参考になります。
スクリプトが受け取る JSON の項目一覧
スクリプトには、モデル・フォルダ・費用・コンテキスト・使用制限など数十の値が JSON で届きます。 公式ドキュメントの一覧から、表示に使うことが多いものをまとめました(出典: Available data)。
| 項目 | 中身 | 使いどころ |
|---|---|---|
model.id、model.display_name | モデルの ID と表示名(例: Opus) | いまのモデルの確認 |
workspace.current_dir(cwd も同じ値) | 現在の作業フォルダ | フォルダ名の表示 |
workspace.project_dir | Claude Code を起動したフォルダ | 途中で移動したかの確認 |
workspace.added_dirs | /add-dir などで足したフォルダ | 複数フォルダで作業するとき |
workspace.git_worktree | git worktree の名前(メインの作業ツリーでは無い) | worktree の見分け |
workspace.repo.host、.owner、.name | origin から読み取ったリポジトリ | リポジトリ名の表示 |
cost.total_cost_usd | セッションの費用の目安(米ドル) | 使いすぎの目安 |
cost.total_duration_ms、cost.total_api_duration_ms | セッションの経過時間と、応答待ちの時間(ミリ秒) | 作業時間の表示 |
cost.total_lines_added、cost.total_lines_removed | 追加・削除した行数 | 変更量の目安 |
context_window.used_percentage、.remaining_percentage | コンテキストの使用率・残り(計算済み) | 圧縮のタイミング判断 |
context_window.context_window_size | コンテキストの上限(既定 200000、拡張時 1000000) | 上限トークン数の表示 |
context_window.total_input_tokens、.total_output_tokens | いまコンテキストにあるトークン数 | 実数での表示 |
context_window.current_usage | 直前の API 呼び出しのトークン内訳(キャッシュ読み書きを含む) | キャッシュの効き方の確認 |
exceeds_200k_tokens | 直前の応答の合計が 20万トークンを超えたか(上限と関係なく固定の閾値) | 長い会話の警告 |
rate_limits.five_hour.used_percentage、.resets_at | 5時間枠の使用率(0〜100)と、リセット時刻(Unix 秒) | 使用制限の残りの確認 |
rate_limits.seven_day.used_percentage、.resets_at | 7日枠(週)の使用率とリセット時刻 | 週の上限の確認 |
rate_limits.spend_limit.* | Claude apps gateway 経由で使うときの利用上限 | 組織の上限管理 |
effort.level | 推論の強さ(low〜max)。対応しないモデルでは無い | effort の確認 |
thinking.enabled、fast_mode | 拡張思考・fast モードが有効か | モードの確認 |
session_id、session_name | セッションの ID と名前 | 複数セッションの見分け・キャッシュのファイル名 |
prompt_cache | プロンプトキャッシュのヒット率や有効期限 | キャッシュが切れる前の判断 |
pr.number、pr.url、pr.review_state | 今のブランチで開いているプルリクエスト(GitLab では merge request) | レビュー状況の表示 |
worktree.name、worktree.branch ほか | worktree セッション中の情報 | 並列作業の見分け |
vim.mode、agent.name、output_style.name、version | vim のモード、エージェント名、出力スタイル、Claude Code のバージョン | 状態の確認 |
worktree を使った並列作業で、どのセッションがどのブランチかを見分けたいときは workspace.git_worktree や worktree.* が役に立ちます。worktree の使い方はClaude Code の worktree 並列開発ガイドで解説しています。
項目が無い・null になるときに注意する
JSON の項目は、条件によって丸ごと無かったり、null だったりします。 スクリプトが失敗すると表示が空になるので、無い場合の書き方を最初から入れておくのが大切です。公式ドキュメントが挙げている主な条件は次のとおりです。
rate_limitsは claude.ai の Pro・Max の契約者(または利用上限を設定した Claude apps gateway 経由)だけに届き、しかもセッションの最初の応答の後からです。 API キーで使っている場合は届かないので、この条件に当てはまるかを先に確認してください(2026年10月時点の公式ドキュメントの記載)。5時間枠・週の枠はそれぞれ単独で無いこともあり、リセット時刻を過ぎた枠は消えます。context_window.used_percentageとremaining_percentageは、セッションの最初のほうでは null のことがあります。context_window.current_usageは、最初の API 呼び出しの前と、/compactの直後に null になります。effortは対応するモデルのときだけ、vimは vim モードが有効なときだけ、prはブランチに開いたプルリクエストがあるときだけ、worktreeは worktree セッション中だけ届きます。
jq なら // 0 や // empty を付けると、null や欠けた値で止まらずに済みます。後のスクリプトはすべてこの書き方にしています。
コンテキストの使用率と費用の数字の意味
used_percentage は入力側のトークンだけで計算されます。式は input_tokens + cache_creation_input_tokens + cache_read_input_tokens で、出力トークンは含みません。自分で計算し直す場合も、この式に合わせると used_percentage と一致します。出力トークンを足して計算すると高めに出るので、圧縮の判断に使うときは注意してください(出典: Context window fields)。
/context コマンドの数字と少しずれることがありますが、これは statusline が直前の応答の値を使うのに対し、/context はその後に増えたメッセージの見積もりを足すためです。次の応答が届けばそろいます。圧縮の判断の目安はClaude Code コンテキスト圧縮 完全ガイドにまとめています。
cost.total_cost_usd は、Claude Code が手元で定価をもとに見積もった値で、実際の請求額とは違うことがあります(出典: Available data)。組織が modelPricing で契約単価を設定していればその単価で計算され、/clear で新しいセッションを始めると 0 に戻ります。Pro・Max の定額プランで使っている場合、あとどれだけ使えるかの判断には、費用の目安より使用制限の値(rate_limits)のほうが直接役に立ちます。プランごとの違いはClaude Code の料金プラン比較で確認してください。
コピペで使える設定例(macOS・Linux)
ここからのスクリプトは、すべて編集部が macOS でサンプル JSON を渡して出力を確かめたものです。 出力は各スクリプトの下に載せています。
準備:jq を入れて、試し方を覚える
bash の例では JSON の読み取りに jq を使います。入っていなければ、macOS は brew install jq、Ubuntu などは sudo apt install jq で入れます。jq を入れたくない場合は、後で紹介する Python 版を使ってください。
スクリプトを保存したら、実行権限を付けてから、サンプルの JSON を流し込んで動作を確かめます。公式ドキュメントも、設定する前にこの方法で試すよう勧めています。
chmod +x ~/.claude/statusline.sh
echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ~/.claude/statusline.sh
手元で動かない状態のまま settings.json に登録すると、表示が空になるだけで理由が見えにくくなります。先にこの試し方で出力を確かめておくのが近道です。
最小の例:モデル・フォルダ・コンテキストの使用率
公式ドキュメントの入門例とほぼ同じ形です。まずはこれで表示が出ることを確かめます。
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
DIR=$(echo "$input" | jq -r '.workspace.current_dir')
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
echo "[$MODEL] ${DIR##*/} | ${PCT}% context"
出力(使用率が 72.75% のサンプルの場合):
[Opus] my-app | 72% context
使用率が null のサンプルでは [Opus] project | 0% context になり、止まらずに表示されることも確かめました。
コンテキストの使用率をバーと色で出す
使用率が上がってきたことに気づきやすくするため、10マスのバーにして、70% 未満は緑、70〜89% は黄、90% 以上は赤にします。色の閾値は公式ドキュメントの複数行の例と同じです。jq の呼び出しを1回にまとめ、実行を軽くしています。
#!/bin/bash
input=$(cat)
IFS='|' read -r MODEL PCT USED SIZE <<< "$(echo "$input" | jq -r '[
.model.display_name,
(.context_window.used_percentage // 0 | floor),
(.context_window.total_input_tokens // 0),
(.context_window.context_window_size // 200000)
] | map(tostring) | join("|")')"
# 70%未満は緑、70〜89%は黄、90%以上は赤
if [ "$PCT" -ge 90 ]; then COLOR='\033[31m'
elif [ "$PCT" -ge 70 ]; then COLOR='\033[33m'
else COLOR='\033[32m'; fi
RESET='\033[0m'
FILLED=$((PCT / 10)); EMPTY=$((10 - FILLED))
printf -v FILL "%${FILLED}s"; printf -v PAD "%${EMPTY}s"
BAR="${FILL// /█}${PAD// /░}"
printf '%b\n' "[$MODEL] ${COLOR}${BAR} ${PCT}%${RESET} ($((USED / 1000))k/$((SIZE / 1000))k)"
出力(色は省略):
[Opus] ███████░░░ 72% (145k/200k)
100% のサンプルでも ██████████ 100% と赤で表示され、バーがはみ出さないことを確かめました。コンテキストの上限が 1000000 のモデルでは、括弧の中が /1000k になります。
5時間・週の使用制限とリセット時刻を出す
Pro・Max で使っていると、作業の途中で5時間枠や週の上限に届いて止まることがあります。statusline に使用率と「何時に回復するか」を出しておけば、重い作業を始める前に判断できます。resets_at は Unix 秒で届くので、Linux の date -d を先に試し、使えなければ macOS の date -r で時刻に変換しています(編集部が動作を確かめたのは macOS 側です)。
#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
FIVE=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')
FIVE_AT=$(echo "$input" | jq -r '.rate_limits.five_hour.resets_at // empty')
WEEK=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')
WEEK_AT=$(echo "$input" | jq -r '.rate_limits.seven_day.resets_at // empty')
# Unix 秒を時刻に変える(Linux は date -d、macOS は date -r)
fmt_time() { date -d "@$1" "+$2" 2>/dev/null || date -r "$1" "+$2"; }
OUT="[$MODEL]"
[ -n "$FIVE" ] && OUT="$OUT 5h $(printf '%.0f' "$FIVE")% ($(fmt_time "$FIVE_AT" '%H:%M')に回復)"
[ -n "$WEEK" ] && OUT="$OUT | 週 $(printf '%.0f' "$WEEK")% ($(fmt_time "$WEEK_AT" '%m/%d %H:%M')に回復)"
echo "$OUT"
出力(5時間枠 23.5%、週 41.2% のサンプルの場合):
[Opus] 5h 24% (09:00に回復) | 週 41% (10/27 09:00に回復)
rate_limits が無い JSON を渡したときは [Opus] だけが表示され、エラーにならないことも確かめています。セッションを始めた直後や、API キーで使っている場合はこの状態になります。
なお、リセット時刻を過ぎると Claude Code がスクリプトを実行し直すので、回復した後に古い使用率が残り続けることはありません。使用制限そのものの仕組みや、止まったときのエラーの対処はClaude Code トラブルシューティング完全ガイドで扱っています。
2行でまとめて出す:モデル・Git ブランチ・使用率・費用
1行目にモデル(effort があれば併記)・フォルダ・Git のブランチと未コミットのファイル数、2行目にコンテキスト・5時間・週の使用率と費用の目安を出します。Git のコマンドは大きなリポジトリだと遅くなるので、公式ドキュメントの方法にならい、結果を5秒間キャッシュします。キャッシュのファイル名には session_id を使い、別のリポジトリで開いた複数のセッションが同じキャッシュを読まないようにしています。
#!/bin/bash
input=$(cat)
IFS='|' read -r MODEL EFFORT DIR SID PCT FIVE WEEK COST <<< "$(echo "$input" | jq -r '[
.model.display_name,
(.effort.level // ""),
.workspace.current_dir,
.session_id,
(.context_window.used_percentage // 0 | floor),
(.rate_limits.five_hour.used_percentage // "" | if . == "" then . else round end),
(.rate_limits.seven_day.used_percentage // "" | if . == "" then . else round end),
(.cost.total_cost_usd // 0)
] | map(tostring) | join("|")')"
# git の情報は 5 秒キャッシュする(session_id ごとに別ファイル)
CACHE="${TMPDIR:-/tmp}/statusline-git-$SID"
AGE=$(( $(date +%s) - $(stat -c %Y "$CACHE" 2>/dev/null || stat -f %m "$CACHE" 2>/dev/null || echo 0) ))
if [ "$AGE" -gt 5 ]; then
BRANCH=$(git -C "$DIR" branch --show-current 2>/dev/null)
DIRTY=$(git -C "$DIR" status --porcelain 2>/dev/null | wc -l | tr -d ' ')
echo "$BRANCH|$DIRTY" > "$CACHE"
fi
IFS='|' read -r BRANCH DIRTY < "$CACHE"
GIT=""
[ -n "$BRANCH" ] && GIT=" | $BRANCH"
[ -n "$BRANCH" ] && [ "${DIRTY:-0}" -gt 0 ] && GIT="$GIT *$DIRTY"
LINE1="[$MODEL${EFFORT:+ $EFFORT}] ${DIR##*/}$GIT"
LINE2="ctx ${PCT}%"
[ -n "$FIVE" ] && LINE2="$LINE2 | 5h ${FIVE}%"
[ -n "$WEEK" ] && LINE2="$LINE2 | 週 ${WEEK}%"
LINE2="$LINE2 | \$$(printf '%.2f' "$COST")"
echo "$LINE1"
echo "$LINE2"
出力(Git のリポジトリの中で、未コミットのファイルが1つある場合):
[Opus high] my-app | main *1
ctx 72% | 5h 24% | 週 41% | $0.43
Git のリポジトリの外では1行目がフォルダ名だけになり、使用制限が届いていないときは2行目からその項目が消えます。編集部の手元では、1回の実行は 0.06 秒ほどでした。キャッシュの置き場所を $TMPDIR(無ければ /tmp)にしているのは、macOS ではユーザーごとの一時フォルダが $TMPDIR に設定されていて、ほかのユーザーと共有される /tmp を避けられるためです。
stat -c %Y を先に試しているのは、公式ドキュメントにある注意に従ったものです。Linux で macOS 用の stat -f %m を先に実行すると、失敗する前にファイルシステムの情報を出力してしまい、計算が壊れます。
jq を使わない Python 版
jq を入れられない環境では、Python の標準ライブラリだけで書けます。コンテキストの使用率と、5時間・週の使用制限を出す例です。
#!/usr/bin/env python3
import json, sys, time
data = json.load(sys.stdin)
model = data["model"]["display_name"]
pct = int(data.get("context_window", {}).get("used_percentage") or 0)
parts = [f"[{model}] ctx {pct}%"]
limits = data.get("rate_limits", {})
for key, label in (("five_hour", "5h"), ("seven_day", "週")):
window = limits.get(key)
if window and window.get("used_percentage") is not None:
reset = time.strftime("%m/%d %H:%M", time.localtime(window["resets_at"]))
parts.append(f"{label} {window['used_percentage']:.0f}% ({reset}に回復)")
print(" | ".join(parts))
出力:
[Opus] ctx 72% | 5h 24% (10/21 09:00に回復) | 週 41% (10/27 09:00に回復)
~/.claude/statusline.py として保存し、chmod +x を付けたうえで、command に ~/.claude/statusline.py を指定します。公式ドキュメントには同じ内容の Node.js 版の例も載っています。
Windows(PowerShell・Git Bash)での書き方
Windows では、Git Bash が入っていれば Git Bash で、入っていなければ PowerShell でコマンドが実行されます。 どちらの場合も、command のパスは C:/Users/... のようにスラッシュ(/)で書くのが大切です。Git Bash はバックスラッシュをエスケープ文字として扱うため、C:\Users\... と書くと区切りが消え、エラーも出ないまま表示されなくなる点に注意してください(出典: Windows configuration)。~ も Windows のホームフォルダとして使えます。
PowerShell のスクリプトを使う
powershell -NoProfile -File で呼び出すと、Git Bash と PowerShell のどちらを経由しても動きます。以下は公式ドキュメントの例です(username は自分のユーザー名に置き換えます)。
{
"statusLine": {
"type": "command",
"command": "powershell -NoProfile -File C:/Users/username/.claude/statusline.ps1"
}
}
$input_json = $input | Out-String | ConvertFrom-Json
$cwd = $input_json.cwd
$model = $input_json.model.display_name
$used = $input_json.context_window.used_percentage
$dirname = Split-Path $cwd -Leaf
if ($used) {
Write-Host "$dirname [$model] ctx: $used%"
} else {
Write-Host "$dirname [$model]"
}
ConvertFrom-Json で読み込んだ後は、$input_json.rate_limits.five_hour.used_percentage のように、JSON の項目一覧と同じ名前でたどれます。項目が無いときに備えて、上の例のように値があるかを確かめてから表示してください。
Git Bash で bash のスクリプトを動かす
Git Bash が入っていれば、bash のスクリプトをそのまま指定できます。公式ドキュメントの例は jq を使わず、grep で値を取り出しています。
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh"
}
}
#!/usr/bin/env bash
input=$(cat)
cwd=$(echo "$input" | grep -o '"cwd":"[^"]*"' | cut -d'"' -f4)
model=$(echo "$input" | grep -o '"display_name":"[^"]*"' | cut -d'"' -f4)
dirname="${cwd##*[/\\]}"
echo "$dirname [$model]"
Git Bash に jq を入れれば、前のセクションの macOS・Linux 向けのスクリプトも使える可能性がありますが、編集部は Windows で確かめていません。Windows で Claude Code を入れる手順そのものはClaude Code のインストールと初期設定を参照してください。
既製ツールを使う:ccstatusline・ccusage との使い分け
スクリプトを書かずに見た目を整えたいなら、公開されているツールを command に指定する方法もあります。 公式ドキュメントのヒントでも、ccstatusline と starship-claude が既製の設定を持つコミュニティのプロジェクトとして紹介されています。いずれも Anthropic の製品ではないので、導入前に各リポジトリで最新の説明を確認してください。
| 方法 | 手間 | 表示できるもの | 必要なもの | 向いている人 |
|---|---|---|---|---|
| 自分で書く(本記事の例) | 中 | JSON の全項目+シェルで取れる情報 | jq や Python | 表示を細かく決めたい人 |
/statusline で作らせる | 小 | 指示した内容(後から編集できる) | なし | まず何か出したい人 |
| ccstatusline | 小 | モデル・Git・トークン・使用制限・費用などの部品を画面で選ぶ。Powerline 風の見た目やテーマもある | Node.js(npx)か Bun | 見た目にこだわりたい人 |
| ccusage statusline(ベータ版) | 小 | セッション・当日・5時間枠ごとの費用の目安、消費のペース、コンテキスト | Bun か Node.js | 費用の推移を見たい人 |
| starship-claude | 中 | Starship で描く表示。コンテキストの使用率をバーと色で出す(バーは Ghostty など対応ターミナルのみ。tmux では出ない) | Starship | すでに Starship を使っている人 |
ccstatusline は npx -y ccstatusline@latest で起動する画面から部品を選ぶと、settings.json の statusLine まで書き込みます。ccusage は "command": "bun x ccusage statusline"(推奨。Bun が無ければ npx -y ccusage statusline)を指定する方式で、本家のページでもベータ版と明記されています。ccstatusline の説明によると、bunx で @latest を付けると実行のたびに最新版を探し直すため、バージョンを固定した場合より起動が遅くなります(Windows での計測で約 0.63 秒と約 0.20 秒)。一方で npx の場合は、@latest でもバージョン固定でも1回の再描画に約1.1秒かかり、固定しても速くなりません。statusline は応答のたびに実行されるので、bunx ならバージョンを固定し、npx なら TUI の Pinned global install を選んで、グローバルに入れた ccstatusline コマンドを command に書き込ませるのがおすすめです。
自作と既製ツールのどちらがよいかは、表示したい内容が決まっているかで分けると判断しやすくなります。決まっていれば自作が軽く、決まっていなければ既製ツールで一通り試してから、必要な項目だけ自作に移す進め方が無駄がありません。
表示されない・値がおかしいときの確認点
何も表示されないときは、まずスクリプトを手で実行し、終了コード 0 で何かを標準出力に書いているかを確かめます。 Claude Code は、スクリプトが終了コード 0 で終わったときだけ出力を表示し、それ以外や出力なしのときは空欄にするため、エラーの画面が出ない点に注意が必要です(出典: Troubleshooting)。
| 症状 | 考えられる原因 | 確認・対処 |
|---|---|---|
| 何も表示されない | 実行権限が無い | chmod +x ~/.claude/statusline.sh を実行する |
| 何も表示されない | 標準エラー出力に書いている、または終了コードが 0 以外 | サンプル JSON を流し込んで手で実行し、echo $? で確かめる |
| 何も表示されない | フォルダの信頼をまだ承認していない | Claude Code を再起動して信頼の確認を承認する |
| 何も表示されない | disableAllHooks が true になっている | 設定した側のファイルで外すか false にする |
| 何も表示されない | 組織の管理者設定で allowManagedHooksOnly が有効 | 管理者設定の statusline しか動かないので、管理者に確認する |
| 何も表示されない | claude --safe-mode で起動している | safe mode では管理者設定以外の statusline が警告なしで止まる。通常どおり起動し直す |
| Windows で何も表示されない | パスをバックスラッシュで書いている | C:/Users/... のようにスラッシュで書く |
-- や空の値が出る | 最初の応答の前で値が null | jq の // 0 で代わりの値を入れる。何度か応答しても空なら再起動する |
/context と使用率がずれる | /context は直前の応答の後の分を見積もって足す | 次の応答でそろう。判断には used_percentage を使う |
| 5時間・週の値が出ない | API キーで利用中、Pro・Max 以外、または最初の応答の前 | rate_limits が届かない条件に当たっていないか確かめる |
| リンクをクリックできない | ターミナルが OSC 8 に未対応、または検出されていない | 対応ターミナルを使う。FORCE_HYPERLINK=1 claude で検出を上書きできる |
| 表示が崩れる | 色やリンクのエスケープが画面の更新と重なった | まず色なしの1行に戻して確かめる |
| 表示が遅れる・古い | スクリプトが遅い | Git などの重い処理をキャッシュする |
| 右側が欠ける | 通知(MCP のエラーや自動更新)が同じ行の右側に出ている | 出力を短くする。全画面表示では通知が別の行になる |
原因の見当がつかないときは、claude --debug で起動すると、スクリプトの標準エラー出力が毎回、セッションの最初の実行では終了コードもログに残ります。フォルダを信頼していない場合は Status line command skipped: workspace trust not accepted と記録されます。Claude Code に設定ファイルを読ませて、statusLine のコマンドをそのまま実行させ、エラーを見つけてもらうのも公式ドキュメントで紹介されている方法です。
長く使うためのチェックリスト
statusline は応答のたびに実行されるので、短く・速く・壊れにくく作るのが基本です。 公式ドキュメントのヒントと、編集部がスクリプトを書いて確かめた点を合わせると、次の4つを守れば困ることはほとんどありません。
- 表示は短くする。 幅が足りないと折り返したり切れたりします。特に通知と同じ行に並ぶので、右側に余白を残しておくと安心です。必要なら
COLUMNSを読んで、狭いときは項目を減らします。 - 重い処理はキャッシュする。
git statusのようなコマンドは大きなリポジトリで遅くなります。キャッシュのファイル名はsession_idから作り、$$のようにプロセスごとに変わる値は使いません(毎回変わるのでキャッシュが効きません)。 - 値が無い場合を必ず書く。
rate_limitsやeffortのように届かないことがある項目は、// emptyで空にして表示を省きます。1つの項目の欠けで全体が空欄になるのを防げます。 - 時刻を出すなら
refreshIntervalを付ける。 待機中はきっかけが来ないので、時計や外部の情報は止まって見えます。必要な分だけ、1秒以上の間隔を指定します。
サブエージェントの一覧の行を自分の表示に置き換える subagentStatusLine という設定もあります。こちらは各サブエージェントのトークン数やモデルを受け取り、行ごとに書き換える仕組みです。サブエージェント自体の使い方はClaude Code サブエージェント活用ガイドをご覧ください。
また、OpenAI の Codex CLI にも同じ名前の /statusline があり、表示する項目を選ぶ方式になっています。両方を使っている場合はCodex の使用制限ガイドもあわせて確認すると、制限の見え方の違いが分かります。
よくある質問
まとめ
- statusline は、Claude Code が JSON を標準入力で渡し、スクリプトの標準出力を入力欄の下に表示する機能。トークンは消費しない
- 最初は
/statusline 表示したい内容で作らせ、細かい調整は生成されたスクリプトを編集するのが早い。手で書くなら~/.claude/settings.jsonにstatusLine(typeとcommand、必要ならpadding・refreshInterval・hideVimModeIndicator) - 届く JSON には、モデル・フォルダ・費用の目安・コンテキストの使用率・5時間/週の使用制限・Git やプルリクエストの情報などがある。
rate_limitsは Pro・Max だけで、項目が無い・null の場合を必ず書く - コンテキストの使用率は入力側のトークンで計算され、費用は定価ベースの見積もりで請求額とは違うことがある
- Windows は Git Bash があれば Git Bash、無ければ PowerShell で動く。パスはスラッシュで書く
- 何も出ないときは、手で実行して終了コード 0 と標準出力を確かめ、実行権限・フォルダの信頼・
disableAllHooksを見る
Claude Code の全体像はClaude Code 完全ガイド、コマンドの一覧はClaude Code スラッシュコマンド一覧を参照してください。
参考:
- https://code.claude.com/docs/en/statusline
- https://code.claude.com/docs/en/settings-reference#statusline
- https://code.claude.com/docs/en/commands
- https://code.claude.com/docs/en/settings
- https://code.claude.com/docs/en/changelog
- https://github.com/sirmalloc/ccstatusline
- https://ccusage.com/guide/statusline


