Claude Code のステータスラインを設定してみた
今回は、Claude Code のステータスラインというものを
色々ガチャガチャいじっていこうと思う。
きっかけは、講義動画を撮るために色々な人の動画を見ていたことだった。
大体どの人も Claude Code の入力欄の下に、現在の Context Window 消費量だったり、
レートリミットの残量だったり、セッション時間が表示されている。
しかもそれらに、個人の趣味嗜好が反映された絵文字なんかが添えられていて、
なんだろうこれ、なんか良さそう、と思ったのが発端だ。
そこから少し考えが派生していく。
今では実務も含めて、大抵のことは AI が指示通りに片付けてしまう。
便利になった一方で、エンジニアを始めたばかりの頃に確かにあった
「ぼくがかんがえたさいきょうのやつ」みたいな遊びマインド、
心の余白みたいなものが、いつの間にか消えかけているなと感じていた。
だとすれば、こういう自分好みの設定をちまちま反映していくことで、
その余白を少しは取り戻せるんじゃないか。
そんな気がしてきた。
まあ理屈は後付けで、要はちょっとふざけてみたいだけなのだが。
とりあえず、ガチャガチャやってみようや、というのが今回のお話。
ステータスラインってなんだ
公式ドキュメント はこれらしい。
Claude Code でコンテキスとウィンドウの使用状況、コスト、git ステータスを
監視するカスタムステータスバーを設定することができるそう。
そもそもステータスラインとは何かということだが、
Claude Codeの入力欄の下にあるあれだ。
その部分に、設定したシェルスクリプトを実行した結果を加工して表示することができるそう。
公式のものを借りるとこのような感じ。
これを見ると、
- 現在使用しているモデル
- 現在いるディレクトリ名
- 現在のブランチ名
- コンテキストウィンドウの消費量
- 消費した金額
- セッション時間
が表示されている。
今回は5時間ごとのリミットに対する現在消費量、1週間ごとのリミットに対する現在消費量等も
合わせて表示していきたいので、それらを表示できるようにしていく。
設定してみる
設定する上でスクリプトが必要で、
そのスクリプトを自分でかいて設定に追加するか、
/statusline コマンドを使うことで設定できるそう。
今回はサッとやりたいので /statusline コマンドを使うことにする。
使い方は /statusline 要望らしいが、
多分 /statusline と入力してもいけそうなのでやってみる。
勝手に色々設定されたので esc で戻して要望書いてリトライ。
/statusline
複数行で設定したい。1行目は使用モデル、現在のコンテキストウィンドウ使用料(5%のようなイメージ)
、現在いるブランチ名、セッション時間。2行目は5days limitの progress bar、3行目は 1weeks
limitのprogress barでやってほしい。絵文字を使って欲しい。
例としては
[Opus] 📝 8% (features/auth) ⏱️ 7m30s
(いい感じの絵文字と文字とprogress bar 5daysだっけ)
(いい感じの絵文字と文字とprogress bar 1weeks)
少し経つとこんな感じになった。
ただ、ブランチ名が表示されていないのと、
消費コンテキストウィンドウが 0の時に非表示になってしまうので
それを修正してもらおう。
あとセッションの経過時間もいらなそうなので削除してもらう。
ok、/clearしても 0%になった。
スクリプトを書いてもらう
#!/bin/bash
input=$(cat)
# Extract values from JSON
model=$(echo "$input" | jq -r '.model.display_name // "Unknown"')
used_pct=$(echo "$input" | jq -r '.context_window.used_percentage // empty')
cwd=$(echo "$input" | jq -r '.cwd // .workspace.current_dir // "."')
five_hour_pct=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')
seven_day_pct=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')
# Shorten model name: "Claude Opus 4" -> "Opus 4", "Claude Sonnet 4.5" -> "Sonnet 4.5"
model_short=$(echo "$model" | sed 's/^Claude //')
# Get branch name from cwd
branch=$(git -C "$cwd" --no-optional-locks branch --show-current 2>/dev/null || echo "")
# Build progress bar using awk (width=22 chars)
make_bar() {
local pct=$1
awk -v pct="$pct" 'BEGIN {
w = 22
filled = int(pct * w / 100 + 0.5)
if (filled > w) filled = w
if (filled < 0) filled = 0
empty = w - filled
bar = ""
for (i = 0; i < filled; i++) bar = bar "\342\226\210"
for (i = 0; i < empty; i++) bar = bar "\342\226\221"
print bar
}'
}
# ── Line 1: [Model] 📝 X% 🌿 (branch) ──────────────────────────────────────────
line1="[${model_short}]"
line1="${line1} 📝 $(printf '%.0f' "${used_pct:-0}")%"
if [ -n "$branch" ]; then
line1="${line1} 🌿 (${branch})"
fi
# ── Line 2: ⚡ 5h limit progress bar ─────────────────────────────────────────
line2=""
if [ -n "$five_hour_pct" ]; then
pct_int=$(printf '%.0f' "$five_hour_pct")
bar=$(make_bar "$pct_int")
line2="⚡ 5h [${bar}] ${pct_int}%"
fi
# ── Line 3: 📅 7day limit progress bar ───────────────────────────────────────
line3=""
if [ -n "$seven_day_pct" ]; then
pct_int=$(printf '%.0f' "$seven_day_pct")
bar=$(make_bar "$pct_int")
line3="📅 7day [${bar}] ${pct_int}%"
fi
# ── Output ────────────────────────────────────────────────────────────────────
output="${line1}"
[ -n "$line2" ] && output="${output}\n${line2}"
[ -n "$line3" ] && output="${output}\n${line3}"
printf "%b\n" "$output"あんまり構文には踏み込まないが、CCに頼んだら説明してくれると思うのでここでは省略
設定に追加する
全部CCがやってくれたが、設定に追加するには以下のようにする。
~/.claude/settings.jsonで設定を追加する。
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh"
}
}つまずいたところ
つまづくところは特にない。
終わりに
無事に設定できた。
あとは使ってみるだけ。
自分のsettings.local.jsonでも設定できると思うので、
実務の方も設定してみようと思う。
多分、結構初歩的だし、今更?という内容かもだが
まぁやらないよりマシでしょう。
ただAIの設定やそこら辺に熱中することなく
まずは既存の学習をしっかり続けていくことは忘れないようにしていきたい。
AIは結局、作業者の能力増幅装置でしかないから。