エージェント型コーディングツール(Claude Code)を使った開発入門
こんにちは。エン・ジャパン株式会社のプラットフォームエンジニアリンググループ(PEG)に所属している山﨑です。エン・ジャパンと書くのもこれが最後になりそうで、10 月からは社名が「エン株式会社」となります。
Claude Code が定額で利用できるようになってから早数ヶ月。制限はありつつも、コスト面で安心して利用できるためほぼ毎日利用しています。個人では無料枠がある Gemini CLI を利用しており、最近は OpenAI の Codex も評判が良いと聞いていますので、機会があれば Codex を使ってみようと思っています。ただ暫くは、使い慣れていたり、コミュニティが充実している Claude Code を使い続けることになりそうです。
追記:Claude Sonnet 4.5 がリリースされたようです 🎉
概要
エージェント型コーディングツールにはいくつか種類があります。その中でも今回は、ターミナル内で動作する Claude Code による開発方法を紹介します。
Claude にエージェント型コーディングツールを説明してもらいました。
エージェント型コーディングツールは AI(人工知能)が開発者の代わりに、または開発者と協力してコーディング作業を自動化・支援するツールです。従来のコード補完ツールとは異なり、エージェント型ツールは具体的な指示を受けて、複数のファイルにまたがる複雑なタスクを自律的に実行できます。単一の関数やコードスニペットの生成にとどまらず、プロジェクト全体の構造を理解して作業を進められます。
業務では Anthropic の Claude Code を利用していますが、基本的な機能はどこも同じように搭載されている、もしくは搭載されるようになるため、使いやすいツールを使うのが良いと思います。(例えば、Claude Code の CLAUDE.md
と Gemini CLI の GEMINI.md
は同等)
<代表的なエージェント型コーディングツール(CLI)>
- Anthropic: Claude Code
- OpenAI: Codex CLI
- Google: Gemini CLI
導入方法
以下のコマンドでインストールするだけです。(公式)
npm i -g @anthropic-ai/claude-code
ただし、利用するにはアカウントを取得し、有料の Pro プラン以上に加入するか、API キーの取得が必要になりますので、事前に準備しておくと良いでしょう。Google Cloud の Vertex AI や AWS Bedrock を経由しての利用も可能ですが、Claude をそのまま利用するのがシンプルでおすすめです。
頻繁にバージョンアップしているので、以下から確認しておくのも良いです。
コマンド
通常のコンソールから実行するコマンド(CLI コマンド)と、Claude Code とのセッション中に利用するコマンドの2種類があります。
CLI コマンド
以下は、通常のターミナルから実行するコマンドの例です。
# 過去のコンテキストを引き継がずに起動
claude
# 直前のコンテキストを引き継いで起動
claude -c
claude --continue
# 過去のコンテキストを引き継いで起動
claude -r
claude --resume
# ヘルプ表示
claude -h
claude --help
# バージョン確認
claude -v
claude --version
# MCP (Model Context Protocol) の追加
claude mcp add-json xxx
セッション中のコマンド
セッション中は自然言語で指示を与えれば良いのですが、クイックコマンドとして以下のコマンドがあります。
# ファイル名を指定(補完も可能)
@{filename}
@README.md
# ドキュメントにルールを追加
#{rule}
#日本語で回答してください
# LLM を介さずコマンドを実行
!{command}
!ls -la
# Claude Code で定義されているスラッシュコマンドを実行
/{slash-command} {AUGUMENT...}
/modify-commit 5
他には Shift+Tab
で許可モードを切り替えて、自動承認で一気に実装したり、プランモードで慎重に実装したりします。
メモリ管理(CLAUDE.md)
Claude Code はルールベースで動作し、プロジェクト固有のコーディング規約やベストプラクティスを学習できます。
プロジェクトでは /init
コマンドによって CLAUDE.md
を作成することができるので、まずは作成しておくのが良いです。ホームディレクトリの CLAUDE.md
は別途作成しておきます。
また、/memory
コマンドでそれぞれを確認することができます。
# ホームディレクトリ(優先度:低):個人的な設定で、すべてのプロジェクトに適用される
~/.claude/CLAUDE.md
# プロジェクト(優先度:高):Git 管理してチーム全体で共有する
./CLAUDE.md
# 非推奨
./CLAUDE.local.md
# CLAUDE.md の内容を確認する(編集も可能)
/memory
./CLAUDE.md
は git 管理しておくと良いようですが、チーム全員で利用しない場合はあらかじめ相談しておいた方が良いです。AI による自動レビューで CLAUDE.md
の内容がチェックされるのですが、古い情報のままだと指摘が入るからです。Claude を利用していない人も CLAUDE.md
を修正する、レビューする際には CLAUDE.md
は見ない、などすれば解決するかもしれません。
設定(settings.json)
Claude Code の権限(Permissions)や参照ディレクトリ(additionalDirectories)、フック(Hooks)などを setting.json
に定義できます。(setting ではなく、settings であることには注意が必要です)
.claude/settings.local.json
もあり、非推奨とのことですが、勝手に生成されてそちらを優先的に見ていることがあるので、プロジェクトでは settings.local.json
を使った方が良いかもしれません。
# ホームディレクトリ(優先度:低)
~/.claude/settings.json
# プロジェクト(優先度:中)
.claude/settings.json
# プロジェクト(優先度:高):非推奨だが、勝手に生成される場合がある
.claude/settings.local.json
settings.json
のファイル構造は以下の通りです。
{
"permissions": {
"allow": [],
"deny": [],
"ask": []
}
"hooks": {
"xxx": [
{
"hooks": []
}
]
}
"additionalDirectories": []
}
Permissions
Claude Code の権限管理システムにより、AI が実行できる操作を細かく制御できます。
許可の種類は以下の3つがあります。ask は後から登場しました。
- allow: 自動的に実行される
- deny: 実行されない
- ask: 実行する際にユーザーに許可を求める
また、以下のようなツールがあります。
- Bash
- Edit
- Read
Edit の絶対パスは最初に //
とする、WebSearch は ()
を付けないなど細かいルールがあります。ルールが間違っていると読み込まなくなるので注意が必要です。正しいかどうかは /permissions
で確認しましょう。
deny に禁止事項を記載しておくのは良いですが、絶対に禁止したいことは私は特にないため、deny に指定はせず、ask に書いて確認して実行するようにしています。
/permissions を叩くと、allow/deny/ask の内容がアルファベット順に表示されるので、setting.json
にもアルファベット順に書いておく分かりやすいです。
以下は permissions の設定例です。
{
"permissions": {
"allow": [
"Bash(grep:*)",
"Bash(pwd)"
"Read(*)",
"WebFetch(domain:github.com)",
"WebSearch"
],
"deny": [],
"ask": [
"Bash(rm:*)",
]
}
}
additionalDirectories
通常はプロジェクト内のファイルのみを操作します。プロジェクト外のファイルを操作する場合は許可を求められますが、デフォルトで許可させたい場合は、additionalDirectories にパスを指定しておくと、permissions で許可されているツールを利用することができるようになります。
先ほどの Edit では絶対パスの先頭は //
でしたが、additionalDirectories での絶対パスの先頭は /
です。パスの最後は /
を付けておきましょう。
{
"additionalDirectories": [
"/xxx/yyy/zzz/"
]
}
Hooks
Hooks は特定のイベントが発生した際に自動的にコマンドが実行される機能です。AI は確率的なので、機械的に動かせるこの機能は重宝します。
以下の例にありますが、Stop は処理が完了したとき、Notification は許可が必要なときに呼び出され、私はこの 2 つをメインで利用しています。(通知させたいだけ)
{
"hooks": {
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Notification\" with title \"Claude Code\" sound name \"Glass\"'"
},
{
"type": "command",
"command": "curl -X POST -H 'Content-type: application/json' --data '{\"text\":\"MESSAGE\"}' WEBHOOK_URL"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Stop\" with title \"Claude Code\" sound name \"Glass\"'"
}
]
}
]
}
}
スラッシュコマンド(Slash commands)
スラッシュコマンドは、セッション中に /
で始まるコマンドを使って、Claude Code で定義している指示を素早く呼び出せる機能です。
ビルトインされているコマンドと、カスタムコマンドがあります。
ビルトインされているコマンド
以下は私がよく使うコマンドです
# コンテキストをクリア
/clear
# コンソールから抜ける
/exit
# CLAUDE.md を作成
/init
# 権限を確認
/permissions
# 以下のようなものもある
/compact
/memory
/model
/review
/security-review
カスタムスラッシュコマンド
.claude/commands
にファイルを作成すると、ファイル名がスラッシュコマンドになります。例えば、以下の構造であれば、/create-pr
や /add-issue-labels new-label
などのように呼び出せます。
.claude
├── commands
│ ├── create-pr.md
│ ├── add-issue-labels.md
ただし、Claude Code を再起動させないと変更を認識しないので、一度 /exit
して、claude -c
で戻ることが多いです。
カスタムスラッシュコマンドのファイルの構造は以下の通りです。
---
allowed-tools: 許可されたツール(継承されるので私は利用せず)
argument-hint: [message]
description: コマンドを入力する際に表示される説明
model: API のモデル名(継承されるので私は利用せず)
---
自然言語で指示を書きます。
$ARGUMENTS を使うことで引数を埋め込むことが可能です。
$1 や $2 も使えます。
私はコミットを作成する時には毎回カスタムスラッシュコマンドを使っています。
---
description: コミットを作成
---
このコマンドが呼び出されたら、最初に必ず「/create-commit コマンドが利用されました」と出力してください。
create-commit-agent エージェントを利用し、@.ai-rules/git/commit-rule.md のルールに従ってコミットしてください。
サブエージェント(Subagents)
Subagents は特定のタスクに特化した AI エージェントです。メインの Claude Code から独立して動作し、専門的なタスクを効率的に処理できます。独立しているため、コンテキストを引き継がないということには注意しましょう。
ファイルの中身は以下のようにします。
---
name: サブエージェントの名前。ファイル名と合わせておくと分かりやすい。
description: サブエージェントが呼び出される条件。必ずや MUST などを入れておくと呼ばれやすい。
model: sonnet などのモデル名。
color: サブエージェントが呼び出された時にサブエージェント名が色付きで出力される。
---
ここにサブエージェントの説明を書く
以下は私が日に何回も利用しているサブエージェントです。この程度であれば、カスタムスラッシュコマンドに含めれば良いかもしれませんが、今後の拡張や検証のために用意しています。
---
name: create-commit-agent
description: コミットの作成や編集を行う際には**必ず**使ってください。
model: sonnet
color: blue
---
あなたは経験豊富なソフトウェアエンジニアです。分かりやすいコミットを作成したり、編集したりすることに長けています。
@.ai-rules/git にあるドキュメントを参照しつつ、@.ai-rules/git/commit-rule.md のルールに従ってPRを作成したり編集したりしてください。
また、必ず確認したルール名を出力してください。
以下はカスタムスラッシュコマンドでサブエージェントを呼び出した時の例ですが、青色でサブエージェントが表示されており、どこでサブエージェントが呼び出されたか分かりやすくなっています。
GitHub Actions
Max プランに加入する、もしくは API キーを用いることで、GitHub Actions 上で Claude を動かすことが出来ます。
/install-github-app
コマンドを実行し、指示に従うだけで簡単にリポジトリで利用できるようになります。(GitHub との連携はよしなに)
実際に利用していると便利ではあるのですが、手元で Claude Code を動かすわけではないので、チューニングが別途必要です。
その他
週次制限や 5 時間制限があるので注意が必要です。
制限されると Claude Code だけでなく、通常の Claude も利用できなくなるので、どのタイミングでリセットされるか把握しておくと計画的に利用できます。
この記事が参考になりますので、よく制限に引っかかる方は見ておくと良いです。
最後に
エージェント型コーディングツールの登場により、徐々に AI にコーディングを任せるようになり、最近ではコードを書くときにはほぼ AI に依存するようになりました。一方、細かいことをしてもらおうとすると、適切なコンテキストを適切に用意してあげる必要があります。コンテキストの集約において、Everything as Code という概念が提唱されており、人間が持っているコンテキストの大部分を AI に読み込ませることができれば、レビューも含めて(※)ほぼ全て AI に任せられるのではないかと思っておりますが、そこに辿り着くためにはまだ暫く時間はかかりそうです。著作権侵害の件や週次制限など、話題が尽きることはなさそうなので、上手く活用していくために日々キャッチアップしていきたいです。
※最終的な判断や責任を取るのは人間なので、ハンコを押すだけとならないようにしたいです
Discussion