• #Claude Code
  • #ステータスライン
  • #レートリミット
  • #Python
  • #API
  • #Windows
開発claude-code-toolsメモ

Claude Code ステータスラインにレートリミット表示を追加した

朝、Claude Codeのレートリミットに引っかかった。ブラウザで使用量ページを開こうとしたが、エラーで表示されない。「残りどれだけ使えるか」が分からないまま作業するのは、ガソリン残量が見えない車で走るのと同じだ。ステータスラインに使用量を出すことにした。

背景: ステータスラインの既存構成

Claude Codeのステータスラインは settings.jsonstatusline フィールドで制御する。既にコンテキストウィンドウの使用率(ctx XX%)と ccusage コマンドの出力を組み合わせて表示していた。

ここにレートリミット情報を追加する。

レートリミット情報の取得方法

Anthropic公式にはレートリミットのAPIは公開されていない。ただし、Claude Codeが認証に使うOAuthトークンを使えば、内部APIから使用量データを取得できる。

OAuthトークンの取得

Claude Codeの認証情報はローカルに保存されている。OAuthトークンを読み出してHTTPリクエストのAuthorizationヘッダーに載せると、APIが使用量のJSONを返してくる。

APIレスポンスの構造

5時間ウィンドウと1週間ウィンドウの2種類がある。それぞれ以下の情報を持つ。

  • 現在の使用量と上限
  • 使用率(パーセンテージ)
  • リセット時刻(UTC)

curl で叩いてみたら、即座にJSONが返ってきた。レスポンス構造を目視で確認し、パース方法を決めた。

Pythonスクリプトの実装

ステータスラインスクリプトはシェルスクリプトでもよいが、JSONパースやUTF-8制御を考えるとPythonの方が扱いやすい。新規にPythonスクリプトを作成した。

処理の流れ

  1. OAuthトークンをローカルファイルから読み出す
  2. Anthropic APIにリクエストを送信
  3. レスポンスのJSONから5時間枠・1週間枠の使用率を抽出
  4. リセット時刻をJSTに変換
  5. 5h:XX% 1w:YY% rst:HH:MM 形式でフォーマットして標準出力

Windows UTF-8問題

Pythonスクリプトを動かしたら、最初の出力で文字化けした。WindowsのデフォルトエンコーディングがCP932のため、日本語を含むJSON処理で化ける。

sys.stdout を UTF-8 に強制するコードを冒頭に1行入れて解決した。Windows環境でPythonの標準出力を扱うときの定番の罠。

settings.json の更新

settings.jsonstatusline フィールドを更新し、新しいPythonスクリプトを呼び出すように設定した。

設定変更後、Claude Codeを再起動すると、ステータスラインに使用率が表示された。

表示例:

ctx 45% | 5h:72% 1w:38% rst:11:30

コンテキスト使用率、5時間枠の使用率、1週間枠の使用率、リセット時刻が一行に収まっている。

振り返り

ブラウザの使用量ページがエラーで開けなかったのがきっかけだが、結果としてターミナルから一度も離れずに残量を確認できるようになった。APIが非公式である点は承知の上で、自分の使用量を自分で確認する範囲なら問題ないと判断した。

OAuthトークンの読み出し、API呼び出し、JSON整形、UTF-8対処まで含めて30分ほどで終わった。ステータスラインのカスタマイズは一度仕組みを作ると、後から情報を足しやすい。