📊

ccusageの出力をMacのメニューバーに表示する

に公開

RaycastかXbarというアプリを使うといいでしょう。

Raycast

ランチャー+ファイラー+その他色々、プラグインで何でもできる便利アプリ。公式ストアにプラグインが公開されてるので入れれば動く。動かない場合は設定画面でnpxの場所を指定するとよい

Xbar

指定したスクリプトの出力をメニューバーに表示してくれる万能アプリ。公式ページにはClaude Code用のプラグインはなかったが、こんなもんAIに書かせればええんや。

`xbar/ccusage.1m.sh` として、ccusageコマンドの出力を表示するxbarプラグインを作りなさい。
xbarプラグインの仕様については https://raw.githubusercontent.com/matryer/xbar-plugins/refs/heads/main/CONTRIBUTING.md を参照せよ。
`npx ccusage daily --json` で取得できる本日のデータから、Input/Output tokensとCostを表示せよ。

このようなものができる。

スクリプトは以下。このままだと筆者の環境でしか動かない。npxコマンドの場所を指定する部分を、各自で自分の環境に合わせて調整してください。

~/Library/Application\ Support/xbar/plugins/ccusage.1m.sh
#!/usr/bin/env bash

# LICENSE: CC0

#  <xbar.title>ccusage</xbar.title>
#  <xbar.version>v1.0</xbar.version>
#  <xbar.author>todesking</xbar.author>
#  <xbar.desc>Display Claude Code daily usage statistics including tokens and cost</xbar.desc>

# Get current date in YYYYMMDD format
TODAY=$(date +%Y-%m-%d)

function exec_npx() {
  ASDF_NODE_VERSION=22.14.0 /opt/homebrew/bin/asdf exec npx "$@"
}

# Get ccusage data for today
JSON_OUTPUT=$(exec_npx ccusage daily --json 2>/dev/null)

if [ $? -ne 0 ] || [ -z "$JSON_OUTPUT" ]; then
    echo "CC Usage: Error"
    echo "---"
    echo "Failed to fetch usage data"
    exit 1
fi

# Extract today's data using jq
TODAY_DATA=$(echo "$JSON_OUTPUT" | jq --arg today "$TODAY" '.daily[] | select(.date == $today)')

if [ -z "$TODAY_DATA" ]; then
    echo "CC: No data"
    echo "---"
    echo "No usage data for today"
    exit 0
fi

# Extract values
TOTAL_TOKENS=$(echo "$TODAY_DATA" | jq -r '.totalTokens')
TOTAL_COST=$(echo "$TODAY_DATA" | jq -r '.totalCost')
INPUT_TOKENS=$(echo "$TODAY_DATA" | jq -r '.inputTokens')
OUTPUT_TOKENS=$(echo "$TODAY_DATA" | jq -r '.outputTokens')
CACHE_CREATION=$(echo "$TODAY_DATA" | jq -r '.cacheCreationTokens')
CACHE_READ=$(echo "$TODAY_DATA" | jq -r '.cacheReadTokens')

# Format numbers with scientific notation (k, m)
format_scientific() {
    local num=$1
    if [ "$num" -ge 1000000 ]; then
        printf "%.1fm" $(echo "scale=1; $num / 1000000" | bc)
    elif [ "$num" -ge 1000 ]; then
        printf "%.1fk" $(echo "scale=1; $num / 1000" | bc)
    else
        echo "$num"
    fi
}

# Format cost to 2 decimal places
COST_FORMATTED=$(printf "%.2f" "$TOTAL_COST")

# Menu bar display (compact)
echo "$(format_scientific $INPUT_TOKENS)/$(format_scientific $OUTPUT_TOKENS) \$$COST_FORMATTED"
echo "---"

# Dropdown details
echo "Claude Code Usage - $TODAY"
echo "---"
echo "Total Tokens: $(format_scientific $TOTAL_TOKENS)"
echo "Total Cost: \$$COST_FORMATTED"
echo "---"
echo "Input Tokens: $(format_scientific $INPUT_TOKENS)"
echo "Output Tokens: $(format_scientific $OUTPUT_TOKENS)"
echo "Cache Creation: $(format_scientific $CACHE_CREATION)"
echo "Cache Read: $(format_scientific $CACHE_READ)"
echo "---"
echo "Refresh | refresh=true"

おしまい。

GitHubで編集を提案

Discussion