Claude Code のステータスラインで使用状況を可視化する
Claude Code をターミナルで使っていると、「あとどれくらい使えるか」が気になるタイミングがあります。特に Pro プランや Max プランでは、5時間ウィンドウや7日間ウィンドウのレート制限が適用されるため、突然レート制限に達して作業が中断されるのは避けたいところです。
Claude Code v2.1.80 以降では、ステータスライン機能で rate_limits フィールドが利用可能になり、リアルタイムで使用率やリセット時刻を確認できるようになりました。ここではステータスラインの基本設定からカスタムスクリプトの作成、便利なコミュニティツールの活用法まで、実践的にお伝えします。
Claude Code の設定ファイル全般については、Claude Code settings.json 完全ガイドも合わせてご覧ください。
ステータスラインとは
ステータスラインは、Claude Code の画面下部に表示される情報バーです。デフォルトではモデル名やトークン使用量などが表示されますが、カスタムコマンドを指定することで、自分好みの情報を表示できます。
表示される主な情報は次の通りです。
- モデル名: 現在使用中のモデル(Sonnet 4.6、Opus 4.6 など)
- トークン使用量: セッション内の入出力トークン数
- rate_limits: 5時間/7日間ウィンドウの使用率とリセット時刻
- git 情報: 現在のブランチ名やステータス
- カスタム情報: スクリプトで自由に定義した内容
基本設定: settings.json にステータスラインを追加する
ステータスラインの設定は ~/.claude/settings.json(ユーザー設定)に記述します。
{
"statusLine": {
"type": "command",
"command": "echo 'Hello from statusline'"
}
}この設定を追加するだけで、ステータスラインに任意のコマンドの出力が表示されるようになります。
設定ファイルの場所
| スコープ | パス | 用途 |
|---|---|---|
| ユーザー設定 | ~/.claude/settings.json | 個人のカスタマイズ |
| プロジェクト設定 | .claude/settings.json | プロジェクト固有の設定 |
| エンタープライズ | ~/.claude/settings.d/*.json | 組織ポリシーの配布 |
ステータスラインはユーザー設定に記述するのが一般的です。
rate_limits フィールドを活用する
v2.1.80 以降、ステータスラインのスクリプトには rate_limits オブジェクトが環境変数として渡されます。このオブジェクトには以下の情報が含まれます。
{
"rate_limits": {
"five_hour": {
"used_percentage": 42.5,
"resets_at": 1711540800
},
"seven_day": {
"used_percentage": 15.3,
"resets_at": 1712059200
}
}
}各フィールドの意味
five_hour.used_percentage: 5時間ローリングウィンドウの使用率(0〜100)five_hour.resets_at: リセット時刻(Unix エポック秒)seven_day.used_percentage: 7日間ウィンドウの使用率(0〜100)seven_day.resets_at: リセット時刻(Unix エポック秒)
このフィールドは Claude.ai サブスクライバー(Pro/Max) で、最初の API レスポンス後に利用可能になります。API キー利用の場合は表示されません。
実践: カスタムステータスラインスクリプトを作る
シンプルな Bash スクリプト
まずはシンプルに rate_limits を表示するスクリプトを作成しましょう。
#!/bin/bash
# ~/.claude/statusline.sh
# Claude Code ステータスライン用スクリプト
# 標準入力から JSON データを読み取る
INPUT=$(cat)
# jq で rate_limits を抽出
FIVE_HOUR=$(echo "$INPUT" | jq -r '.rate_limits.five_hour.used_percentage // "N/A"')
SEVEN_DAY=$(echo "$INPUT" | jq -r '.rate_limits.seven_day.used_percentage // "N/A"')
MODEL=$(echo "$INPUT" | jq -r '.model // "unknown"')
# リセット時刻を人間が読める形式に変換
RESETS_AT=$(echo "$INPUT" | jq -r '.rate_limits.five_hour.resets_at // 0')
if [ "$RESETS_AT" != "0" ] && [ "$RESETS_AT" != "null" ]; then
RESET_TIME=$(date -d "@$RESETS_AT" '+%H:%M' 2>/dev/null || date -r "$RESETS_AT" '+%H:%M' 2>/dev/null)
else
RESET_TIME="--:--"
fi
# 出力(絵文字でわかりやすく)
echo "${MODEL} | 5h: ${FIVE_HOUR}% | 7d: ${SEVEN_DAY}% | Reset: ${RESET_TIME}"スクリプトに実行権限を付与し、settings.json に登録します。
chmod +x ~/.claude/statusline.sh{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh"
}
}Node.js で高機能なスクリプトを作る
より高度な表示をしたい場合は、Node.js スクリプトがおすすめです。
#!/usr/bin/env node
// ~/.claude/statusline.mjs
// プログレスバー付きステータスライン
import { createInterface } from 'readline';
const rl = createInterface({ input: process.stdin });
let data = '';
rl.on('line', (line) => { data += line; });
rl.on('close', () => {
try {
const info = JSON.parse(data);
const parts = [];
// モデル名(短縮表示)
const model = info.model || 'unknown';
const shortModel = model.replace('claude-', '').replace('-4-6', '4.6');
parts.push(shortModel);
// rate_limits が利用可能な場合
if (info.rate_limits) {
const fiveHour = info.rate_limits.five_hour;
const sevenDay = info.rate_limits.seven_day;
if (fiveHour) {
const bar = makeBar(fiveHour.used_percentage);
parts.push(`5h ${bar} ${fiveHour.used_percentage.toFixed(0)}%`);
}
if (sevenDay) {
const bar = makeBar(sevenDay.used_percentage);
parts.push(`7d ${bar} ${sevenDay.used_percentage.toFixed(0)}%`);
}
}
// トークン使用量
if (info.tokens) {
const total = info.tokens.input + info.tokens.output;
parts.push(`${(total / 1000).toFixed(1)}k tok`);
}
console.log(parts.join(' | '));
} catch {
console.log('statusline error');
}
});
function makeBar(percentage) {
// 10段階のプログレスバーを生成
const filled = Math.round(percentage / 10);
const empty = 10 - filled;
const color = percentage > 80 ? '!' : percentage > 50 ? '*' : ' ';
return '[' + '='.repeat(filled) + '-'.repeat(empty) + ']';
}期待される出力は以下のようになります。
sonnet4.6 | 5h [====------] 42% | 7d [==--------] 15% | 12.3k tok
インラインコマンドで手軽に設定する
スクリプトファイルを作成せず、settings.json 内にインラインでコマンドを記述することもできます。
{
"statusLine": {
"type": "command",
"command": "jq -r '\"\\(.model // \"?\") | 5h: \\(.rate_limits.five_hour.used_percentage // 0 | round)% | 7d: \\(.rate_limits.seven_day.used_percentage // 0 | round)%\"'"
}
}手軽に試したい場合はこの方法が便利です。ただし複雑な処理には外部スクリプトが適しています。
コミュニティツールを活用する
Claude Code のステータスラインをさらに充実させるコミュニティ製ツールも登場しています。
claude-powerline
Vim の Powerline にインスパイアされたステータスラインツールです。テーマのカスタマイズや色付き表示に対応しています。
# インストール
npm install -g claude-powerline
# settings.json に登録
# "command": "claude-powerline"ccusage
Claude Code の使用量を分析・可視化するツールで、ステータスラインへの統合機能も備えています。
# インストール
npm install -g ccusage
# ステータスライン用のフォーマットを設定
# 詳細は https://ccusage.com/guide/statusline を参照ClaudeCodeStatusLine(Rust 製)
Daniel Barreto 氏が開発した Rust 製のステータスラインツールです。モデル、トークン、rate_limits、git 情報をリアルタイム表示します。
# GitHub からインストール
cargo install --git https://github.com/daniel3303/ClaudeCodeStatusLineレート制限の使い方全般については、レート制限のベストプラクティスでも詳しく解説しています。
レート制限に近づいたときの対処法
ステータスラインで使用率が高くなっていることに気づいた場合、いくつかの対処法があります。
1. モデルの切り替え
Opus 4.6 から Sonnet 4.6 に切り替えることで、レート制限の消費を抑えられます。コーディングタスクの多くは Sonnet 4.6 で十分対応可能です。
# セッション中にモデルを切り替える
/model sonnet2. Effort レベルの調整
--effort フラグで応答の深さを調整できます。簡単な質問には低い Effort レベルを使うことで、トークン消費を抑制できます。
claude --effort low "この関数の戻り値の型は何?"3. セッションの分割
長時間のセッションではコンテキストが肥大化し、トークン消費が増加します。定期的に新しいセッションを開始することで、効率的にレート制限を管理できます。
より深い最適化テクニックを知りたい方は、Claude Code の Effort 設定を極めるもご覧ください。
全体を振り返って
Claude Code のステータスラインは、設定一つで開発体験を大きく改善できる機能です。特に rate_limits のリアルタイム表示は、レート制限を意識しながら効率的に作業を進めるうえで欠かせません。
この記事で紹介した設定をベースに、自分のワークフローに合ったステータスラインをぜひカスタマイズしてみてください。Bash のワンライナーから始めて、慣れてきたら Node.js スクリプトやコミュニティツールを試すのがおすすめです。