🐧 Claude Code、めちゃくちゃ便利なんだけど一個ずっと気になってたことがあって。
「今、サブスクのプランをどれくらい使ってるんだろ?」って全然わからないんですよね。
残量が気になってターミナルと Claude の管理画面を行き来するのが地味にストレスで、
「ステータスラインに出せないかな」と調べたらできた!!
こんな感じで常時表示できます。
sonnet-4.6 | 5h:50%(2h30m) 7d:29%(5d12h) ctx:12%絵文字なし、シンプルで最高。やり方をまとめます。
まず結論:スクリプト全文
ファイルを作成して配置するだけです。
#!/bin/bash
INPUT=$(cat)
# モデル名を短縮: claude-opus-4-6 -> opus-4.6
MODEL=$(echo "$INPUT" | jq -r '.model.id // .model // ""' 2>/dev/null \
| sed 's/claude-//' \
| sed 's/-[0-9]\{8\}$//' \
| sed 's/-\([0-9]\+\)$/.\1/')
# コンテキスト使用率
CTX=$(echo "$INPUT" | jq -r '(.context_window.used_percentage // 0) | floor' 2>/dev/null)
# 5h / 7d 使用率・リセット時間(stdin から直接取得)
FIVE_H=$(echo "$INPUT" | jq -r '(.rate_limits.five_hour.used_percentage // 0) | floor' 2>/dev/null)
SEVEN_D=$(echo "$INPUT" | jq -r '(.rate_limits.seven_day.used_percentage // 0) | floor' 2>/dev/null)
FIVE_RESET_AT=$(echo "$INPUT" | jq -r '.rate_limits.five_hour.resets_at // ""' 2>/dev/null)
SEVEN_RESET_AT=$(echo "$INPUT" | jq -r '.rate_limits.seven_day.resets_at // ""' 2>/dev/null)
# 残り時間を計算
NOW=$(date +%s)
format_remaining() {
local reset_at="$1"
[ -z "$reset_at" ] && echo "--" && return
local reset_ts
if [[ "$reset_at" =~ ^[0-9]+$ ]]; then
reset_ts="$reset_at"
else
reset_ts=$(date -d "$reset_at" +%s 2>/dev/null) || { echo "--"; return; }
fi
local diff=$(( reset_ts - NOW ))
[ $diff -le 0 ] && echo "0m" && return
local h=$(( diff / 3600 ))
local m=$(( (diff % 3600) / 60 ))
if [ $h -ge 24 ]; then
local d=$(( h / 24 ))
local rh=$(( h % 24 ))
echo "${d}d${rh}h"
elif [ $h -gt 0 ]; then
echo "${h}h${m}m"
else
echo "${m}m"
fi
}
FIVE_RESET=$(format_remaining "$FIVE_RESET_AT")
SEVEN_RESET=$(format_remaining "$SEVEN_RESET_AT")
echo "${MODEL:-unknown} | 5h:${FIVE_H}%(${FIVE_RESET}) 7d:${SEVEN_D}%(${SEVEN_RESET}) ctx:${CTX}%"
このファイルを ~/.claude/hooks/statusline.sh として保存して、~/.claude/settings.json に追記すれば完成。
{
"statusLine": {
"type": "command",
"command": "bash ~/.claude/hooks/statusline.sh"
}
}仕組み
Claude Code の statusLine 設定は、シェルコマンドを登録できる機能です。
Claude が応答するたびにそのコマンドが実行され、出力がステータスラインに表示されます。
コマンドには Claude Code からセッション情報が JSON で stdin に流れてきます。
モデル名・コンテキスト使用率・5時間/週次のプラン使用率・リセット時刻、すべてここに含まれています。
{
"model": { "id": "claude-sonnet-4-6" },
"context_window": { "used_percentage": 12 },
"rate_limits": {
"five_hour": { "used_percentage": 50, "resets_at": 1775077200 },
"seven_day": { "used_percentage": 29, "resets_at": 1775520000 }
}
}外部 API を叩く必要はなく、stdin を jq でパースするだけ。
シンプルで軽量です。
ハマりポイント
used_percentage は 0〜100(割合じゃない)
rate_limits.five_hour.used_percentage はすでに % 表記(0〜100)で入ってきます。
そのまま表示すればOKです。
resets_at は unix タイムスタンプ
resets_at は ISO 8601 ではなく unix タイムスタンプ(秒)で入ってきます。date -d "@$timestamp" の形で扱う必要があります。
前提:jq が必要
スクリプト内で jq を使っているので、未インストールの場合は入れてください。
# jq(未インストールの場合)
sudo apt install jq # Ubuntu/Debian
brew install jq # macOSまとめ
- Claude Code の
statusLineにシェルスクリプトを登録するだけで自由にカスタマイズできる - 5時間・週次の使用率とリセットまでの残り時間は stdin の
rate_limitsから直接取れる - 外部 API 不要で超軽量
- 絵文字なしグラフなしのシンプル表示が一番落ち着く
以上!!
誰かのお役に立てれば嬉しいです🐧
