🎄

認知度の低そうな Claude Code の便利機能まとめ

に公開

社内で Claude Code のよく使う機能や注目のアップデートを共有したため、これを機に記事を作成してみました。

目まぐるしく、かつひっそりと追加されている機能も多いため少しでも役に立てば幸いです。

Chrome 拡張機能

Claude Code の Max プランという条件はあるものの、ベータ版で Chrome を操作する機能が追加されていました。
ただし、その中身は MCP ツールでありコンテキスト領域が使われることに注意が必要です。

起動時に指定する方法

claude --chrome

スラッシュコマンド経由で設定する場合

  1. /chrome
  2. Enable by default を Yes に変更する

スラッシュコマンド経由の場合は、Claude Code の再起動が必要です。
前述の通り中身は MCP ツールのため、/context実行時に以下のようにmcp_claude-in-chromeで始まるツールが表示されれば有効化されています。


/contextの実行結果

実際に動かしてみましょう。
以下のプロンプトで実行しました。

Zenn の Claude Code のページを開いてください

まず、以下のようなタブが開かれます。


作業中のタブ

その後、コマンドの実行と同様に許可が求められます。
事前に許可済みのサイトは/chrome実行後に表示されていたManage permissionsから確認できます。


Claude Code から求められる許可

しばらくすると正しく開かれていることがわかるかと思います。


作業完了後のブラウザ

作業完了後タブの色と絵文字が変わっていますね。

今回特に MCP や Chrome の指定はしませんでしたが、Claude in Chromeが使われています。
playwrightのような MCP に比べて必要に応じた呼び出しが簡単にできることがよさそうです。

参考:
https://qiita.com/rf_p/items/fd4873e619380aa5a650

diff view

/theme で実装差分が表示される際の color theme が変更可能になりました。
以下のようにプレビューを確認することができます。


/theme の実行結果

個人的に、一部の文字が白文字でターミナルにライトテーマを使っている際に視認性が悪かったのが解消されたのが嬉しい部分でした。


見づらい文字の例

添付画像確認

画像を添付している場合クリックで確認できるようになりました。


添付後画像


添付画像のプレビュー

また、この記事作成中に気づきましたが、↑or Ctrl+p で選択した画像をBackspace or Ctrl+h で削除できるようになっていました。
これまではメッセージ上で[Image #<number>]を削除しても画像が渡されないのか不明だったので、明示的に削除できるのは良い変更です。


画像選択時

Ctrl+s でメッセージをstash

現在入力中のメッセージをCtrl+s でstash できます。
スタッシュ後のメッセージは次のメッセージ送信後に自動的に入力されます。

以下の用途で使うと便利です。

  • sub-agent を先に走らせたくなった場合
  • 急遽出力に対して質問したくなった場合

現在の作業完了後のメッセージを確認してから、次の入力を始める必要がなくなりました。

Context usage を Statusline で表示可能

公式ドキュメントに実際の実装例含めて紹介されています。
https://code.claude.com/docs/en/statusline#context-window-usage

公式の実装例 :

#!/bin/bash
input=$(cat)

MODEL=$(echo "$input" | jq -r '.model.display_name')
CONTEXT_SIZE=$(echo "$input" | jq -r '.context_window.context_window_size')
USAGE=$(echo "$input" | jq '.context_window.current_usage')

if [ "$USAGE" != "null" ]; then
    # Calculate current context from current_usage fields
    CURRENT_TOKENS=$(echo "$USAGE" | jq '.input_tokens + .cache_creation_input_tokens + .cache_read_input_tokens')
    PERCENT_USED=$((CURRENT_TOKENS * 100 / CONTEXT_SIZE))
    echo "[$MODEL] Context: ${PERCENT_USED}%"
else
    echo "[$MODEL] Context: 0%"
fi

ただし、使っていく中で以下の情報が含まれていないことがわかりました。

  • System prompt
  • System tools
  • Autocompact buffer

今後改善される可能性はありますが、一時的な対応として以下のように計算式の分子にその固定値を加えることで、/contextで表示される値と同等の値が表示されるようにしています。
それぞれの値は人によって異なる可能性がありますので、AUTOCOMPACT_BUFFER, SYSTEM_OVERHEADには実際に確認した値を代入することをお勧めします。

#!/bin/bash
input=$(cat)

# コンテキスト使用率を計算
CONTEXT_SIZE=$(echo "$input" | jq -r '.context_window.context_window_size')
USAGE=$(echo "$input" | jq '.context_window.current_usage')

# AUTOCOMPACT_BUFFER
AUTOCOMPACT_BUFFER=45000
# SYSTEM_OVERHEAD
SYSTEM_OVERHEAD=20000
if [ "$USAGE" != "null" ] && [ "$CONTEXT_SIZE" != "null" ] && [ "$CONTEXT_SIZE" -gt 0 ] 2>/dev/null; then
    CURRENT_TOKENS=$(echo "$USAGE" | jq '.input_tokens + .cache_creation_input_tokens + .cache_read_input_tokens')
    CURRENT_TOKENS=$((CURRENT_TOKENS + AUTOCOMPACT_BUFFER + SYSTEM_OVERHEAD))
    PERCENT_USED=$((CURRENT_TOKENS * 100 / CONTEXT_SIZE))
    CONTEXT_INFO="${PERCENT_USED}%"
else
    CURRENT_TOKENS=$((AUTOCOMPACT_BUFFER + SYSTEM_OVERHEAD))
    PERCENT_USED=$((CURRENT_TOKENS * 100 / CONTEXT_SIZE))
    CONTEXT_INFO="${PERCENT_USED}%"
fi

また、/statuslineを実行すると現在のターミナルの設定からステータスラインの設定を提案してくれるようです。
私はすでに設定済みでしたが、試しに実行してみたところ、zsh の設定ファイルや既存のステータスラインの設定・Powerlevel10k の設定を確認していました。

おすすめのステータスライン設定

余談ですが、私は以下のようなステータスラインの設定を行なっております。

[model | context%] dir branch git差分 | 残りのブロック時間 | 現在時刻

設定内容は以下のとおりです。

実装内容
.claude/statusline.sh
#!/bin/bash
# stdinからJSON入力を読み取る
input=$(cat)
DATETIME=$(date '+%Y/%m/%d %H:%M')

MODEL_DISPLAY=$(echo "$input" | jq -r '.model.display_name')
CURRENT_DIR=$(echo "$input" | jq -r '.workspace.current_dir')

# コンテキスト使用率を計算 ------------------------------------------------------
CONTEXT_SIZE=$(echo "$input" | jq -r '.context_window.context_window_size')
USAGE=$(echo "$input" | jq '.context_window.current_usage')

# AUTOCOMPACT_BUFFER
AUTOCOMPACT_BUFFER=45000
# SYSTEM_OVERHEAD
SYSTEM_OVERHEAD=20000
if [ "$USAGE" != "null" ] && [ "$CONTEXT_SIZE" != "null" ] && [ "$CONTEXT_SIZE" -gt 0 ] 2>/dev/null; then
    CURRENT_TOKENS=$(echo "$USAGE" | jq '.input_tokens + .cache_creation_input_tokens + .cache_read_input_tokens')
    CURRENT_TOKENS=$((CURRENT_TOKENS + AUTOCOMPACT_BUFFER + SYSTEM_OVERHEAD))
    PERCENT_USED=$((CURRENT_TOKENS * 100 / CONTEXT_SIZE))
    CONTEXT_INFO="${PERCENT_USED}%"
else
    CURRENT_TOKENS=$((AUTOCOMPACT_BUFFER + SYSTEM_OVERHEAD))
    PERCENT_USED=$((CURRENT_TOKENS * 100 / CONTEXT_SIZE))
    CONTEXT_INFO="${PERCENT_USED}%"
fi

# 残りブロック時間 --------------------------------------------------------------
CCUSAGE_JSON=$(npx -y ccusage@15.3.1 blocks --active --json 2>/dev/null)

if [ -n "$CCUSAGE_JSON" ]; then
    # JSONから必要な情報を抽出
    COST=$(echo "$CCUSAGE_JSON" | jq -r '.blocks[0].costUSD // 0')
    REMAINING_MINS=$(echo "$CCUSAGE_JSON" | jq -r '.blocks[0].projection.remainingMinutes // 0')

    # 残り時間を「Xh Xm left」形式に変換
    if [ "$REMAINING_MINS" != "null" ] && [ "$REMAINING_MINS" != "0" ]; then
        HOURS=$((REMAINING_MINS / 60))
        MINS=$((REMAINING_MINS % 60))
        BLOCK_TIME="${HOURS}h ${MINS}m left"
    else
        BLOCK_TIME=""
    fi
else
    BLOCK_TIME=""
fi

# gitリポジトリ内の場合はgitブランチと状態を表示 --------------------------------
GIT_BRANCH=""
if git rev-parse --git-dir > /dev/null 2>&1; then
    BRANCH=$(git branch --show-current 2>/dev/null)
    if [ -n "$BRANCH" ]; then
        # 各種git情報を効率的に取得
        AHEAD=""
        BEHIND=""
        STAGED=""
        UNSTAGED=""
        UNTRACKED=""
        
        # リモートブランチが存在する場合のみ差分をチェック
        if git rev-parse --verify @{upstream} > /dev/null 2>&1; then
            # 先行・遅れ数を一度に取得(2つのrevlistを並列実行)
            COUNTS=$(git rev-list --count --left-right @{upstream}...HEAD 2>/dev/null)
            if [ -n "$COUNTS" ]; then
                BEHIND_COUNT=$(echo "$COUNTS" | cut -f1)
                AHEAD_COUNT=$(echo "$COUNTS" | cut -f2)
                
                # 先行している場合
                [ "$AHEAD_COUNT" -gt 0 ] && AHEAD="⇡${AHEAD_COUNT}"
                
                # 遅れている場合
                [ "$BEHIND_COUNT" -gt 0 ] && BEHIND="⇣${BEHIND_COUNT}"
            fi
        fi
        
        # git status情報を一括取得(porcelain形式で効率化)
        GIT_STATUS=$(git status --porcelain 2>/dev/null)
        if [ -n "$GIT_STATUS" ]; then
            # ステージされたファイル数(最初の文字がスペース以外)
            STAGED_COUNT=$(echo "$GIT_STATUS" | grep '^[MADRC]' | wc -l | tr -d ' ')
            [ "$STAGED_COUNT" -gt 0 ] && STAGED="+${STAGED_COUNT}"

            # 変更されたファイル数(2番目の文字がスペース以外)
            UNSTAGED_COUNT=$(echo "$GIT_STATUS" | grep '^.[MD]' | wc -l | tr -d ' ')
            [ "$UNSTAGED_COUNT" -gt 0 ] && UNSTAGED="!${UNSTAGED_COUNT}"

            # 未追跡ファイル数(??で始まる行)
            UNTRACKED_COUNT=$(echo "$GIT_STATUS" | grep '^??' | wc -l | tr -d ' ')
            [ "$UNTRACKED_COUNT" -gt 0 ] && UNTRACKED="?${UNTRACKED_COUNT}"
        fi
        
        # 表示文字列を組み立て(p10k.zshと同じ色設定)
        STATUS_INFO=""
        if [ -n "$BEHIND" ] || [ -n "$AHEAD" ] || [ -n "$STAGED" ] || [ -n "$UNSTAGED" ] || [ -n "$UNTRACKED" ]; then
            # リモート差分情報(緑色 - cleanと同じ)
            REMOTE_INFO=""
            [ -n "$BEHIND" ] && REMOTE_INFO="${REMOTE_INFO} \033[38;5;76m${BEHIND}\033[0m"
            [ -n "$AHEAD" ] && REMOTE_INFO="${REMOTE_INFO}\033[38;5;76m${AHEAD}\033[0m"
            
            # git status情報(色分け)
            GIT_STATUS_INFO=""
            [ -n "$STAGED" ] && GIT_STATUS_INFO="${GIT_STATUS_INFO} \033[38;5;178m${STAGED}\033[0m"
            [ -n "$UNSTAGED" ] && GIT_STATUS_INFO="${GIT_STATUS_INFO} \033[38;5;178m${UNSTAGED}\033[0m"
            [ -n "$UNTRACKED" ] && GIT_STATUS_INFO="${GIT_STATUS_INFO} \033[38;5;39m${UNTRACKED}\033[0m"
            
            STATUS_INFO="${REMOTE_INFO}${GIT_STATUS_INFO}"
        fi
        
        GIT_BRANCH=" \033[38;5;76m$BRANCH\033[0m$STATUS_INFO"
    fi
fi

# -------------------------------------------------------------------------------
echo -e "[$MODEL_DISPLAY | $CONTEXT_INFO] \033[38;5;39m${CURRENT_DIR##*/}\033[0m$GIT_BRANCH | $BLOCK_TIME | $DATETIME"

モデル指定

/modelを実行して行なっていたモデルの選択が、Alt+p / option+p で即座に開けるようになりました。

エディタ指定

Ctrl+g で起動するエディタを指定できるようになっていました。

環境変数$VISUALをみているという情報が多いですが、$EDITORのみを指定している環境で Neovim が起動することは確認済みです。
Plan モードで確認される計画も Ctrl+g でエディタで開けるので、ちょっとした修正や一部を抽出するのに便利です。

画面幅を超えた計画が提出された際に、Wezterm のコピーモードで遡っていましたが、計画自体の確認はエディタの操作でできるようになったのが個人的には嬉しいポイントでした。

また、いつの間にか計画の保存先が表示されるようになったので、途中で作業が終わってしまった場合なども安心になりました。
/planと打てば、再度表示してくれるので出力を遡る必要はありません。

参考:
oikon48さんのポスト

フィードバックの非表示

ある時期から頻繁にフィードバックを求められるようになり意図せぬ動作が動いてしまうことがありましたが、CLAUDE_CODE_DISABLE_FEEDBACK_SURVEYを設定することで無効にできます。

~/.claude/settings.json
{
  "env": {
    "CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY": "1"
  }
}

https://github.com/anthropics/claude-code/issues/8036

その他: Context の整理

Context left until auto-compact: ~~%が頻繁に表示される場合、デフォルトのコンテキスト量を確認することをお勧めします。
/contextを実行することで、そのおおよその原因を特定することが可能です。
私はGitHub Remote MCP server が原因であることが判明しました。


今回からは本アカウントでの投稿になります。
以前のアカウントでも Claude Code に関する記事を投稿しておりますので、興味があれば合わせて読んでいただけると嬉しいです。

https://zenn.dev/kozoka_ai/articles/a4ed225be78a77
https://zenn.dev/kozoka_ai/articles/cf9f69202282d4

GitHubで編集を提案
株式会社kozokaAI 開発チーム

Discussion