Claude Code ステータスラインにレートリミット表示を追加した
朝、Claude Codeのレートリミットに引っかかった。ブラウザで使用量ページを開こうとしたが、エラーで表示されない。「残りどれだけ使えるか」が分からないまま作業するのは、ガソリン残量が見えない車で走るのと同じだ。ステータスラインに使用量を出すことにした。
背景: ステータスラインの既存構成
Claude Codeのステータスラインは settings.json の statusline フィールドで制御する。既にコンテキストウィンドウの使用率(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スクリプトを作成した。
処理の流れ
- OAuthトークンをローカルファイルから読み出す
- Anthropic APIにリクエストを送信
- レスポンスのJSONから5時間枠・1週間枠の使用率を抽出
- リセット時刻をJSTに変換
5h:XX% 1w:YY% rst:HH:MM形式でフォーマットして標準出力
Windows UTF-8問題
Pythonスクリプトを動かしたら、最初の出力で文字化けした。WindowsのデフォルトエンコーディングがCP932のため、日本語を含むJSON処理で化ける。
sys.stdout を UTF-8 に強制するコードを冒頭に1行入れて解決した。Windows環境でPythonの標準出力を扱うときの定番の罠。
settings.json の更新
settings.json の statusline フィールドを更新し、新しいPythonスクリプトを呼び出すように設定した。
設定変更後、Claude Codeを再起動すると、ステータスラインに使用率が表示された。
表示例:
ctx 45% | 5h:72% 1w:38% rst:11:30
コンテキスト使用率、5時間枠の使用率、1週間枠の使用率、リセット時刻が一行に収まっている。
振り返り
ブラウザの使用量ページがエラーで開けなかったのがきっかけだが、結果としてターミナルから一度も離れずに残量を確認できるようになった。APIが非公式である点は承知の上で、自分の使用量を自分で確認する範囲なら問題ないと判断した。
OAuthトークンの読み出し、API呼び出し、JSON整形、UTF-8対処まで含めて30分ほどで終わった。ステータスラインのカスタマイズは一度仕組みを作ると、後から情報を足しやすい。