コンテンツにスキップ

AI Session Notes - 2026-03-04

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

学んだこと

  • Claude Code にはカスタマイズ可能なステータスライン機能がある
  • シェルスクリプトを指定すると、セッション情報の JSON が stdin に渡され、stdout の出力が画面下部に表示される
  • 更新タイミングはアシスタントのメッセージ返却ごと(300ms デバウンス)
  • 設定は ~/.claude/settings.jsonstatusLine フィールドで行う

詳細

設定方法

{
  "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 コメントでエージェントを呼ぶ形)を使うと、ローカル連携なしでも役割分担を実現できる

詳細

典型例は以下:

  1. エージェントAで実装完了
  2. フックで codex など別CLIを起動してレビュー依頼
  3. レビュー結果を同じPR/同じ作業ログに反映

この方式は、連携対象を増やしても「イベントで次の処理を起動する」だけで拡張しやすい。

スキル移植時の互換性チェック

学んだこと

  • スキルの移植では、本文より先に SKILL.md frontmatter の必須項目を満たしているか確認するのが重要
  • Codex では少なくとも namedescription が必要で、欠けると読み込みスキップになる
  • 既存スキルを別ツール向けに持っていく場合は、まず完全コピーで動作確認し、必要箇所だけ最小修正するのが安全

詳細

互換性の問題は本文の手順よりメタデータで起きやすい。
読み込みエラーが出たら、最初に 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"

参考リンク

メタ情報

  • ツール: 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