Statusline(ステータスライン)とは?Claude Codeの読み方・設定・カスタマイズ方法を解説

Statuslineとは

Statuslineとは

Statusline(ステータスライン)とは、Claude Codeのターミナル画面下部に常時表示される、カスタマイズ可能な情報バーのことです。現在のディレクトリ、Gitブランチ、使用中のモデル、コンテキスト消費量、コストなど、エージェント作業の状態を一目で把握するために使われます。

イメージとしては、エディタ(VS Codeなど)の画面下部にあるステータスバーをCLIに持ち込んだもの、と考えるとわかりやすいでしょう。シェルのPS1プロンプトをAIエージェント用に拡張したような存在で、Claude Codeを開いている間ずっと最新情報が更新され続けます。重要なのは、ユーザー自身がシェルスクリプトやNode.jsスクリプトを書いて表示内容を自由に変えられる点です。実務では、コンテキスト残量を可視化したり、AIエージェントに渡しているプロジェクト名を確認したりするのに役立ちます。

Statuslineの読み方

ステータスライン

ステータス・ライン

ステータスバー(IDEの呼称が混ざる場合)

Statuslineの仕組み

StatuslineはClaude CodeのCLI内部で動作するレンダリングコンポーネントです。Claude Codeは起動時に~/.claude/settings.jsonまたは.claude/settings.jsonを読み込み、statusLineキーで指定されたコマンドを定期的に実行します。実行結果の標準出力(stdout)の最終行が、画面下部に1行で描画される仕組みです。

動作のステップ

Statuslineが描画されるまで

①設定ファイル読込
settings.json
②JSON入力をコマンドへ
stdin経由
③stdout回収
最終1行を採用
④画面下部に描画

ここが重要なポイントです。Claude CodeはStatuslineスクリプトに対して、現在のセッション情報をJSONとして標準入力(stdin)から渡します。スクリプトはこのJSONを読み取り、必要な情報を加工して標準出力に1行で返すだけで、画面下部に表示されます。仕組みはシンプルですが、シェルスクリプト・Python・Node.jsなど好きな言語で実装できる柔軟性があります。

標準入力で渡される主なJSONフィールド

フィールド 内容
workspace.current_dir 現在の作業ディレクトリ
model.display_name 使用中のClaudeモデル名
session_id 現在のセッション識別子
cost.total_cost_usd セッション累積コスト(USD)
output_style.name 使用中のOutput Style名

Statuslineの使い方・実例

最も簡単な設定例を示します。~/.claude/settings.jsonに次のように書きます。実務ではまずこのシンプルな例から始めて、必要に応じて拡張するのがおすすめです。

シンプルなBash例(Gitブランチ表示)

{
  "statusLine": {
    "type": "command",
    "command": "bash -c 'dir=$(basename \"$PWD\"); branch=$(git symbolic-ref --short HEAD 2>/dev/null || echo no-git); echo \"📁 $dir | 🌿 $branch\"'"
  }
}

Pythonで使用モデルとコストを表示する例

#!/usr/bin/env python3
# ~/.claude/statusline.py
import sys, json, os

data = json.loads(sys.stdin.read())
dir_short = os.path.basename(data["workspace"]["current_dir"])
model = data["model"]["display_name"]
cost = data.get("cost", {}).get("total_cost_usd", 0)
print(f"📁 {dir_short} | 🤖 {model} | 💰 ${cost:.3f}")

そしてsettings.jsonにこう書きます。

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

ここが重要なポイントです。コマンドのパスはホームディレクトリからの絶対パスで書くと安定します。相対パスにするとClaude Codeを起動した場所によって動作が変わるため注意してください。

更新間隔の制御

Statuslineの更新は、Claude Code側がイベントごと(ユーザー入力後やツール実行後など)に再描画します。極端に重いスクリプトを書くと体感的なレスポンスが悪くなるため、実務では数十ミリ秒以内で完了する処理に抑えるのが鉄則です。Gitの状態取得など重い処理を含める場合は、--no-optional-locksなどGitの軽量オプションを併用すると安定します。

Statuslineのメリット・デメリット

メリット

  • 状況把握の高速化 — 現在のモデルやディレクトリが常に見えるので、誤操作や思い違いが減る。
  • コスト管理 — トークン消費・USDコストをリアルタイム表示でき、Claude Maxなど従量課金プランで特に有効。
  • 言語自由 — Bash/Python/Node.jsなど好きな言語で書ける。シェルに慣れた開発者ほど楽に拡張できる。
  • チーム共有 — settings.jsonをリポジトリ管理すれば、チーム全員で同じ可視化を共有できる。

デメリット

  • 設計ミスでパフォーマンス低下 — 重いコマンド(ネットワーク呼び出し等)を入れると入力レスポンスが鈍る。
  • 環境依存のリスク — Pythonやjqに依存するスクリプトは、それらが入っていない環境で動かなくなる。
  • 表示幅の制約 — 1行のため、情報を詰め込みすぎると右端が切れる。実務では絵文字+短縮表記で工夫する必要がある。

StatuslineとPS1(シェルプロンプト)との違い

Statuslineと混同されやすいのが、BashのPS1やZshのPROMPTなどのシェルプロンプトです。両者の違いを整理しましょう。

観点 Statusline PS1(シェルプロンプト)
対象 Claude Code(AIエージェント) シェル(Bash/Zsh)
入力 JSON(モデル名・セッション情報など) 環境変数
表示位置 画面下部(ターミナル末尾) 入力プロンプト直前
主目的 エージェント状態の可視化 コマンド入力支援

実務ではPS1とStatuslineを併用することが多いです。PS1にはGit情報を、StatuslineにはClaude Code固有の情報(モデル・コスト)を出すと、役割が綺麗に分かれます。

よくある誤解

誤解1: Statuslineで対話できる

Statuslineはあくまで表示専用です。クリックや入力を受け付ける仕組みではありません。インタラクティブな操作はSlash Command(スラッシュコマンド)やHooks(フック)で実装します。

誤解2: シェルスクリプトしか使えない

誤りです。標準入出力さえ扱えればNode.js、Python、Goなど何でも使えます。実務ではプロジェクトに合わせた言語で書くのが王道です。

誤解3: 設定するとClaude Code全体が遅くなる

これは半分正解、半分誤りです。スクリプトがミリ秒単位で完了するなら全く問題ありません。ネットワーク呼び出しや巨大なリポジトリでのgit statusなど、秒単位の処理を入れると遅延の原因になります。注意してください。

実務での活用シーン

シーン1: 巨大プロジェクトでのコンテキスト管理

モノレポなど巨大なリポジトリで作業していると、Claude Codeのコンテキストウィンドウが知らぬ間に膨らみがちです。Statuslineにコンテキスト残量を表示しておけば、/clearを打つタイミングを目で判断できます。

シーン2: 複数モデル使い分け

Claude Opus 4.6・Sonnet 4.6・Haiku 4.5を使い分けるとき、画面下部にモデル名を出しておくと「思ったより安いHaikuで動かしていた」「逆にOpusで簡単な質問をしていた」といった事故が減ります。

シーン3: コスト見える化(Claude Max運用)

API課金やClaude Maxプランでは、累積コストの見える化が重要です。cost.total_cost_usdを表示しておけば、月末請求でびっくりすることが減ります。チームで開発している場合は、しきい値を超えたら絵文字を変えるなどの工夫も有効です。

よくある質問(FAQ)

Q1. Statuslineはどこで設定しますか?

~/.claude/settings.json(ユーザー設定)または.claude/settings.json(プロジェクト設定)に書きます。プロジェクト設定が優先されるため、リポジトリごとに表示を変えられます。

Q2. 何が表示できますか?

JSON入力に含まれるすべての情報、加えてシェルや外部コマンドで取得できる情報(Gitブランチ、Docker状態、kubectl context等)も表示可能です。

Q3. 色は使えますか?

使えます。ANSIエスケープシーケンス(\\033[31mなど)でカラー出力が可能です。テーマに依存して見え方が変わるため、太字・反転表示などターミナルが解釈する基本属性に絞るのが安全です。

Q4. 何秒に1回更新されますか?

定期的なポーリングではなく、Claude Codeが内部状態を変えたタイミング(ツール実行後など)で再描画されます。固定間隔ではない点に注意してください。

Q5. 表示幅が足りない時は?

絵文字や省略記法(~/projのようにホーム表記)を使い、最大80字程度に収めるのが実務的なベストプラクティスです。

まとめ

  • Statuslineは、Claude Codeターミナル下部に常時表示されるカスタマイズ可能な情報バー
  • 読み方は「ステータスライン」、シェルのPS1のAIエージェント版に近い
  • JSON入力をstdinで受け取り、stdoutに1行返すだけのシンプル仕様
  • Bash/Python/Node.jsなど好きな言語で書ける
  • モデル名・コスト・コンテキスト残量・Gitブランチなどを可視化できる
  • 重いコマンドはレスポンス低下を招くので避けること
  • ~/.claude/settings.jsonまたは.claude/settings.jsonで有効化

参考文献・出典

📚 参考文献・出典

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA