blog

Claude Codeのステータスライン(statusline)をカスタマイズする方法|設定・表示項目・スクリプト例

Claude Codeのステータスライン(statusline)のカスタマイズ

Claude Code のステータスライン(statusline)は、入力欄の下に常に表示される1〜数行の情報バーです。表示する中身は自分で決められ、モデル名・コンテキストの使用率・コストの目安・Git のブランチ・プランの利用枠などを、好きな形で並べられます。設定のしかたは2つあります。

  1. いちばん簡単な方法:Claude Code で /statusline モデル名とコンテキスト使用率を表示して のように頼む。Claude Code がスクリプトを作り、設定ファイルも書き換えます。
  2. 自分で作る方法:スクリプト(例:~/.claude/statusline.sh)を書き、~/.claude/settings.json の statusLine に登録します。

ステータスラインは手元のパソコンでスクリプトを実行して表示するだけなので、APIのトークンは消費しません。下の画面は、本記事の「カスタマイズ例5」のスクリプトを実際に設定して Claude Code を動かしたものです(2026年10月14日・Claude Code v2.1.299・Linux で撮影)。

Claude Code の画面下部に表示した2行のステータスライン(モデル名・フォルダ・ブランチ、コンテキスト使用率のバー・コストの目安・5時間枠)
画面の下から3行目と2行目が自作のステータスライン。1行目はモデル・フォルダ・ブランチ、2行目は使用率のバー・コストの目安・5時間枠の利用率です。

本記事では、設定の手順、スクリプトが受け取れる情報の一覧、コピペで動くカスタマイズ例(すべてこの端末で実行して確認済み)、Windows での書き方、表示されないときの対処を、Anthropic 公式ドキュメント「ステータスラインをカスタマイズする」(2026年10月14日確認)にもとづいて解説します。なお、ここで扱うのはターミナルで使う Claude Code(CLI)の機能です。Claude Code の全体像はClaude Codeとは、Claude(チャットのAI本体)についてはClaude(クロード)とはをご覧ください。

目次

Claude Codeのステータスライン(statusline)とは:仕組みと更新されるタイミング

ステータスラインの仕組みは単純です。Claude Code がセッションの情報を JSON にしてスクリプトの標準入力(stdin)に渡し、スクリプトが標準出力(stdout)に書いた文字を、そのまま画面に表示します。スクリプトが出力できるものなら何でも表示できるため、公式ドキュメントでは次のような使い方が挙げられています。

  • 作業しながらコンテキストウィンドウの使用量を見ておきたい
  • セッションのコストを把握したい
  • 複数のセッションを並行して動かしていて、見分けたい
  • Git のブランチと状態を常に見えるようにしておきたい
Claude Code セッション情報を生成 JSON (stdin) シェルスクリプト 整形・計算・出力 stdout ステータスライン ターミナル下部に表示
図1:Claude Code statuslineのデータフロー。セッションJSON→シェルスクリプト→ターミナル表示というシンプルなパイプライン構造。

表示される場所と、隠れるもの

ステータスラインは、組み込みのフッター(画面最下部のバッジ)の上に専用の行として表示され、フッター自体は置き換えません。ただし、ステータスラインを設定すると、フッターに出ていたキー操作のヒント(esc to interrupt、? for shortcuts など)の多くは表示されなくなります。また、ヘルプメニューや権限の確認画面を開いている間は、一時的に隠れます。

スクリプトが実行されるタイミング

スクリプトはセッションの開始時(再開時を含む)に1回実行され、その後は次のときに再実行されます。

きっかけ補足
Claude の新しい応答が届いたときいちばん多いきっかけ
/compact が終わったとき使用率が下がったことをすぐ反映
権限モード・Vim モードを切り替えたときモード表示を自作している場合に便利
設定の command を変えたとき待たずにすぐ新しいコマンドを実行
refreshInterval の秒数が経ったとき設定した場合だけ(後述)
利用枠の resets_at、プロンプトキャッシュの expires_at の時刻になったとき直前に受け取った JSON の時刻が基準

短い間に何度も変化があったときは300ミリ秒単位でまとめられ、変化が止まってから1回だけ実行されます。前のスクリプトが終わる前に次の更新が来た場合、実行中のスクリプトは中止されます。スクリプトを書き換えたときは、次に上のきっかけが来た時点で新しい内容が反映されます。そのため、スクリプトは軽く、すぐ終わるものにしておくのが大前提です。

出力できるもの

  • 複数行:echo を2回書けば2行になります(カスタマイズ例5)。
  • 色:\033[32m(緑)のような ANSI エスケープコードが使えます(端末が対応している必要があります)。
  • クリックできるリンク:OSC 8 というエスケープシーケンスで、文字をリンクにできます(iTerm2・Kitty・WezTerm など対応端末のみ。macOS は Cmd+クリック、Windows・Linux は Ctrl+クリック)。

スクリプトの出力は Claude Code が受け取ってから表示するため、スクリプトの中で tput cols を使っても端末の幅は分かりません。幅に合わせて表示を変えたいときは、Claude Code が実行前に設定する環境変数 COLUMNS・LINES を読みます。

関連記事Claude Codeの便利コマンドは? / Claude Codeのhooksの設定方法は?

いちばん簡単な設定:/statusline コマンドで作ってもらう

Claude Code の入力欄で /statusline に続けて、表示したい内容を普通の言葉で書きます。日本語でもかまいません。/statusl まで打つと、候補に「Set up Claude Code’s status line UI」と表示されます。

Claude Code の入力欄に /statusl と入力したときに出る /statusline コマンドの候補(Set up Claude Code's status line UI)
入力欄に /statusl と打ったところ(Claude Code v2.1.299・2026年10月14日撮影)。続けて表示したい内容を書いて Enter を押します。
/statusline モデル名とコンテキスト使用率をバーで表示して

Claude Code が ~/.claude/ にスクリプトを作り、ユーザー設定(~/.claude/settings.json)の statusLine を書き換えます。途中でファイル編集の許可を求められたら承認してください。作られたスクリプトは普通のファイルなので、あとから開いて自分で直せます。「まず /statusline で作らせて、細かいところを手で直す」という進め方がいちばん早く仕上がります。

やめたいときは、/statusline delete(clear・remove it でも可)と頼むか、settings.json から statusLine の項目を消します。スラッシュコマンド全体についてはClaude Codeスラッシュコマンド一覧と使い方で解説しています。

手動で設定する手順:スクリプトを書いて settings.json に登録する

表示を細かく決めたいときは、自分でスクリプトを用意します。ここでは公式の手順と同じ流れで、「モデル名・フォルダ名・コンテキスト使用率」を出す1行のステータスラインを作ります。macOS・Linux の Bash の例です(Windows は後述)。JSON の読み取りに jq を使うので、入っていなければ先にインストールしてください。

手順1:スクリプトを作る

~/.claude/statusline.sh として次の内容を保存します。

#!/bin/bash
# Claude Code が標準入力に渡す JSON を読み込む
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
DIR=$(echo "$input" | jq -r '.workspace.current_dir')
# "// 0" は値がまだ無い(null)ときの代わりの値
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
echo "[$MODEL] ${DIR##*/} | context ${PCT}%"

${DIR##*/} は、フォルダのパスから最後の名前だけを取り出す書き方です。表示例:[Opus] my-app | context 25%

手順2:実行できるようにする

chmod +x ~/.claude/statusline.sh

手順3:settings.json に登録する

~/.claude/settings.json に statusLine を追加します。type は "command"(シェルのコマンドを実行する、という意味)、command にスクリプトのパスを書きます。ほかの設定がすでにある場合は、いちばん外側の { } の中に項目として足してください。

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

Claude Code は設定ファイルを自動で読み直すので、保存した時点でスクリプトが実行され、入力欄の下に表示されます。

手順4:見本の JSON で動作を確かめる

うまく表示されないときに備えて、スクリプト単体で動くかを先に確かめておくと安心です。公式ドキュメントのヒントと同じく、見本の JSON をパイプで渡します。

echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/my-app"},"context_window":{"used_percentage":25},"session_id":"test-abc"}' | ~/.claude/statusline.sh
見本のJSONをステータスラインのスクリプトに渡して表示を確かめているターミナルの画面
見本の JSON(使用率86%)を本記事のスクリプト3本に渡した実行結果。80%以上なのでバーが赤くなり「/compact を検討」が出ています。最後の echo $? の 0 は、正常に終わったことを示します。

どの設定ファイルに書くか

statusLine は、ユーザー設定(~/.claude/settings.json・全プロジェクト共通)にも、プロジェクト設定(プロジェクトの .claude/settings.json、自分だけの .claude/settings.local.json)にも書けます。同じ項目が複数の場所にあるときは、公式の優先順位どおり「組織の管理設定 → コマンドラインの指定 → .claude/settings.local.json → .claude/settings.json → ユーザー設定」の順で上が勝ちます。つまり、プロジェクト設定に書いた statusLine はユーザー設定より優先されます。チームで共有する .claude/settings.json に入れる場合は、スクリプトもリポジトリに含め、メンバー全員の環境で同じパスで動くかを確かめてください。

command はシェルで実行されるので、ファイルを作らずに1行のコマンドを直接書くこともできます。

{
  "statusLine": {
    "type": "command",
    "command": "jq -r '\"[\\(.model.display_name)] \\(.context_window.used_percentage // 0)% context\"'"
  }
}

表示できる情報:スクリプトが受け取る JSON の項目一覧

スクリプトの標準入力には、次の項目を含む JSON が渡されます(公式ドキュメント「Available data」より、2026年10月14日確認)。よく使うものを先に並べています。

項目内容
model.display_name / model.id使っているモデルの表示名と識別子
workspace.current_dir(cwd も同じ値)いまの作業フォルダ
context_window.used_percentage / remaining_percentageコンテキストウィンドウの使用率・残りの割合(計算済み)。セッションの最初は null のことがある
context_window.context_window_size最大のコンテキストサイズ(既定200,000、拡張コンテキストのモデルは1,000,000)
cost.total_cost_usdセッションのコストの目安(米ドル)。手元で定価から計算した値で、実際の請求額とは異なる場合があります。/clear で新しいセッションになると0に戻る
cost.total_duration_ms / total_api_duration_ms経過時間・API の応答待ち時間(ミリ秒)
cost.total_lines_added / total_lines_removed追加・削除したコードの行数
rate_limits.five_hour.* / rate_limits.seven_day.*5時間枠・7日間枠の利用率(used_percentage・0〜100)とリセット時刻(resets_at・Unix秒)。claude.ai の Pro・Max の契約で、セッション最初の応答のあとから届く
session_id / session_nameセッションの識別子・名前(/rename などで付けた名前か、自動で付いた題)
workspace.project_dir / workspace.added_dirsClaude Code を起動したフォルダ・/add-dir で足したフォルダ
workspace.repo.host / owner / nameorigin リモートから読み取ったリポジトリ(例:github.com・anthropics・claude-code)
pr.number / pr.url / pr.review_stateいまのブランチで開いているプルリクエスト(見つかったときだけ)
effort.level / thinking.enabled / fast_mode推論の強さ(low〜max)・拡張思考・高速モードの状態
vim.mode / output_style.name / agent.nameVim モード(有効なときだけ)・出力スタイル・--agent で起動したときのエージェント名
worktree.* / workspace.git_worktreeworktree のセッション中・リンクされた worktree の中にいるときの情報
prompt_cacheプロンプトキャッシュの状況(後述。v2.1.251以降)
version / transcript_pathClaude Code のバージョン・会話記録のファイルのパス

Git のブランチ名や変更の数は、この JSON には入っていません。JSON にあるのはリポジトリの識別(workspace.repo)とプルリクエストまでです。ブランチを表示したいときは、スクリプトの中で git branch --show-current などを実行して取得します(カスタマイズ例3)。

実際に届く JSON を見る方法

自分の環境でどの項目が届いているかを確かめたいときは、受け取った JSON をファイルに書き出すだけのスクリプトを一時的に登録します。

#!/bin/bash
input=$(cat)
echo "$input" > /tmp/statusline-input.json
echo "JSONを保存しました"

Claude Code で一度やり取りしてから jq . /tmp/statusline-input.json で中身を見ると、使える項目と実際の値が分かります。確かめ終わったら、元のスクリプトに戻してください。

注意したいのは「無い項目」と「null の項目」の違いです。rate_limits・vim・pr・worktree などは条件を満たすまで項目そのものがありません。context_window.used_percentage はセッションの最初に null になることがあります。jq の // 0(null のとき0)や // empty(無いときは何も出さない)で、どちらにも備えておくと表示が崩れません。なお、used_percentage は入力トークン(キャッシュの読み書きを含む)だけから計算され、出力トークンは含みません。

Claude Code・AIエージェントの業務導入をご検討の方は、自社での開発実例を公開しているクリスタルメソッドの無料相談をご利用ください。

カスタマイズ例:コピペで動くスクリプト5本

ここからは目的別のスクリプトです。どれも、この端末(Linux・Claude Code v2.1.299・jq 1.7.1)で見本の JSON を渡して実行し、表示例のとおりに出ることを確かめました(2026年10月14日)。使い方はどれも同じで、ファイルに保存 → chmod +x → settings.json の command にパスを書く、の3つです。

例1:モデル・フォルダ・使用率(最小構成)

上の「手動で設定する手順」のスクリプトがそのまま最小構成です。迷ったらここから始め、必要になった情報を足していくと、自分に合った形に落ち着きやすくなります。

例2:使用率で色が変わるバーと /compact の合図

使用率を10マスのバーにして、50%未満は緑、80%未満は黄、80%以上は赤にします。80%を超えたら「/compact を検討」と出すので、会話を圧縮するタイミングを逃しにくくなります。

#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
# 50%未満は緑、80%未満は黄、80%以上は赤
if [ "$PCT" -ge 80 ]; then C='\033[31m'
elif [ "$PCT" -ge 50 ]; then C='\033[33m'
else C='\033[32m'; fi
R='\033[0m'
# 10マスのバー(1マス=10%)
FILLED=$((PCT / 10)); BAR=""
for i in 1 2 3 4 5 6 7 8 9 10; do
  if [ "$i" -le "$FILLED" ]; then BAR="${BAR}▓"; else BAR="${BAR}░"; fi
done
MSG=""; [ "$PCT" -ge 80 ] && MSG=" /compact を検討"
printf '%b\n' "[$MODEL] ${C}${BAR} ${PCT}%${R}${MSG}"

表示例(使用率86%のとき・赤):[Opus] ▓▓▓▓▓▓▓▓░░ 86% /compact を検討。色のコードを解釈させるため、echo ではなく printf '%b' で出力しています。

例3:Git のブランチと変更の数(5秒キャッシュつき)

ブランチ名と、ステージ済み(+)・未ステージ(~)のファイル数を出します。大きなリポジトリでは git diff が遅くなることがあるため、公式ドキュメントの例と同じく結果を一時ファイルに5秒間ためて、毎回は git を実行しないようにしています。一時ファイルの名前には、セッションごとに変わらない session_id を使います($$ のようなプロセス番号は実行のたびに変わるので、キャッシュになりません)。

#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
DIR=$(echo "$input" | jq -r '.workspace.current_dir')
SID=$(echo "$input" | jq -r '.session_id')
# 結果をセッションごとのファイルに5秒間ためて、git を毎回は実行しない
CACHE="/tmp/statusline-git-$SID"
# 状態を見るだけの git がロックを取らないようにする(ほかの git 操作とぶつからない)
export GIT_OPTIONAL_LOCKS=0
AGE=999
if [ -f "$CACHE" ]; then
  MT=$(stat -c %Y "$CACHE" 2>/dev/null || stat -f %m "$CACHE")
  AGE=$(( $(date +%s) - MT ))
fi
if [ "$AGE" -gt 5 ]; then
  if git -C "$DIR" rev-parse --git-dir >/dev/null 2>&1; then
    B=$(git -C "$DIR" branch --show-current)
    S=$(git -C "$DIR" diff --cached --numstat | wc -l | tr -d ' ')
    M=$(git -C "$DIR" diff --numstat | wc -l | tr -d ' ')
    echo "$B|$S|$M" > "$CACHE"
  else
    echo "||" > "$CACHE"
  fi
fi
IFS='|' read -r B S M < "$CACHE"
if [ -n "$B" ]; then
  echo "[$MODEL] ${DIR##*/} | $B +$S ~$M"
else
  echo "[$MODEL] ${DIR##*/}"
fi

表示例:[Opus] my-app | main +0 ~1(未ステージの変更が1ファイル)。stat -c %Y は Linux、stat -f %m は macOS の書き方で、Linux の形を先に試します。GIT_OPTIONAL_LOCKS=0 は git の環境変数で、git --no-optional-locks と同じ意味です。表示のためだけに走る git が、Claude Code や自分の git 操作とロックで競合するのを避けられます。

例4:プランの利用枠(5時間・7日)と、リセットまでの残り時間

Pro・Max で契約している場合は、5時間枠と7日間枠の利用率が JSON に入ります。リセット時刻(resets_at・Unix秒)と現在時刻の差から、残り時間も出せます。契約していない場合や、セッションの最初の応答の前は項目が無いので、// empty で空にして「利用枠の情報なし」と出します。

#!/bin/bash
input=$(cat)
NOW=$(date +%s)
# 終了時刻(Unix秒)までの残りを「1h05m」の形にする
left() {
  local s=$(( $1 - NOW )); [ "$s" -lt 0 ] && s=0
  printf '%dh%02dm' $((s / 3600)) $((s % 3600 / 60))
}
F=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')
FR=$(echo "$input" | jq -r '.rate_limits.five_hour.resets_at // empty')
W=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')
OUT=""
if [ -n "$F" ]; then
  OUT="5h $(printf '%.0f' "$F")%"
  [ -n "$FR" ] && OUT="$OUT (あと$(left "$FR"))"
fi
[ -n "$W" ] && OUT="${OUT:+$OUT | }7d $(printf '%.0f' "$W")%"
echo "${OUT:-利用枠の情報なし}"

表示例:5h 24% (あと1h05m) | 7d 41%。リセット時刻を過ぎると Claude Code がスクリプトを再実行するので、表示が古いまま残ることはありません。利用枠の仕組みはClaude Codeの料金体系で解説しています。

例5:2行表示(冒頭の画面のスクリプト)

echo を2回書くと2行になります。1行目にモデル・フォルダ・ブランチ、2行目に色付きのバー・コストの目安・5時間枠を並べた、冒頭の画面のスクリプトです。

#!/bin/bash
input=$(cat)
MODEL=$(echo "$input" | jq -r '.model.display_name')
DIR=$(echo "$input" | jq -r '.workspace.current_dir')
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
F=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')
B=$(git -C "$DIR" branch --show-current 2>/dev/null)
# 1行目:モデル・フォルダ・ブランチ
echo "[$MODEL] ${DIR##*/}${B:+ | $B}"
# 2行目:色付きのバー・コストの目安・5時間枠
if [ "$PCT" -ge 80 ]; then C='\033[31m'
elif [ "$PCT" -ge 50 ]; then C='\033[33m'
else C='\033[32m'; fi
R='\033[0m'; BAR=""
for i in 1 2 3 4 5 6 7 8 9 10; do
  if [ "$i" -le $((PCT / 10)) ]; then BAR="${BAR}▓"; else BAR="${BAR}░"; fi
done
LINE2="${C}${BAR} ${PCT}%${R} | \$$(printf '%.2f' "$COST")"
[ -n "$F" ] && LINE2="$LINE2 | 5h $(printf '%.0f' "$F")%"
printf '%b\n' "$LINE2"

次の動画は、このスクリプトを設定した Claude Code を起動し、質問して応答が返ったところです。応答のあとに使用率とコストの目安が更新されるのが分かります(2026年10月14日・この端末で録画)。

起動直後は使用率0%・$0.00。質問への応答が届くと、2行目の使用率・コストの目安・5時間枠が更新されます。

2行・色つきのステータスラインは、ほかの画面の更新と重なったときに表示が乱れることがあります(公式ドキュメントのトラブルシューティングより)。乱れが気になるときは、色を外すか1行にしてみてください。

jq を入れたくない場合:Python 版

Python や Node.js は JSON をそのまま読めるので、jq は要りません。例1と同じ表示を Python で書くと次のとおりです(実行確認済み)。

#!/usr/bin/env python3
import json, sys

d = json.load(sys.stdin)
model = d["model"]["display_name"]
folder = d["workspace"]["current_dir"].rstrip("/\\")
folder = folder.replace("\\", "/").split("/")[-1]
pct = int((d.get("context_window") or {}).get("used_percentage") or 0)
print(f"[{model}] {folder} | context {pct}%")

作らずに使う:コミュニティのツール

公式ドキュメントでは、テーマや追加機能つきの設定をまとめたコミュニティのプロジェクトとして ccstatusline と starship-claude が紹介されています。どちらも Anthropic の製品ではないので、使う前に中身(実行されるコマンド)を確かめてください。

追加の設定項目:表示間隔・余白・Vimモード・キャッシュ・サブエージェント行

statusLine には type・command のほかに、次の項目を足せます(公式ドキュメント、2026年10月14日確認)。

項目内容と使いどころ
refreshIntervalN秒ごとにも再実行する(最小1)。時計のように時間で変わる表示や、メインの会話が止まっている間にバックグラウンドのサブエージェントが Git の状態を変えるときに使う。指定しなければ、きっかけがあったときだけ実行
padding左右の余白を文字数で足す(既定0)。画面の端からの距離ではなく、組み込みの余白に足す値
hideVimModeIndicatortrue にすると、入力欄の下の -- INSERT -- を隠す。スクリプトで vim.mode を表示していて、二重に出したくないとき
{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh",
    "padding": 2,
    "refreshInterval": 5
  }
}
refreshInterval 1秒と padding 2 を設定し、待機中も時刻が更新されているステータスライン
refreshInterval: 1 と padding: 2 で、モデル名と時刻(date +%H:%M:%S)を出した実際の画面。何も操作していない間も1秒ごとに時刻が進み、左に2文字ぶんの余白が足されています。

プロンプトキャッシュの状況(prompt_cache)

Claude Code v2.1.251 以降では、メインの会話のプロンプトキャッシュの状況が prompt_cache として届きます(最初の応答のあとから。サブエージェントのリクエストは含みません)。短い表示なら warm と hit_ratio の2つで十分です。

項目意味
warmキャッシュがまだ有効期間内か
hit_ratio入力トークンのうちキャッシュから読めた割合(0〜1)
ttlキャッシュの有効期間("5m" または "1h")
expires_atキャッシュが切れる時刻(Unix秒)。この時刻になるとスクリプトが再実行される
missesキャッシュにあったはずの内容を処理し直したリクエストの数
caching_observedこのセッションでキャッシュが報告されたか。false ならキャッシュがオフか、経路が報告していない

例4の left 関数に expires_at を渡せば、キャッシュが切れるまでの残り時間も表示できます。組織の Claude apps gateway で支出上限が設定されている場合は、rate_limits.spend_limit(使用率・リセット時刻など)も届きます。

サブエージェントの行を自作する(subagentStatusLine)

入力欄の下のエージェントパネルに並ぶサブエージェントの行(既定は「名前・説明・トークン数」)は、subagentStatusLine で自分の表示に置き換えられます。

{
  "subagentStatusLine": {
    "type": "command",
    "command": "~/.claude/subagent-statusline.sh"
  }
}

コマンドには、表示中の行がまとめて1つの JSON(tasks の配列。各行に id・name・status・tokenCount など)として渡されます。置き換えたい行ごとに {"id": "<task id>", "content": "<表示内容>"} を1行ずつ標準出力へ書くと、その行が置き換わります。id を書かなかった行は既定の表示のまま、content を空にするとその行は隠れます。サブエージェントそのものについてはClaude Codeのサブエージェントをご覧ください。

Windowsでのstatusline設定(Git Bash / PowerShell)

Windows では、Git Bash が入っていれば Git Bash で、無ければ PowerShell でステータスラインのコマンドが実行されます。

Claude Code 公式ドキュメント(日本語)のステータスライン「Windows 設定」の項目
出典:Claude Code 公式ドキュメント「ステータスラインをカスタマイズする」の「Windows 設定」(code.claude.com/docs/ja/statusline・2026年10月14日に表示)。この端末は Linux のため、Windows の実画面は撮っていません。
  • パスはスラッシュで書く:Git Bash はバックスラッシュをエスケープ文字として扱うため、C:\Users\… と書くと区切りが消えて、エラーも出ずに動きません。C:/Users/… のようにスラッシュで書きます。~ も使え、Windows のホームフォルダになります。
  • Git Bash がある場合:macOS・Linux と同じ Bash スクリプト("command": "~/.claude/statusline.sh")が使えます。jq が無い環境では、公式の例のように grep と cut で値を取り出す方法もあります。
  • PowerShell のスクリプトを使う場合:powershell 経由で呼び出します。この書き方は、Git Bash・PowerShell のどちらで実行されても動きます。
{
  "statusLine": {
    "type": "command",
    "command": "powershell -NoProfile -File C:/Users/username/.claude/statusline.ps1"
  }
}

statusline.ps1 の例(公式ドキュメントと同じ内容):

$input_json = $input | Out-String | ConvertFrom-Json
$cwd = $input_json.cwd
$model = $input_json.model.display_name
$used = $input_json.context_window.used_percentage
$dirname = Split-Path $cwd -Leaf

if ($used) {
    Write-Host "$dirname [$model] ctx: $used%"
} else {
    Write-Host "$dirname [$model]"
}

PowerShell では JSON を ConvertFrom-Json で読み、$input_json.model.display_name のようにドットで項目をたどります。Windows での導入全般はClaude CodeをWindowsで使う方法で解説しています。

ステータスラインが表示されないときの対処(トラブルシューティング)

表示されない・空になるときは、上から順に確かめてください(公式ドキュメントのトラブルシューティングより)。

症状原因と対処
何も表示されない①スクリプトに実行権限があるか(chmod +x)②標準出力に書いているか(標準エラーでは表示されない)③見本の JSON を渡して単体で動くか ④Windows で Git Bash を使っている場合、パスがバックスラッシュになっていないか
新しいフォルダで空のままフォルダを信頼するかの確認(下の画面)を承認するまで、ステータスラインは実行されません。Claude Code を起動し直して承認します
急に表示されなくなったスクリプトが0以外の終了コードで終わったか、何も出力しなかった可能性があります。終了コード0で終わったときだけ表示されます。claude --debug で、スクリプトの標準エラーと(セッション最初の実行の)終了コードがログに出る
設定しても一切出ない設定に disableAllHooks: true があると、組織の管理設定以外の statusLine は動きません。組織が allowManagedHooksOnly を設定している場合も、管理設定の statusLine しか使えない(管理者に確認)
-- や空の値が出る最初の応答が届く前は項目が null のことがあります。// 0 などで代わりの値を入れる。何度やり取りしても空なら Claude Code を再起動
使用率が /context と違うステータスラインは直前の応答の値、/context はその後に足されたメッセージの見積もりも含むため、次の応答までは /context のほうが高く出ることがある
表示が古いまま・遅い遅いスクリプトは終わるまで表示を更新できません。重い処理はキャッシュする(例3)
右側が切れる通知(MCP サーバーのエラー・自動更新・コンテキスト残量の警告など)はステータスラインと同じ行の右側に出るため、狭い端末では切れることがあります。表示を短くするか、COLUMNS を見て短くする
リンクがクリックできないOSC 8 に対応した端末(iTerm2・Kitty・WezTerm)が必要。Terminal.app は非対応。文字は出るのに押せないときは FORCE_HYPERLINK=1 claude で起動。SSH・tmux で消えることもあります。\e]8;; がそのまま見えるときは echo -e ではなく printf '%b' を使う
Claude Code のフォルダを信頼するかの確認画面(承認するまでステータスラインは表示されない)
初めて開くフォルダでは「Yes, I trust this folder」を選ぶまでステータスラインは表示されません(ステータスラインはシェルのコマンドを実行するため、フックと同じ扱いです)。

どうしても原因が分からないときは、Claude Code 自身に「設定ファイルを読んで、statusLine のコマンドを直接実行してエラーを確かめて」と頼むのも、公式ドキュメントで勧められている方法です。

運用のコツ:軽く・安全に・チームで共有する

  • 表示は短く、見たいものだけ:表示できる幅は限られ、長いと切れたり折り返したりします。常に気にしている情報(モデル・使用率など)に絞ると、かえって判断が速くなります。
  • スクリプトは軽く保つ:応答のたびに実行されます。ネットワーク通信や重いファイル処理は入れず、必要ならキャッシュを使います(例3)。
  • 受け取った文字列を実行しない:スクリプトはシェルとして実行されます。JSON の値を eval に渡すような書き方は避け、変数は "$VAR" のように二重引用符で囲みます。
  • コストの数字は目安として見る:cost.total_cost_usd は手元で定価から計算した値で、実際の請求とは異なる場合があります。Pro・Max の契約で使い過ぎを見ておきたいときは、利用枠(例4)を表示すると分かりやすくなります。
  • チームで配るときはプロジェクトに入れる:.claude/settings.json とスクリプトをリポジトリに入れ、スクリプトのパスがメンバー全員の環境で有効かを確かめておくと、全員で同じ表示を使えます。個人の好みは .claude/settings.local.json かユーザー設定に書きます。

監修者の運用から(一次情報)

監修者・河合継は Claude Code を1年以上、実務で使ってきました。ステータスラインは凝りだすときりがありませんが、実用にするコツは「見たいものだけ出す」ことだと感じています。まず最小構成で使い、欲しくなった情報を後から足していくほうが、自分に合った形に落ち着きます。

まとめ:設定の流れ

  1. 作る:/statusline に表示したい内容を頼むか、~/.claude/statusline.sh を自分で書いて chmod +x。
  2. 登録する:~/.claude/settings.json(全体)かプロジェクトの .claude/settings.json に "statusLine": {"type": "command", "command": "…"}。
  3. 確かめる:見本の JSON をパイプで渡して単体で動かし、Claude Code の画面でも表示を確認。出ないときは信頼の確認・終了コード・claude --debug。
  4. 育てる:色・Git・利用枠・2行表示などを、必要になった順に足す。

Claude Code のほかの機能はClaude Codeの使い方ガイド、イベントに合わせて処理を動かす仕組みはClaude CodeのHooksで解説しています。


よくある質問

Q. Claude Code のステータスラインとは何ですか?
A. 入力欄の下に常に表示される1〜数行の情報バーです。Claude Code がセッションの情報を JSON にしてスクリプトの標準入力に渡し、スクリプトが標準出力に書いた文字をそのまま表示します。モデル名・コンテキストの使用率・コストの目安・Git のブランチなどを自由に並べられ、手元で実行されるため API のトークンは消費しません。

Q. ステータスラインはどうやって設定しますか?
A. いちばん簡単なのは、Claude Code で「/statusline モデル名とコンテキスト使用率を表示して」のように頼む方法です。スクリプトの作成と ~/.claude/settings.json の書き換えを Claude Code が行います。自分で作る場合は、スクリプトを保存して chmod +x で実行できるようにし、settings.json に “statusLine”: {“type”: “command”, “command”: “スクリプトのパス”} を追加します。

Q. settings.json の statusLine にはどんな項目を書けますか?
A. 必須は type(”command”)と command(スクリプトのパスか1行のコマンド)です。任意で、左右の余白を足す padding(既定0)、N秒ごとにも再実行する refreshInterval(最小1)、入力欄の下の — INSERT — を隠す hideVimModeIndicator を指定できます。

Q. ユーザー設定とプロジェクト設定の両方に statusLine がある場合、どちらが使われますか?
A. プロジェクト設定が優先されます。公式の優先順位は、組織の管理設定、コマンドラインの指定、.claude/settings.local.json、.claude/settings.json、ユーザー設定(~/.claude/settings.json)の順です。

Q. Git のブランチ名はステータスラインの JSON に含まれますか?
A. 含まれません。JSON にあるのは origin リモートから読み取ったリポジトリの識別(workspace.repo)と、開いているプルリクエスト(pr)までです。ブランチ名や変更の数は、スクリプトの中で git branch –show-current や git diff –numstat を実行して取得します。

Q. プランの利用枠(5時間・7日)を表示できますか?
A. claude.ai の Pro・Max の契約であれば、rate_limits.five_hour と rate_limits.seven_day に利用率(used_percentage)とリセット時刻(resets_at・Unix秒)が届きます。セッション最初の応答のあとから届き、契約によっては項目が無いため、jq の // empty などで無い場合に備えます。

Q. ステータスラインが表示されないときは何を確認しますか?
A. スクリプトの実行権限、標準出力に書いているか、見本の JSON を渡して単体で動くか、フォルダを信頼する確認を承認したか、スクリプトが終了コード0で終わっているか、disableAllHooks が設定されていないかを確認します。claude –debug で起動すると、スクリプトの標準エラーがログに出ます。

Q. Windows ではどう設定しますか?
A. Git Bash があれば Git Bash で、無ければ PowerShell でコマンドが実行されます。パスはバックスラッシュではなくスラッシュで書きます。PowerShell のスクリプトは “powershell -NoProfile -File C:/Users/username/.claude/statusline.ps1” のように powershell 経由で呼び出します。

Q. ステータスラインを消すにはどうしますか?
A. /statusline delete(clear・remove it でも可)と頼むか、settings.json から statusLine の項目を削除します。


参考文献

Claude Code・AIエージェントの業務活用をご検討の方へ

クリスタルメソッドは、Claude Codeを日々の業務で使いながら、AIエージェント・社員AIの導入と開発効率化を支援しています。自社サイトの表示速度をAI社員(Claude Code)で12.89秒→2.03秒に短縮した実例も事例記事として公開しています。「自社の開発・業務にAIをどう組み込むか」といったご相談を承っています。

AIブログ購読

 
クリスタルメソッドがお届けする
AIブログの更新通知を受け取る

監修

河合 継(クリスタルメソッド株式会社 代表取締役)

AI・ディープラーニングに関する特許16件の発明者。過去、国立がん研究センターとの共同研究や、テレビ番組でのAI解説実績を持つAI研究者として、AIの研究開発を主導している。
運営会社について | 編集方針

Read next

あわせて読みたい

  • Claude Code コマンド完全ガイド|スラッシュコマンド116個+CLIオプション+ショートカット一覧【2026年版】

    Claude Code には 100個を超えるスラッシュコマンドがあり、長く使っていても「どの場面でどれを使うのか」は意外と掴みにくいものです。本ページでは全コ...

  • Claude Code 知られざる便利コマンド完全解説|/btw・/recap・/focusで効率化

    Claude Code 知られざる便利コマンド完全解説|/btwの仕組みと使い分け

    Claude Codeに追加された /btw というコマンドを知ったとき、多くのエンジニアは「普通のチャットと何が違うの?」と感じるはずだ。動作だけ見れば、Cl...

  • 対話・チャットLLMのイメージ

    Claude Code hooks(フック)の設定と活用ガイド【2026】

    Claude Code Hooksとは何か:概要と位置づけ Claude Code Hooks(フック)は、Claude Codeの実行サイクルの決まったタイミ...

View more