1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(今さら)Claude Codeのステータスラインをカスタマイズする

1
Last updated at Posted at 2026-03-11

はじめに

だいぶ長いこと、Claude Codeを使っているのですが、開発時にはコンテキスト超過することは少ない使い方をしているのですが、
実環境のエラー調査などを任せると、コードも見て、ログを探索して、DBを確認して。。。とコンテキストが長くなり、
ふとしたときにauto compactionで情報落ちてる。。。ということがしばしば起きるので、遅まきながらステータスラインでわかるようにしようと思いました。

シンプルにモデルとコンテキスト使用量、残りコンテキストが分かればと思い、以下イメージを目指します。

s完成イメージ:

Opus 4.6 │ Context: 11% (22K/200K) │ Remaining: 178K

また、Macでできた内容をそのままWindowsに持っていくとうまくいかなかったので、
Windowsでの設定も記載しています。

前提

  • Claude Codeがインストール済みであること
  • jqがインストール済みであること(JSONパース用)

設定方法

Step 1: ステータスライン表示スクリプトの作成

~/.claude/statusline.sh を作成し、~/.claude配下に配置します。

#!/bin/bash
INPUT=$(cat)

MODEL=$(echo "$INPUT" | jq -r '.model.display_name // "--"')
USED_PCT=$(echo "$INPUT" | jq -r '.context_window.used_percentage // "--"')
REM_PCT=$(echo "$INPUT" | jq -r '.context_window.remaining_percentage // "--"')
CTX_SIZE=$(echo "$INPUT" | jq -r '.context_window.context_window_size // "--"')

# トークン数をK単位で表示するヘルパー
format_tokens() {
  local t=$1
  if [ "$t" = "--" ] || [ "$t" = "null" ]; then echo "--"; return; fi
  echo "$((t / 1000))K"
}

# 使用トークン・残りトークンを計算
if [ "$CTX_SIZE" != "--" ] && [ "$CTX_SIZE" != "null" ] && [ "$USED_PCT" != "--" ] && [ "$USED_PCT" != "null" ]; then
  USED_TOKENS=$((CTX_SIZE * USED_PCT / 100))
  REMAINING=$((CTX_SIZE * REM_PCT / 100))
else
  USED_TOKENS="--"
  REMAINING="--"
fi

USED_K=$(format_tokens "$USED_TOKENS")
MAX_K=$(format_tokens "$CTX_SIZE")
REM_K=$(format_tokens "$REMAINING")

echo "${MODEL} │ Context: ${USED_PCT}% (${USED_K}/${MAX_K}) │ Remaining: ${REM_K}"

Step 2: 実行権限の付与

chmod +x ~/.claude/statusline.sh

Step 3: settings.json への設定追加

~/.claude/settings.json に statusLine セクションを追加します。

{
  "statusLine": {
    "type": "command",
    "command": "cat | bash ~/.claude/statusline.sh"
  }
}

Windows (MINGW64/Git Bash) 環境では cat | を除去して "command": "bash ~/.claude/statusline.sh" としてください。詳しくは後述。

設定後、Claude Codeを再起動すれば、画面下部にステータスラインが表示されます。

仕組みの解説

Claude Codeは statusLine に設定されたコマンドに対し、標準入力でJSON形式のセッション情報を渡します。
スクリプトはこのJSONを jq でパースして、表示用の文字列を標準出力に返します。

Claude Codeが渡すJSONの構造は以下のとおりです(実際のセッションから取得した例)。

{
  "session_id": "xxx",
  "cwd": "xxx",
  "model": {
    "id": "claude-opus-4-6",
    "display_name": "Opus 4.6"
  },
  "version": "2.1.71",
  "context_window": {
    "total_input_tokens": 8,
    "total_output_tokens": 776,
    "context_window_size": 200000,
    "current_usage": {
      "input_tokens": 1,
      "output_tokens": 8,
      "cache_creation_input_tokens": 447,
      "cache_read_input_tokens": 21233
    },
    "used_percentage": 11,
    "remaining_percentage": 89
  },
  "cost": {
    "total_cost_usd": 0.08,
    "total_duration_ms": 50671,
    "total_api_duration_ms": 19801
  }
}

主要なフィールドの意味:

フィールド 説明
model.display_name 使用中のモデル名
context_window.used_percentage コンテキストウィンドウの使用率(%)
context_window.remaining_percentage コンテキストウィンドウの残り率(%)
context_window.context_window_size コンテキストウィンドウの最大トークン数
cost.total_cost_usd セッションの累計コスト(USD)

ハマりポイント

ステータスラインのスクリプトを作る際、最初は「トークン数に関するフィールドが直接JSONに含まれているだろう」と想定していました。

しかし実際にJSONの中身をデバッグ出力してみると、
提供されるのは以下の3つだけで、トークン数を直接示すフィールドは存在しませんでした。

  • context_window.used_percentage(使用率 %)
  • context_window.remaining_percentage(残り率 %)
  • context_window.context_window_size(最大トークン数)

そのため、使用トークン数と残りトークン数はパーセンテージから自分で計算する必要がありました。

USED_TOKENS=$((CTX_SIZE * USED_PCT / 100))
REMAINING=$((CTX_SIZE * REM_PCT / 100))

デバッグ時は以下のように標準入力のJSONをファイルに書き出すと、構造の確認に便利です。

# statusline.sh の先頭に追加
INPUT=$(cat)
echo "$INPUT" > /tmp/claude_statusline_debug.json

Windows (MINGW64/Git Bash) 環境での注意

Windows + Git Bash で、
上記の設定をそのまま適用したところ、ステータスラインの表示が以下のようになってしまいました。

 │ Context: % (0K/0K) │ Remaining: 0K

原因は settings.json の command に指定した cat | bash ~/.claude/statusline.sh のパイプでした。
macOS/Linuxでは問題なく動作するこの書き方ですが、
Windows環境ではパイプラインの中間プロセスを経由する際に、Claude Codeが提供するstdinのファイルディスクリプタが失われてしまいます。

修正方法は cat | を除去してスクリプトを直接指定するだけです。

{
  "statusLine": {
    "type": "command",
    "command": "bash ~/.claude/statusline.sh"
  }
}

この変更により、Claude CodeがJSONをスクリプトのstdinに直接渡すようになり、正常に表示されるようになりました。

/statusline コマンドで簡単セットアップ

ここまで手動でスクリプトを書いて設定する方法を紹介しましたが、
実はClaude Codeには /statusline コマンドが組み込まれており、指示するだけでスクリプトの生成から設定の適用まで行ってくれます。
(Windowsのトラブルシューティングしている中で気づきました)

使い方

Claude Codeのプロンプトで /statusline に続けて表示したい内容を入力します。

/statusline モデル名やコンテキスト使用料を表示して

これだけで、Claude Codeが以下を自動的に行います。

  1. 表示用スクリプトの生成(~/.claude/ 配下に配置)
  2. settings.json への statusLine 設定の追加
  3. 設定の即時適用

まとめ

上記設定を入れることで必要なステータスラインを設定することが出来ました。
渡される情報だったり、そこから計算できる内容だったろであれば自由に出力できるので、
色々カスタマイズしてみてもらうといいのではと思います!

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?