Closed29

[キャッチアップ] Claude Code (公式ドキュメント編)

shingo.sasakishingo.sasaki

スクラップについて

完全に乗り遅れたが、ようやく会社のお金で Claude Code を使えるようになった。

とりあえず使い倒してみれば良いという風潮ではあるものの、個人的には新しいツールを手に入れたらまずは公式ドキュメントを全部読むをスタンスとしている(時代遅れかも) ので、手を動かす前に読んでいく。

https://docs.anthropic.com/ja/docs/claude-code/overview

shingo.sasakishingo.sasaki

Overview

https://docs.anthropic.com/ja/docs/claude-code/overview

Claude Codeについて学びましょう。これはAnthropicのエージェント型コーディングツールで、ターミナル内で動作し、アイデアをこれまで以上に素早くコードに変換するのを支援します。

今更すぎるけど、実は Claude Code のこと、AIエージェント内臓のIDEだと思い込んでたけど、Gemini CLI に近い奴だったのね。

退屈なタスクを自動化:面倒なlintの問題を修正し、マージコンフリクトを解決し、リリースノートを書きます。これらすべてを開発者マシンから単一のコマンドで実行するか、CIで自動的に実行できます。

一連のタスクに再現性を持たせることできるのかな。Devin の Playbook みたいなイメージ。CIに組み込みとかもいずれはできるのか。

Unix哲学:Claude Codeは組み合わせ可能でスクリプト化可能です。tail -f app.log | claude -p "このログストリームに異常が現れたらSlackで知らせて"が_動作します_。あなたのCIはclaude -p "新しいテキスト文字列がある場合、フランス語に翻訳して@lang-fr-teamがレビューするためのPRを作成して"を実行できます。

CLI の強みはここにありそう。標準出力をパイプでコンテキストにできるのは強そうだ。

shingo.sasakishingo.sasaki

クイックスタート

https://docs.anthropic.com/ja/docs/claude-code/quickstart

インストール&セットアップは済んでるので割愛。

Claude Codeは必要に応じてファイルを読み取ります - 手動でコンテキストを追加する必要はありません。Claudeは独自のドキュメントにもアクセスでき、その機能について質問に答えることができます。

ほんとぉ?巷で Claude Code は自走力が段違いと聞いてるけど、このあたりの能力が他のAIエージェントより優れてるのかな。でもコンテキストエンジニアリングって言葉も普及してるから、そんなに大きな差はないのではと思ってる。

とりあえずコード編集できること、git にアクセスできること、あと GitHub CLI 使えることも確認。

claude	インタラクティブモードを開始	claude
claude "task"	一回限りのタスクを実行	claude "fix the build error"
claude -p "query"	一回限りのクエリを実行して終了	claude -p "explain this function"
claude -c	最新の会話を続行	claude -c
claude -r	以前の会話を再開	claude -r
claude commit	Gitコミットを作成	claude commit
/clear	会話履歴をクリア	> /clear
/help	利用可能なコマンドを表示	> /help
exit または Ctrl+C	Claude Codeを終了

claude -p "query"claude commit 便利そうだ。

shingo.sasakishingo.sasaki

一般的なワークフロー

https://docs.anthropic.com/ja/docs/claude-code/common-workflows

プロンプト周りの話はわかりきってるので割愛。

専門的なサブエージェントを使用する

特定のタスクをより効果的に処理するために、専門的なAIサブエージェントを使用したいとします。

サブエージェントなる概念があるらしい。急に出てきたな。それ自体の説明は別トピックが後々あるっぽい。

とにかくエージェントは作って明示することも出来るし、指示内容に応じて自動で使い分けたりしてくれるらしい。

Each subagent has its own context window, custom system prompt, and specific tools.

とのことなので、個別に調教した設定の集合に切り替えるみたいなイメージかな。まぁ後々出てくるのでここではこのへんで。

プルリクエストを作成する

PR作成、Cursor だとちょっと不便だった(使い方知らないだけかも) なので期待。PULL_REQUEST_TEMPLATE に倣って、変更内容から推論して、良い感じにしてくれるだけで全然良い。

AIレビューもこのタイミングで挟めると良いかもね。

画像を扱う

流石にちゃんとマルチモーダルっぽい。
CLIだけどD&Dでコンテキスト追加できるのは嬉しい。

アイコンについて聞いてみた。

> [Image #1] どんな画像?

⏺ この画像には、小さな茶色いハムスターまたはネズミが写っています。毛色は茶色と白のミックスで、黒い目をしており、小さな耳と長いひげが特徴的です。前足で何かを持っているような仕草をしており、とても愛らしい表情をし
  ています。背景は薄い青色で、動物の毛色と良いコントラストを作っています。

(デグー何だよなぁ…)

ファイルとディレクトリを参照する

@ プレフィックスでファイルを検索しながらコンテキスト積めるの便利。MCPリソースもここから直接行けるんだ。

以前の会話を再開する

claude --resume

さえ覚えておけば大丈夫そう

Gitワークツリーで並列Claude Codeセッションを実行する

ちょっと小難しいこと言ってるけど、複数ブランチで一度に並行作業を進められるって話かな。応用技だし、こなれてきたら試していきたい。

パイプイン、パイプアウト

JSONで吐き出せるの使い道あるかな。多分ある。

cat code.py | claude -p 'このコードをバグについて分析して' --output-format json > analysis.json

プロジェクト固有のコマンドを作成する

プロンプトに対してエイリアスを貼るみたいなやつか。うーん、ローカルでは作るかもしれない。メンバーで共有するレベルのものを作れるかは微妙。

個人的なスラッシュコマンドを作成する

あ、こっちも別にあるならこっちでいいや。

shingo.sasakishingo.sasaki

Claude Code SDK

https://docs.anthropic.com/ja/docs/claude-code/sdk

アプリケーションに Claude Code を組み込む方法の話かな。
他のツールの操作をトリガーに Claude Code を走らせるみたいなワークフローを組むために色々できるよという話っぽい。

CLI を使う場合も組み込み向けのオプションが色々あるみたい。
今はこういうのは Devin でやってるけど、Claude でやりたいってなったら詳細調べるで良さそう。

shingo.sasakishingo.sasaki

サブエージェント

https://docs.anthropic.com/ja/docs/claude-code/sub-agents

Claude Codeのカスタムサブエージェントは、特定のタイプのタスクを処理するために呼び出すことができる専門化されたAIアシスタントです

やっぱ Devin の PlayBook に近いか?コンテキストウィンドウも異なるし、権限設定も独立してるってとこは違うかも。

各サブエージェントは独自のコンテキストで動作し、メインの会話の汚染を防ぎ、高レベルの目標に集中し続けます。

メインからは独立してるのがメリットなのね。

サブエージェントはファイルで定義し、プロジェクト単位やユーザー単位で管理が可能。

# プロジェクトサブエージェントを作成
mkdir -p .claude/agents
echo '---
name: test-runner
description: テストを実行し失敗を修正するために積極的に使用
---

あなたはテスト自動化の専門家です。コードの変更を見たら、適切なテストを積極的に実行してください。テストが失敗した場合、失敗を分析し、元のテストの意図を保持しながら修正してください。' > .claude/agents/test-runner.md

# ユーザーサブエージェントを作成
mkdir -p ~/.claude/agents
# ... サブエージェントファイルを作成

あー、↑の例の場合、メインのエージェントは実装を担当して、テスト用のエージェントが独立してテストをするのか…?扱いが難しそうだ。

責務ごとにエージェントを分けて、メインエージェントがそれを使い分けられるようにすることが重要みたいだけど、まだイメージし難いな。必要に応じて少しずつ取り入れていこう。

shingo.sasakishingo.sasaki

出力スタイル

https://docs.anthropic.com/ja/docs/claude-code/output-styles

いわゆるシステムプロンプトの書き換えの話らしい。
デフォルトではソフトウェア開発に特化して、コード生成と学習に重きをおいてるようだから、基本的にはデフォルトで良さそう。

出力スタイルも複数定義しておいて任意に切り替えることができる。

shingo.sasakishingo.sasaki

Claude Code フック

https://docs.anthropic.com/ja/docs/claude-code/hooks-guide

Claude Codeフックは、Claude Codeのライフサイクルのさまざまなポイントで実行されるユーザー定義のシェルコマンドです。

めっちゃほしいやつかもー。Cursor にはないやつじゃない?

自動フォーマット: ファイル編集後に.tsファイルに対してprettierを実行し、.goファイルに対してgofmtを実行するなど。

これ。これをちゃんとやらせたい。

PreToolUse: ツール呼び出しの前に実行(ブロック可能)
PostToolUse: ツール呼び出し完了後に実行
UserPromptSubmit: ユーザーがプロンプトを送信したときに、Claudeが処理する前に実行
Notification: Claude Codeが通知を送信するときに実行
Stop: Claude Codeが応答を終了するときに実行
Subagent Stop: サブエージェントタスクが完了するときに実行
PreCompact: Claude Codeがコンパクト操作を実行しようとする前に実行
SessionStart: Claude Codeが新しいセッションを開始するか、既存のセッションを再開するときに実行

結構色々なタイミングで発火できるみたいね。

変更に対してフォーマッタをかける例

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|MultiEdit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.tool_input.file_path' | { read file_path; if echo \"$file_path\" | grep -q '\\.ts$'; then npx prettier --write \"$file_path\"; fi; }"
          }
        ]
      }
    ]
  }
}

なるほど。Tool使用後に、そのツールがファイル編集操作系で、ツールへの入力から対象ファイルを特定して実行するのか。意外と泥臭いな…。

shingo.sasakishingo.sasaki

MCP

https://docs.anthropic.com/ja/docs/claude-code/mcp

MCPかぁ。正直現状はデータソースに対しては各種CLIを通じてアクセスする方が、主要なCLIの使い方を学習しているLLMと相性が良いのではと思ってる。もちろんそうでないリソースに対するアクセス手段としては有用なんだろうけど。

MCPの設定方法が詳解されてる。必要な時にまた読めば良さそう。

MCPサーバーは、ファイルを参照するのと同様に@メンションを使用して参照できるリソースを公開できます。

これはちょっと便利そうだな。MCPの利用を明示できるんだ。
> @github:issue://123を分析して修正を提案してもらえますか?

shingo.sasakishingo.sasaki

トラブルシューティング

https://docs.anthropic.com/ja/docs/claude-code/troubleshooting

同じコマンドを繰り返し承認している場合、/permissionsコマンドを使用して特定のツールを承認なしで実行できるように設定できます。権限ドキュメントを参照してください。

いまいま困ってたのはこの辺だったので、これで解決できそう。

shingo.sasakishingo.sasaki

アイデンティティとアクセス管理

https://docs.anthropic.com/ja/docs/claude-code/iam

Google Vertex AI を利用した認証を使用している。

読み書きコマンド実行の権限は /permissions から管理可能。基本的にはプロジェクト内に閉じた作業なら何やっても良さそう。コードの変更は git で管理できるし。

shingo.sasakishingo.sasaki

セキュリティ

https://docs.anthropic.com/ja/docs/claude-code/security

許可ベースのアーキテクチャを採用しているから、許可を求められたらそれが安全な作業かどうかちゃんとレビューする責任があるぞという話。

特に外部への接続系は慎重になってるみたい。

/permissionsで許可設定を定期的に監査する

これは大事そう。

shingo.sasakishingo.sasaki

コスト

https://docs.anthropic.com/ja/docs/claude-code/costs

チーム使用の場合、Claude CodeはAPIトークン消費量に基づいて課金されます。平均して、Claude CodeはSonnet 4で開発者1人あたり月額約100-200ドルかかりますが、ユーザーが実行しているインスタンス数や自動化での使用状況によって大きく変動します。

はえー、会社のお金だから実感ないけど、個人で考えたら結構だな。

トークン使用料を削減する

良さそうな Tips がチラホラ

  • /compact でコンテキストを圧縮
  • /clear でコンテキストをリセット
  • 指示は具体的に書く
  • 複雑なタスクは分解する
shingo.sasakishingo.sasaki

設定

https://docs.anthropic.com/ja/docs/claude-code/settings

設定ファイル (優先度順)

  • プロジェクト設定: .claude/settings.json
  • プロジェクト設定(git管理なし): .claude/settings.local.json
  • ユーザー設定: ~/.claude/settings.json

よく使いそうな設定

  • env: 環境変数
  • permissions: ClaudeCodeに与える権限
  • hooks: ツール実行前後に実行するカスタムコマンド
  • model: 使用するモデル

サブエージェントは agents ディレクトリ内に Markdown で記述する

ユーザーサブエージェント:~/.claude/agents/ - すべてのプロジェクトで利用可能
プロジェクトサブエージェント:.claude/agents/ - プロジェクト固有でチームと共有可能

環境変数 (気になったの抜粋)

  • BASH_MAX_OUTPUT_LENGTH: bash出力が中央で切り詰められる前の最大文字数
    • これもうちょっと表示してほしいと思ってたからありがたそう
  • CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR: 各Bashコマンド後に元の作業ディレクトリに戻る
    • 最高では?でもデフォルトじゃないってことはデメリットもあるのかな。
shingo.sasakishingo.sasaki

IDEに Claude Code を追加する

https://docs.anthropic.com/ja/docs/claude-code/ide-integrations

vscode (cursor) 連携できる。個人的には Claude Code と Cursor は明確に使い分けたいから、Claude Code を使い場合は素の vscode を使うようにしようかな。

クイック起動: Cmd+Esc(Mac)またはCtrl+Esc(Windows/Linux)を使用してエディターから直接Claude Codeを開くか、UIのClaude Codeボタンをクリックします
差分表示: コードの変更をターミナルではなくIDE差分ビューアーで直接表示できます。これは/configで設定できます
選択コンテキスト: IDEの現在の選択/タブがClaude Codeと自動的に共有されます
ファイル参照ショートカット: Cmd+Option+K(Mac)またはAlt+Ctrl+K(Linux/Windows)を使用してファイル参照(例:@File#L1-99)を挿入します
診断共有: IDEからの診断エラー(lint、構文など)が作業中に自動的にClaudeと共有されます

どれも嬉しい。エディタとの連携がないから辛いって思ってたけど、そういうところは保管してくれるのね。逆に言えば、基本的にはエディタ側とセットで使用することが前提とも言えそう。

shingo.sasakishingo.sasaki

ターミナル設定

https://docs.anthropic.com/ja/docs/claude-code/terminal-config

常にエディタと連携しておけばターミナルで直接使う機会はあんまりないとは思うので割愛。

でもこれは有効化する!!

Vimモード
Claude CodeはVimキーバインドのサブセットをサポートしており、/vimで有効にするか/configで設定できます。
shingo.sasakishingo.sasaki

メモリ管理

https://docs.anthropic.com/ja/docs/claude-code/memory

./CLAUDE.md みたいなやつ。こちらもプロジェクト設定とかユーザー設定とかがある。

CLAUDE.mdファイルは@path/to/import構文を使用して追加ファイルをインポートできます。

普通にパスを直書きするのと違うのかな。必ず読み込んでくれるようになるとか。

shingo.sasakishingo.sasaki

CLI リファレンス

https://docs.anthropic.com/ja/docs/claude-code/cli-reference

知らなかったやつで良さそうなの抜粋

  • claude -p "query" SDK経由でクエリを実行し、終了
    • シンプルで、期待する答えが限られてるときはこれだけで十分そう
    • そのまま標準出力をパイプに繋いだりとかもできそう
  • claude -c 最新の会話を継続
    • 一々 claude --resume から最新の選んでやってたわ
  • --dangerously-skip-permissions 許可プロンプトをスキップ(注意して使用)
    • 確実によくないんだろうけど、つい使いたくなっちゃいそう
このスクラップは1ヶ月前にクローズされました