MENU

【外部API不要】Claude Code のステータスラインにサブスク使用率をシンプルに表示する

🐧 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 不要で超軽量
  • 絵文字なしグラフなしのシンプル表示が一番落ち着く

以上!!
誰かのお役に立てれば嬉しいです🐧

参考

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次