Claude Code: Best practices for agentic coding

先日、エージェント型コーディング向けのコマンドラインツール「Claude Code」をリリースしました。これは研究プロジェクトとして開発されたもので、Anthropicのエンジニアや研究者が自身のコーディングワークフローにClaudeをより自然に組み込めるようにするツールです。

Claude Codeは意図的に低レベルかつ中立的な設計となっており、特定のワークフローを強制することなく、モデルへの生のアクセスに近い形で利用できます。この設計思想により、柔軟でカスタマイズ可能、かつスクリプト化可能で安全な強力なツールを実現しています。強力な機能を備えている一方で、この柔軟性はエージェント型コーディングツールに慣れていないエンジニアにとっては学習曲線を伴うものとなります――少なくとも、各自が最適なベストプラクティスを確立するまでは。

本記事では、Anthropic社内チームにおいて効果が実証された一般的なパターンに加え、様々なコードベース・言語・環境でClaude Codeを活用している外部エンジニアの方々にも役立つ情報を網羅しています。ここで紹介する内容はすべて絶対的なものではなく、あくまで出発点として捉えてください。ぜひ実際に試してみて、ご自身に最適な方法を見つけてください!

より詳細な情報をお探しですか? Claude Codeの包括的なドキュメント(claude.ai/code)では、本記事で言及しているすべての機能に加え、追加の使用例、実装詳細、高度なテクニックなどを詳しく解説しています。

1. 環境設定をカスタマイズする

Claude Codeはエージェント型コーディングアシスタントとして、プロンプトに自動的にコンテキストを取り込みます。このコンテキスト収集には時間とトークンを消費しますが、環境設定を調整することで最適化が可能です。

a. CLAUDE.mdファイルを作成する

CLAUDE.mdは特別なファイルで、Claudeが会話を開始する際に自動的にコンテキストとして読み込まれます。このため、以下の情報をここに記載することが非常に有効です:

  • 一般的なbashコマンド
  • コアファイルやユーティリティ関数
  • コードスタイルガイドライン
  • テスト実施手順
  • リポジトリの使用マナー(ブランチ命名規則、マージとリベースの使い分けなど)
  • 開発者環境のセットアップ方法(例:pyenvの使用方法、どのコンパイラが動作するかなど)
  • プロジェクト固有の予期せぬ動作や警告事項
  • その他、Claudeに記憶させておきたい情報

CLAUDE.mdファイルには特定のフォーマット要件はありません。簡潔で人間が読みやすい形式を推奨します。例えば:

# Bash commands
- npm run build: Build the project
- npm run typecheck: Run the typechecker

# Code style
- Use ES modules (import/export) syntax, not CommonJS (require)
- Destructure imports when possible (eg. import { foo } from 'bar')

# Workflow
- Be sure to typecheck when you're done making a series of code changes
- Prefer running single tests, and not the whole test suite, for performance

CLAUDE.mdファイルは以下の複数の場所に配置できます:

  • リポジトリのルートディレクトリ、またはClaudeを実行する任意の場所(最も一般的な使用例)。この場合、ファイル名をCLAUDE.mdとし、Gitで管理してセッション間やチームメンバーと共有することをお勧めします(推奨)。または、「CLAUDE.local.md」という名前にして.gitignoreで管理することも可能です。
  • Claudeを実行するディレクトリの親ディレクトリ。これは特にモノレポ環境で有用で、例えばルート/fooディレクトリからClaudeを実行する場合、ルート/CLAUDE.mdとルート/foo/CLAUDE.mdの両方にこのファイルを配置できます。どちらのファイルも自動的にコンテキストに取り込まれます。
  • Claudeを実行するディレクトリの子ディレクトリ。これは上記の逆のケースで、この場合Claudeは必要に応じて子ディレクトリ内のファイルを扱う際にCLAUDE.mdファイルを自動的に取り込みます。
  • ホームフォルダ(~/.claude/CLAUDE.md)に配置すると、すべてのClaudeセッションに適用されます。

/initコマンドを実行すると、Claudeが自動的にCLAUDE.mdファイルを生成します。

リポジトリのルートディレクトリ、またはClaudeを実行する任意の場所(最も一般的な使用例)。この場合、ファイル名をCLAUDE.mdとし、Gitで管理してセッション間やチームメンバーと共有することをお勧めします(推奨)。または、「CLAUDE.local.md」という名前にして.gitignoreで管理することも可能です。 Claudeを実行するディレクトリの親ディレクトリ。これは特にモノレポ環境で有用で、例えばルート/fooディレクトリからClaudeを実行する場合、ルート/CLAUDE.mdとルート/foo/CLAUDE.mdの両方にこのファイルを配置できます。どちらのファイルも自動的にコンテキストに取り込まれます。 Claudeを実行するディレクトリの子ディレクトリ。これは上記の逆のケースで、この場合Claudeは必要に応じて子ディレクトリ内のファイルを扱う際にCLAUDE.mdファイルを自動的に取り込みます。 ホームフォルダ(~/.claude/CLAUDE.md)に配置すると、すべてのClaudeセッションに適用されます。 /initコマンドを実行すると、Claudeが自動的にCLAUDE.mdファイルを生成します。

CLAUDE.mdファイルはClaudeのプロンプトの一部となるため、頻繁に使用するプロンプトと同様に最適化する必要があります。よくあるミスとして、効果を検証せずに過剰な内容を追加してしまうことが挙げられます。モデルから最適な指示を引き出すために、時間をかけて試行錯誤し、最適な構成を見つけてください。

CLAUDE.mdファイルへのコンテンツ追加は、手動で行うことも、#キーを押すことでClaudeに指示を与え、関連するCLAUDE.mdファイルに自動的に組み込むことも可能です。多くのエンジニアは、コーディング時にコマンドやファイル、スタイルガイドラインを記録するために#キーを頻繁に使用し、その後CLAUDE.mdの変更をコミットすることで、チームメンバーも恩恵を受けられるようにしています。

Anthropicでは、時折CLAUDE.mdファイルをプロンプト改善ツールに通し、指示内容を調整しています(例:「重要」や「必ず実行」などの強調表現を追加することで指示の遵守率を向上させるなど)。

claude-code