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

スクラップについて
完全に乗り遅れたが、ようやく会社のお金で 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 の強みはここにありそう。標準出力をパイプでコンテキストにできるのは強そうだ。

クイックスタート
インストール&セットアップは済んでるので割愛。
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
便利そうだ。

一般的なワークフロー
プロンプト周りの話はわかりきってるので割愛。
専門的なサブエージェントを使用する
特定のタスクをより効果的に処理するために、専門的な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
プロジェクト固有のコマンドを作成する
プロンプトに対してエイリアスを貼るみたいなやつか。うーん、ローカルでは作るかもしれない。メンバーで共有するレベルのものを作れるかは微妙。
個人的なスラッシュコマンドを作成する
あ、こっちも別にあるならこっちでいいや。

Claude Code SDK
アプリケーションに Claude Code を組み込む方法の話かな。
他のツールの操作をトリガーに Claude Code を走らせるみたいなワークフローを組むために色々できるよという話っぽい。
CLI を使う場合も組み込み向けのオプションが色々あるみたい。
今はこういうのは Devin でやってるけど、Claude でやりたいってなったら詳細調べるで良さそう。

サブエージェント
Claude Codeのカスタムサブエージェントは、特定のタイプのタスクを処理するために呼び出すことができる専門化されたAIアシスタントです
やっぱ Devin の PlayBook に近いか?コンテキストウィンドウも異なるし、権限設定も独立してるってとこは違うかも。
各サブエージェントは独自のコンテキストで動作し、メインの会話の汚染を防ぎ、高レベルの目標に集中し続けます。
メインからは独立してるのがメリットなのね。
サブエージェントはファイルで定義し、プロジェクト単位やユーザー単位で管理が可能。
# プロジェクトサブエージェントを作成
mkdir -p .claude/agents
echo '---
name: test-runner
description: テストを実行し失敗を修正するために積極的に使用
---
あなたはテスト自動化の専門家です。コードの変更を見たら、適切なテストを積極的に実行してください。テストが失敗した場合、失敗を分析し、元のテストの意図を保持しながら修正してください。' > .claude/agents/test-runner.md
# ユーザーサブエージェントを作成
mkdir -p ~/.claude/agents
# ... サブエージェントファイルを作成
あー、↑の例の場合、メインのエージェントは実装を担当して、テスト用のエージェントが独立してテストをするのか…?扱いが難しそうだ。
責務ごとにエージェントを分けて、メインエージェントがそれを使い分けられるようにすることが重要みたいだけど、まだイメージし難いな。必要に応じて少しずつ取り入れていこう。

出力スタイル
いわゆるシステムプロンプトの書き換えの話らしい。
デフォルトではソフトウェア開発に特化して、コード生成と学習に重きをおいてるようだから、基本的にはデフォルトで良さそう。
出力スタイルも複数定義しておいて任意に切り替えることができる。

Claude Code フック
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使用後に、そのツールがファイル編集操作系で、ツールへの入力から対象ファイルを特定して実行するのか。意外と泥臭いな…。

GitHub Actions
GitHub に組み込んで Issue から PR を作ってもらったり、レビュー依頼を投げたりできる奴。
まぁなんとなくどういうことができるのかはイメージできるので割愛。

MCP
MCPかぁ。正直現状はデータソースに対しては各種CLIを通じてアクセスする方が、主要なCLIの使い方を学習しているLLMと相性が良いのではと思ってる。もちろんそうでないリソースに対するアクセス手段としては有用なんだろうけど。
MCPの設定方法が詳解されてる。必要な時にまた読めば良さそう。
MCPサーバーは、ファイルを参照するのと同様に@メンションを使用して参照できるリソースを公開できます。
これはちょっと便利そうだな。MCPの利用を明示できるんだ。
> @github:issue://123を分析して修正を提案してもらえますか?

トラブルシューティング
同じコマンドを繰り返し承認している場合、/permissionsコマンドを使用して特定のツールを承認なしで実行できるように設定できます。権限ドキュメントを参照してください。
いまいま困ってたのはこの辺だったので、これで解決できそう。

デプロイメント 概要
このへんは情シスなどがすごい頑張ってくれてるので割愛

高度なインストール
なんとなく npm でなくネイティブインストールを使ってしまったが今のところ問題なし。

アイデンティティとアクセス管理
Google Vertex AI を利用した認証を使用している。
読み書きコマンド実行の権限は /permissions
から管理可能。基本的にはプロジェクト内に閉じた作業なら何やっても良さそう。コードの変更は git で管理できるし。

セキュリティ
許可ベースのアーキテクチャを採用しているから、許可を求められたらそれが安全な作業かどうかちゃんとレビューする責任があるぞという話。
特に外部への接続系は慎重になってるみたい。
/permissionsで許可設定を定期的に監査する
これは大事そう。

データ使用
基本的にはデータは学習には使用しないよという話。

監視
OpenThelemetry を使用した、利用状況の監視、分析周りの話。ここもまぁ今は良い。

コスト
チーム使用の場合、Claude CodeはAPIトークン消費量に基づいて課金されます。平均して、Claude CodeはSonnet 4で開発者1人あたり月額約100-200ドルかかりますが、ユーザーが実行しているインスタンス数や自動化での使用状況によって大きく変動します。
はえー、会社のお金だから実感ないけど、個人で考えたら結構だな。
トークン使用料を削減する
良さそうな Tips がチラホラ
-
/compact
でコンテキストを圧縮 -
/clear
でコンテキストをリセット - 指示は具体的に書く
- 複雑なタスクは分解する

アナリティクス
利用状況の分析。まぁここは会社側が活用度を調べるのに使いそう。

設定
設定ファイル (優先度順)
- プロジェクト設定: .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コマンド後に元の作業ディレクトリに戻る
- 最高では?でもデフォルトじゃないってことはデメリットもあるのかな。

IDEに Claude Code を追加する
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と共有されます
どれも嬉しい。エディタとの連携がないから辛いって思ってたけど、そういうところは保管してくれるのね。逆に言えば、基本的にはエディタ側とセットで使用することが前提とも言えそう。

ターミナル設定
常にエディタと連携しておけばターミナルで直接使う機会はあんまりないとは思うので割愛。
でもこれは有効化する!!
Vimモード
Claude CodeはVimキーバインドのサブセットをサポートしており、/vimで有効にするか/configで設定できます。

メモリ管理
./CLAUDE.md
みたいなやつ。こちらもプロジェクト設定とかユーザー設定とかがある。
CLAUDE.mdファイルは@path/to/import構文を使用して追加ファイルをインポートできます。
普通にパスを直書きするのと違うのかな。必ず読み込んでくれるようになるとか。

ステータスライン設定
こだわれば色々活用できそうな気配がするけど、まぁ何かほしいなって思ってから見るで良さそう。

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

インタラクティブモード
キーバインドはだいたい直感的(UNIX的?) なので特に気になる点なし

スラッシュコマンド
たいだい他のページで目にしているコマンドたち。
/review
は活用したいな。PR作成後に全体俯瞰してみてもらいたい。

フックリファレンス
フックの話も途中で出てきたので、流し見。
やっぱファイルを作成、編集した時に自動修正適用したいな。
これは作れる気がする。

おわり。使い倒していくぞー。