カテゴリー / 使い方の基本

Claude Codeのステータスライン設定|手順と表示不良時の対処

この記事の目次

Claude Codeのステータスライン設定は、settings.json に statusLine を追加し、type を "command"、command に実行するスクリプトを指定するだけです。もっと手早く済ませたいなら、/statusline コマンドに表示したい内容を自然言語で頼めば、Claude Codeがスクリプトを作って自動設定まで一括で行います。表示されないときは、実行権限、終了コード、フォルダの信頼、組織の管理設定の順に確かめれば切り分けられます。

この記事は、2026年10月18日に確認した公式ドキュメント「Customize your status line」の記述に基づいています。

ステータスラインとは何を表示する仕組みか

ステータスラインは、Claude Codeの画面下部に出る表示欄です。中身は、自分で指定したシェルスクリプトの表示結果がそのまま使われます。Claude Codeはセッションの情報(モデル名、作業ディレクトリ、セッションIDなど)をJSONにしてスクリプトの標準入力へ渡し、スクリプトが標準出力に書いた文字列を表示します。

公式によると、ステータスラインはローカルで動き、APIトークンを消費しません。組み込みのフッターバッジの上に独自の行として出て、バッジを置き換えるものではありません。ヘルプメニューや権限確認の表示中は一時的に隠れます。

設定すると、フッターに出ていたキーボードのヒント(esc to interrupt や ? for shortcuts など)の大半が表示されなくなります。これは仕様で、不具合ではありません。

/statuslineコマンドで設定する手順は?

自然言語で設定したい場合は /statusline コマンドを使います。表示したい内容を自然言語で伝えると、Claude Codeが ~/.claude/ にスクリプトを生成し、設定を自動で更新します。公式の例は次のとおりです。

/statusline show model name and context percentage with a progress bar

途中でファイル編集の許可を求められたら承認します。生成されたファイルを読み、必要なら手で編集します。

止めたいときも同じコマンドで頼めます。手で settings.json から statusLine の項目を消しても無効になります。

/statusline delete

手動でstatusLineを設定する手順は?

スクリプトの中身を自分で管理したい場合は、手動設定を行います。公式の手順は、スクリプトを作る、実行権限を付ける、設定に書く、の3ステップです。Bashの例はmacOSとLinux向けで、Windowsは後の節で扱います。

1. スクリプトを作る

公式の例は、jq(JSONから値を取り出すコマンド。未導入なら入れておく)でモデル名、作業ディレクトリ、コンテキスト使用率を取り出して1行に整えるものです。~/.claude/statusline.sh に保存します。

#!/bin/bash
# Read JSON data that Claude Code sends to stdin
input=$(cat)

# Extract fields using jq
MODEL=$(echo "$input" | jq -r '.model.display_name')
DIR=$(echo "$input" | jq -r '.workspace.current_dir')
# The "// 0" provides a fallback if the field is null
PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)

# Output the status line - ${DIR##*/} extracts just the folder name
echo "[$MODEL] 📁 ${DIR##*/} | ${PCT}% context"

${DIR##*/} はパスの末尾のフォルダ名だけを残す書き方、// 0 は値が null のときに 0 を使うjqの書き方です。使用率の数字の読み方は残量の確認方法の記事に任せます。

2. 実行権限を付ける

chmod +x ~/.claude/statusline.sh

3. 設定に書く

~/.claude/settings.json に次を追加します。他の設定がある場合は、既存の項目を残したまま statusLine だけを足します。

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

保存すると、Claude Codeは設定を自動で読み直し、すぐにスクリプトを実行します。設定ファイルは厳密なJSONとして読まれるため、// のコメントや末尾のカンマは構文エラーになり、次回起動時にSettings Errorとして報告されます。

command はシェルで実行されるので、スクリプトファイルを作らずにjqのコマンドを直接書くこともできます。ただしJSONの中でエスケープが二重になるため、項目を組み合わせるならファイルに分けたほうが直しやすくなります。

statusLineはどの設定ファイルに書けばよいか

statusLine はどの設定ファイルにも書けます。誰にその表示を出したいかで置き場所を決めます。

置き場所 適用される範囲
~/.claude/settings.json 自分の、このマシン上の全プロジェクト
.claude/settings.json そのフォルダで作業する全員(gitならcommitして共有)
.claude/settings.local.json 自分の、そのプロジェクトだけ

同じ statusLine が複数のファイルにあると、優先度の高いほうが使われます。高い順に、組織の管理設定(managed settings)、起動時の --settings 指定、プロジェクトローカル、共有プロジェクト、ユーザー設定です。ユーザー設定に書いたのに別の表示が出るなら、プロジェクト側のファイルを確認します。設定ファイル全般はsettings.jsonの解説記事にまとめています。

padding・refreshInterval・hideVimModeIndicatorは何を変えるか

type と command 以外に、任意で付けられる項目が3つあります。

項目 何を変えるか 補足
padding 内容に足す横方向の余白(文字数)。画面にもともとある余白への上乗せ 既定値は 0
refreshInterval イベント時の更新に加えて、N秒ごとに再実行する。最小は 1 イベント時だけ実行
hideVimModeIndicator プロンプト下の -- INSERT -- 表示を消す スクリプトで vim.mode を出すときに true にする
{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh",
    "padding": 2
  }
}

refreshInterval を付ける場面として、公式は2つを挙げています。時計のように時刻で変わる値を出すときと、メインのセッションが待機中にバックグラウンドのサブエージェントがgitの状態を変えるときです。hideVimModeIndicator は、スクリプト側でJSONの vim.mode を表示するときに true にして、モード表示の重複を防ぎます。

ステータスラインはいつ更新されるのか

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

  • 新しいアシスタントのメッセージが届いたとき
  • /compact が終わったとき
  • 権限モードやVimモードが変わったとき
  • statusLine の command を変更したとき
  • refreshInterval の時間が経過したとき

連続する更新は300msでまとめられます。command 自体を変えた場合はすぐ実行されます。スクリプトの実行中に次の更新が来ると、実行中のものは取り消されます。

ここから分かる注意点が2つあります。設定したスクリプトのファイルを編集しても、表示は次の更新まで変わりません。編集後に1回やりとりすれば確かめられます。また、メインのセッションが待機している間は更新が止まりうるので、その間も値を動かしたいときだけ refreshInterval を使います。

スクリプトを書くときに押さえる点

よく使う項目は、モデルの表示名 model.display_name、作業ディレクトリ workspace.current_dir(cwd と同じ値で、公式はこちらを推奨)、セッション固有のID session_id です。各項目は公式ドキュメントで確認できます。

項目はいつも入っているとは限りません。vim はVimモードが有効なときだけ、pr は現在のブランチに開いているPRまたはGitLabのマージリクエストが見つかったときだけ現れ、値が null の項目もあります。公式は、欠けうる項目は条件付きで参照し、nullには代替値を用意するよう求めています。

出力は、echo を複数回書けば複数行になり、ANSIエスケープで色、OSC 8でクリックできるリンクも出せます。ただし表示幅は限られるので、短く保つのが公式の助言です。端末の幅は tput cols では読めないため、環境変数 COLUMNS と LINES を使います。

gitの情報を出す場合、大きなリポジトリでは処理が遅くなることがあります。公式のキャッシュ例は、結果を一時ファイルに保存して5秒ごとにだけ更新するものです。ファイル名には実行のたびに変わる $$ ではなく、セッション中は一定の session_id を使います。

Windowsで設定するときの違い

Windowsでは、Git Bashが入っていればGit Bash経由、なければPowerShell経由でコマンドが実行されます。Git Bashはバックスラッシュをエスケープ文字として扱うため、command のパスはスラッシュで書きます。~ も使えます。

PowerShellのスクリプトは powershell 経由で呼び出します。公式の例では、command に powershell -NoProfile -File と書き、その後に .ps1 ファイルのフルパスをスラッシュ区切りで続けています。この書き方は、どちらのシェルが使われても動きます。

ステータスラインが表示されないときはどこを確認する?

まず、設定したスクリプトを手で実行して1行出るかを見ます。公式のTipsにあるモック入力の例を、ディレクトリのパスだけ置き換えて ~/.claude で実行します。

echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/path/to/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ./statusline.sh

標準出力の形式が1行であることと、終了コードが0であることを確認します。どちらも問題がなければ、フォルダの信頼、設定ファイルの優先順位、組織の管理設定を順に確認します。

症状 考えられる原因と対処
何も出ない 実行権限がない。chmod +x ~/.claude/statusline.sh を実行する
何も出ない 標準エラーに書いている。標準出力に書く
何も出ない 終了コードが0以外か、出力が空。表示されるのは終了コード0で終わったときだけ
何も出ない フォルダの信頼が未承認。Claude Codeを再起動して信頼ダイアログを承認する
何も出ない 管理設定以外で disableAllHooks が true。設定を消すか、書いたファイルで false にする
警告なく消えた 組織が allowManagedHooksOnly を設定している。管理者に確認する
Windowsで何も出ない パスのバックスラッシュがGit Bashに消費された。スラッシュで書き直す
-- や空の値 最初のAPI応答前で値が null。代替値を入れる。何回やりとりしても空なら再起動する
更新が遅い スクリプトが遅く、完了まで更新が止まる。遅い処理をキャッシュする
文字が崩れる 色やリンクのエスケープが原因になりうる。まずプレーンテキストに戻す

原因が見えないときは、デバッグモードで起動します。

claude --debug

このモードでは、実行のたびにスクリプトの標準エラーが、セッション最初の実行では終了コードがログに残ります。信頼が未承認なら Status line command skipped: workspace trust not accepted と記録されます。

リンクがクリックできない場合、macOSのTerminal.appは非対応です。iTerm2などの対応端末で文字だけが出るなら、検出を上書きして起動します。

FORCE_HYPERLINK=1 claude

自作と既製の構成、どちらから始めるか

公式ドキュメントは、コミュニティのプロジェクトとしてccstatuslineとstarship-claudeを紹介しています。テーマや追加機能を備えた構成済みのもので、導入方法は配布元で確認します。

表示を1〜2項目にとどめて中身を把握しておきたいなら、公式の例をもとに自作します。何を出すか決まっていないなら /statusline で土台を作らせ、生成されたスクリプトを読んでから手を入れます。見た目を作り込みたいなら既製の構成が合いますが、更新への追随は配布元に頼ることになります。

ステータスラインは状態を「見る」仕組みです。状態に応じて処理を「動かす」仕組みが欲しくなったらhooksの解説へ進んでください。フォルダの信頼の扱いは、hooksとステータスラインで共通です。

設定を足すほど、自分で保守する範囲もさらに広がります。何を自作し、どう安全に育てるかを仲間と学びたい方には、月額1,980円から参加できる学習コミュニティ「AI駆動ラボ」があります。提供内容と最新の料金は公開ページに掲載されています。