AI Session Notes - 2026-03-04
Claude Code ステータスラインのカスタマイズ
学んだこと
- Claude Code にはカスタマイズ可能なステータスライン機能がある
- シェルスクリプトを指定すると、セッション情報の JSON が stdin に渡され、stdout の出力が画面下部に表示される
- 更新タイミングはアシスタントのメッセージ返却ごと(300ms デバウンス)
- 設定は
~/.claude/settings.jsonのstatusLineフィールドで行う
詳細
設定方法
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh"
}
}
利用可能な主要フィールド
| フィールド | 内容 |
|---|---|
model.display_name |
モデル名 |
context_window.current_usage.input_tokens |
現在の入力トークン数 |
context_window.context_window_size |
コンテキストウィンドウ上限 |
context_window.used_percentage |
使用率 (%) |
cost.total_cost_usd |
セッション合計コスト |
ターミナルでのプログレスバー表現
jq で JSON をパース → 使用率から塗りつぶし文字数を算出 → █ と ░ で棒グラフを構築するパターン:
BAR_WIDTH=20
FILLED=$((PCT * BAR_WIDTH / 100))
EMPTY=$((BAR_WIDTH - FILLED))
BAR=$(printf "%${FILLED}s" | tr ' ' '█')
BAR="${BAR}$(printf "%${EMPTY}s" | tr ' ' '░')"
ANSI エスケープコードで閾値に応じた色分けも可能(\033[32m 緑、\033[33m 黄、\033[31m 赤)。
コンテキストウィンドウの管理
学んだこと
- コンテキストが上限に近づくと Claude Code が自動的に古いメッセージを圧縮(要約)する
/compactで手動圧縮、/clearで会話リセットも可能- コンテキスト節約自体を目的にするより、良い指示を出すことが結果的に効率的
- テーマが変わったら新しい会話にする、巨大ファイルは必要部分だけ読ませる、といった運用が有効
JavaScript エコシステムのバージョン管理(Volta / pnpm / Node.js)
学んだこと
- Volta は JavaScript ツールチェーンのバージョン管理ツール(Ruby でいう rbenv / asdf)
- Rust 製バイナリで Node.js に依存しない
~/.volta/以下に自己完結してインストールされる- shim 方式でコマンドを中継し、プロジェクトごとにバージョンを自動切り替えできる
- Node.js は JavaScript の実行環境(Ruby でいう Ruby 本体)
- pnpm はパッケージマネージャー(Ruby でいう Bundler)。npm/yarn と同じ役割で、ディスク効率が良い
依存関係
Volta(バージョン管理・Rust製で独立)
├── Node.js(実行環境)
└── pnpm(パッケージマネージャー・Node.js 上で動作)
インストール・更新方法
| ツール | インストール / 更新 |
|---|---|
| Volta | curl https://get.volta.sh \| bash(更新も同じコマンドを再実行) |
| Node.js | volta install node(最新版をインストール) |
| pnpm | volta install pnpm(最新版をインストール) |
- Volta には専用のアップデートコマンドがなく、インストールスクリプトの再実行が公式の更新方法
volta install <ツール>は最新版のインストールと既存バージョンの更新を兼ねる
pnpm のグローバルインストール設定
pnpm add -gでグローバルパッケージをインストールしようとするとERR_PNPM_NO_GLOBAL_BIN_DIRエラーが出ることがあるpnpm setupを実行するとPNPM_HOMEが.zshrcに追加され解決する- 設定追加後は
source ~/.zshrcでシェルの再読み込みが必要
npm パッケージとしての CLI ツールのインストール
学んだこと
- CLI ツールが npm パッケージとして配布されている場合、
npm i -g/pnpm add -g/yarn global addのいずれでもインストールできる - 例: OpenAI Codex CLI は
pnpm add -g @openai/codexまたはbrew install --cask codexでインストール可能
複数AIコーディングツールの連携パターン
学んだこと
- 「ツール同士が直接統合されている」よりも、Hooks/Webhook/CLI呼び出しでパイプラインを組む構成が実運用では多い
- 実装担当とレビュー担当を分離し、片方の完了イベントで別エージェントにレビュー依頼する流れは再現しやすい
- GitHub 上のエージェント運用(PR コメントでエージェントを呼ぶ形)を使うと、ローカル連携なしでも役割分担を実現できる
詳細
典型例は以下:
- エージェントAで実装完了
- フックで
codexなど別CLIを起動してレビュー依頼 - レビュー結果を同じPR/同じ作業ログに反映
この方式は、連携対象を増やしても「イベントで次の処理を起動する」だけで拡張しやすい。
スキル移植時の互換性チェック
学んだこと
- スキルの移植では、本文より先に
SKILL.mdfrontmatter の必須項目を満たしているか確認するのが重要 - Codex では少なくとも
nameとdescriptionが必要で、欠けると読み込みスキップになる - 既存スキルを別ツール向けに持っていく場合は、まず完全コピーで動作確認し、必要箇所だけ最小修正するのが安全
詳細
互換性の問題は本文の手順よりメタデータで起きやすい。
読み込みエラーが出たら、最初に frontmatter を検証すると切り分けが速い。
dotfilesでのスキル運用設計
学んだこと
- スキルの共通管理は symlink で実現できるが、ディレクトリ丸ごとリンクよりスキル単位リンクの方が安全
- ツールが持つ
.systemなどの組み込み領域を壊さないため、ユーザースキルだけを個別リンクする方針が有効 install.shにリンク作成を組み込むと、新しいPCでも同じ手順で再現できる
詳細
~/.tool/skills 全体を置き換えると組み込みスキルが消えるリスクがある。
~/.tool/skills/<custom-skill> だけリンクする設計にすると、既定機能を維持したまま dotfiles 管理できる。
Claude Code ステータスラインへの Rate Limit 表示
学んだこと
- Anthropic には 非公式の Usage API (
https://api.anthropic.com/api/oauth/usage) が存在し、5時間/7日間の rate limit 使用率を取得できる - 公式ドキュメントには記載がないが、Claude Code の OAuth トークンで認証可能
- 認証には
Authorization: Bearer <token>に加えてanthropic-beta: oauth-2025-04-20ヘッダーが必須(これがないと 401 になる)
詳細
OAuth トークンの取得(macOS)
macOS Keychain に Claude Code-credentials として保存されている:
security find-generic-password -s "Claude Code-credentials" -w | jq -r '.claudeAiOauth.accessToken'
Usage API のリクエストとレスポンス
curl -s \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "anthropic-beta: oauth-2025-04-20" \
https://api.anthropic.com/api/oauth/usage
{
"five_hour": {
"utilization": 28.0,
"resets_at": "2026-03-04T12:00:00.000000+00:00"
},
"seven_day": {
"utilization": 59.0,
"resets_at": "2026-03-06T04:00:00.000000+00:00"
}
}
utilizationはパーセント値(28.0 = 28%)resets_atは ISO-8601 形式(UTC)
キャッシュ戦略
ステータスラインは頻繁に呼ばれるため、API 呼び出しはキャッシュ(360秒程度)で制御する。短時間に連続リクエストすると 429 エラーで長時間(最大1時間程度)ブロックされるので注意。
macOS の date コマンドと ISO-8601
macOS の date は +00:00 形式のタイムゾーンオフセットを受け付けない。+0000 形式に変換が必要:
# +00:00 → +0000 に変換してからパース
cleaned=$(echo "$iso_time" | sed 's/\.[0-9]*//' | sed 's/\([+-][0-9][0-9]\):\([0-9][0-9]\)$/\1\2/')
epoch=$(date -jf "%Y-%m-%dT%H:%M:%S%z" "$cleaned" "+%s")
TZ=Asia/Tokyo date -r "$epoch" "+%-I%p"
参考リンク
- Volta 公式サイト
- Volta ドキュメント
- OpenAI Codex CLI - GitHub
- Claude Code Hooks
- Claude Code Hooks Guide
- Claude and Codex now available for Copilot Business/Pro users
- Claude Code statusline with usage limits - GitHub Gist
- How to Show Claude Code Usage Limits in Your Statusline
- Claude Code ステータスバーにレートリミット情報を表示する
メタ情報
- ツール: Claude Code, Codex CLI
- 関連技術: Shell Script, ANSI Escape Codes, jq, CLI, Volta, Node.js, pnpm, JavaScript, AI Agent Workflow, Hooks, Dotfiles, Symlink, OAuth, Anthropic API, macOS Keychain