Claude Codeの12の主要機能: 詳細解説と実例
1. 概要
Claude Codeはターミナルで実行されるコーディングエージェントで、プロジェクト内のコードを読み取り、編集し、コマンドを実行し、自動でテストできます。問題はエージェントが強力である反面、デフォルト設定のままでは「迷子」になりやすく、誤ったファイルを編集したり、コンテキストウィンドウ全体を読んだり、危険なコマンドを実行したりする可能性があります。この記事では、このエージェントを目的を持ってコントロールするのに役立つ12の機能を説明します。読み終わった後は、CLAUDE.md、permissions、hooks、MCPなどを設定して、Claude Codeがチームの規約に従い、Order、Customer、PaymentServiceを含むSpring Bootプロジェクトの例に対して正しく動作させる方法を理解できるでしょう。
2. CLAUDE.md
CLAUDE.mdはメモリファイルで、Claude Codeが各セッションの開始時に自動的に読み込みます。ここではコード規約、ディレクトリ構造、ビルドコマンド、スタイルガイドなどを宣言して、エージェントが毎回聞き直す必要がないようにします。
# CLAUDE.md
## アーキテクチャ
- パッケージ `com.nonladev.order`: ドメイン Order、Customer
- パッケージ `com.nonladev.payment`: PaymentService、PaymentGateway (インターフェース)
## 規約
- 新しいpublicメソッドにはJUnit 5 + AssertJでテストを常に書く
- `@Autowired`フィールドインジェクションは使用禁止、コンストラクタインジェクションのみ
- 「完了」と報告する前に `mvn verify` を実行
## よく使うコマンド
- ビルド: `mvn -q clean verify`
- ローカル実行: `mvn spring-boot:run`
Claudeはセッション内の任意のタスクを実行する前に、このファイルを読み込みます。「PaymentServiceの払い戻しメソッドを追加する」と要求すれば、エージェントは自動的にコンストラクタインジェクションを使用し、テストを添えて実装します。毎回説明する必要はありません。
注意: CLAUDE.mdに詳細を詰め込みすぎてはいけません。長いファイルはセッションの開始時点でコンテキストウィンドウを消費し、その大部分は現在のタスクに無関係です。
3. Permissions
PermissionsはどのツールをClaudeが使用でき、どのツールをブロックするかを制御します。エージェントが実際のシェルコマンドを実行する権限を持つため、これは重要です。
{
"permissions": {
"allow": [
"Bash(mvn *)",
"Edit(src/main/java/**)"
],
"deny": [
"Bash(rm -rf *)",
"Edit(src/main/resources/application-prod.properties)"
]
}
}
このファイル settings.json は .claude/ ディレクトリに配置します。allow行はエージェントに mvn コマンドの実行と src/main/java 内のファイル編集を許可しますが、deny行は再帰的削除コマンドと本番設定ファイルの編集を絶対にブロックします。Claudeが権限を超えたアクションを望むと、実行前に確認を求めます。
よくあるエラー: permissionsを広すぎる設定にする (
allow: ["*"]) とエージェントは許可なしに任意のコマンドを実行できます。機密ファイルやシークレットに対して危険です。
4. Plan Mode
Plan Modeはコードに手を付ける前に計画を提示するようClaudeに強制します。計画を確認し、必要に応じて修正してから実行します。
> PaymentServiceに部分払い戻し機能を追加
[プランモード]
1. PaymentServiceに refundPartial(Order order, BigDecimal amount) メソッドを追加
2. amount <= order.getTotalPaid() を検証
3. PaymentGateway.refund(...) を呼び出す
4. 2つのケース用にPaymentServiceTestを書く: 有効、金額超過
この計画を実行しますか? [y/n/edit]
edit と答えると、Claudeは計画を修正します (例: 監査ログステップを追加) 。実行前に修正が完了します。このアプローチは多くのファイルを変更するタスクで特に役立ちます。計画段階で誤った方向を発見でき、実際のソースコードが散らかった後ではなく済みます。
5. Checkpoints
Checkpointsはセッション内の重要な時点での自動スナップショットで、エージェントが何かを壊した場合に「巻き戻す」ことができます。
# セッション内のチェックポイント履歴を表示
/rewind
# 出力
チェックポイント 1 - 10:02 - PaymentService修正前
チェックポイント 2 - 10:05 - refundPartial追加後
チェックポイント 3 - 10:09 - テスト修正後 (エラー中)
# チェックポイント2に戻る
/rewind 2
gitコミットと異なり、checkpointsは自動的に作成されます。Claudeが大きな変更の前に自動的に保存します。エージェントが誤った方向でテストを修正する場合 (例: テストを「パス」させるためにアサーションをコメントアウト) 、手動で git reset する必要なく、前の状態に巻き戻します。
注意: checkpointsは現在のセッション内でのみ存在し、gitに置き換わるものではありません。マイルストーンに達したら、実際にコミットする必要があります。
6. Skills
Skillsは再利用可能な指示ファイルで、Claudeは自動的に検出してタスクに適用します。毎回名前を呼ぶ必要がありません。
---
name: spring-boot-test-writer
description: Spring Bootプロジェクトのサービスレイヤーのテスト作成時に使用
---
サービスクラスのテストを作成する際:
1. JUnit 5 + AssertJを使用、Hamcrestは使用しない
2. Mockitoでdependencyをモック、変数を `mock<Dependency>` と命名
3. テストメソッドを `should_<期待値>_when_<条件>` という形式で命名
このファイルは .claude/skills/spring-boot-test-writer.md に配置します。「PaymentServiceのテストを書く」と要求すると、Claudeは自動的に適切なスキルを認識し、その規約を適用します。結果として:
class PaymentServiceTest {
private final PaymentGateway mockGateway = mock(PaymentGateway.class);
private final PaymentService paymentService = new PaymentService(mockGateway);
@Test
void should_refundAmount_when_amountIsWithinPaidTotal() {
Order order = new Order("ORD-1", BigDecimal.valueOf(200));
paymentService.refundPartial(order, BigDecimal.valueOf(50));
verify(mockGateway).refund(order.getId(), BigDecimal.valueOf(50));
}
@Test
void should_throwException_when_amountExceedsPaidTotal() {
Order order = new Order("ORD-2", BigDecimal.valueOf(100));
assertThatThrownBy(() -> paymentService.refundPartial(order, BigDecimal.valueOf(150)))
.isInstanceOf(IllegalArgumentException.class);
}
}
Skillsとは異なります CLAUDE.mdにおいて: CLAUDE.mdは常にロードされ、スキルは必要な場合にのみロードされます。多くの専門的な規約を持つプロジェクトのセッション開始時のコンテキストウィンドウを節約します。
7. Hooks
Hooksはエージェントライフサイクルの特定ポイントでシェルスクリプトを実行します。例えば PreToolUse (ツール使用前) または PostToolUse (ツール使用後)。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit",
"command": "mvn -q -pl . checkstyle:check"
}
]
}
}
ファイル settings.json は .claude/ ディレクトリに配置します。Claudeがファイル編集を完了するたびに (Edit ツール) 、hookは自動的に checkstyle:check を実行します。コマンドが失敗すれば、出力がClaudeに返され、エージェントはタスク完了を報告する前にスタイルエラーに従ってコード自体を修正します。手動チェックは不要です。
[PostToolUse] mvn checkstyle:check
エラー: PaymentService.java:42: 行が120文字を超えています
→ Claudeは42行目を自動的に短縮しチェックを再実行
使うべきでない時: hookはツールが呼ばれるたびに実行されるので、重いスクリプト (フルプロジェクトビルド) の場合、セッションは著しく遅くなります。高速なチェックが必要なライフサイクルイベントにのみhookします。
8. MCP
MCP (Model Context Protocol) はClaudeをデータベース、内部API、issueトラッカーなどの外部システムに接続します。標準化されたツールとして機能します。
{
"mcpServers": {
"postgres-orders": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres",
"postgresql://localhost:5432/orders_db"]
}
}
}
このサーバーを .claude/settings.json に登録した後、直接質問できます:
> PENDINGステータスの注文は何件ありますか?
[MCP: postgres-orders] SELECT COUNT(*) FROM orders WHERE status = 'PENDING';
→ 37件のPENDING注文があります
Claudeは自動的にSQLを生成し、MCPサーバー経由で呼び出し、データベースからの実際の結果を返します。SQLクエリを別のターミナルに手動でコピーペーストする必要はありません。
9. Plugins
Pluginはskills、MCPサーバー、関連するhooksをバンドルした完全なパッケージで、複数のファイル設定の代わりに一度にインストールできます。
/plugin install spring-boot-toolkit
このコマンドは想定されるpluginをインストールします: Spring Boot test skills、各編集後に mvn verify を実行するhook、およびSpring Boot Actuatorエンドポイントに接続してエージェントが自動的にヘルスチェックを検査できるMCPサーバー。skills、hook、MCPを個別に設定する3つのファイル (セクション6-8) を書く代わりに、pluginは単一のコマンドで一括してバンドルし、チーム全体で共有できます。
10. Context
Contextは現在のセッションのコンテキストウィンドウです。読み込まれたすべてのファイル、会話履歴、コマンド出力が該当します。コマンド /context は使用量を表示します。
/context
Context使用: 48,200 / 200,000 トークン (24%)
- CLAUDE.md: 1,200 トークン
- ファイル読み込み: PaymentService.java、Order.java、PaymentServiceTest.java (6,400 トークン)
- 会話履歴: 38,000 トークン
- ツール出力: 2,600 トークン
会話履歴がほとんどを占める場合、新しいセッションを開始するか圧縮すべき時を知ります。セッション開始時に述べた重要な詳細をClaudeが「忘れる」のを防げます。
11. Slash Commands
Slash commandは繰り返し実行するタスク用のショートカットです。毎回長いプロンプトを書き直さずに / を入力して名前を呼びます。
---
name: review-pr
description: 現在のdiffを標準チェックリストでレビュー
---
現在のコードdiffを以下のチェックリストでレビュー:
1. 新しいロジック用のテストはありますか?
2. ログに機密情報 (カード番号、パスワード) は含まれていますか?
3. コンストラクタインジェクション規約に違反していませんか?
各項目をPASS/FAILで答え、理由を付けてください。
このファイルを .claude/commands/review-pr.md に保存し、呼び出します:
/review-pr
1. PASS - PaymentServiceTestにはrefundPartialのテストがあります
2. FAIL - ログはorder.getCardNumber()を58行目に含んでいます
3. PASS - コンストラクタインジェクションを使用しています
Slash commandはskillと異なります: skillは文脈的に自動アクティベートされ、slash commandは明示的に名前で呼ぶ必要があります。PR審査、リリースノートなどの固定チェックリストに適しています。
12. Compaction
Compactionは長い会話履歴を要約に圧縮し、情報を失わずにトークンを解放します。
/compact
圧縮前: 182,000 / 200,000 トークン
圧縮後: 24,000 / 200,000 トークン
保持された要約:
- 進行中: PaymentServiceにrefundPartialを追加
- 完了: PaymentServiceTest (2つのテストケースがpass)
- 残り: /refundエンドポイント用のOpenAPI仕様を更新
エージェントがコンテキスト満杯で会話履歴全体を忘れるのではなく、compactionは重要なポイント (進行中のタスク、完了したタスク、不足しているもの) をテキスト要約として保ちます。その後セッションを続行し、ほとんどのコンテキストが空です。大きなタスク小項目を完了した後、次のタスクに移る前に、主動的に /compact を呼ぶべきです。
13. Subagents
Subagentsは複数のエージェントをClaudeが並列で生成でき、各エージェントが大きなワークフロー内の独立した部分を担当できます。
---
name: test-writer
description: 指定されたクラス用のユニットテストを作成するだけ
tools: Read, Edit, Bash
---
ビジネスロジックは編集しないで、テストだけを書いてください。JUnit 5 + AssertJを使用してください。
このサブエージェントファイルを .claude/agents/test-writer.md に保存すると、大きなタスクを主エージェントに割り当て、主エージェントは自動的に分割できます:
> refundモジュール完成: ロジック追加、テスト作成、ドキュメント更新
[メインエージェント] 3つのサブエージェントに並列分割:
→ subagent "code-writer": PaymentServiceにrefundPartialを追加
→ subagent "test-writer": PaymentServiceTestを作成
→ subagent "doc-writer": README.mdを更新
[3つのサブエージェント並列実行] ... 42秒後完了
メインエージェントが順序立てて各ステップを処理する (コード → テスト → ドキュメント、3倍時間がかかる可能性) のではなく、subagentsは相互に依存しない複数の部分を並行処理します。多くのステップのワークフローに有用です。
使うべきでない時: ステップが順序立てて依存する場合 (例: テスト作成にはコードが既に存在する必要があるため、インターフェースを知るため) 、並列実行するとサブエージェントテストは実行前にコードが存在しないため、エラーが生じます。真に独立したタスクにのみ subagents を使用してください。
14. 結論
上記の12の機能は3つの明確なグループに分かれます: エージェントを指向するグループ (CLAUDE.md、Skills、Plan Mode)、安全性を制御するグループ (Permissions、Checkpoints、Hooks)、および能力を拡張するグループ (MCP、Plugins、Subagents)。Context、Slash Commands、Compactionは、エージェントが長いセッション内で効率的に実行するのを助けるインフラストラクチャレイヤーです。12すべてを一度に使う必要はありません。現在のプロジェクトのためにCLAUDE.mdとPermissionsから始め、ワークフローが本当に必要とするときにHooksまたはMCPを追加してください。