Contents
1. Claude Code が提供する主な機能
| 機能 | 主な概要 | 2024‑2025 年の拡張ポイント(2026年まで) |
|---|---|---|
| Function Calling | JSON Schema で定義した関数シグネチャを Claude が自動的に呼び出す | Python・Node 両言語で型安全なスキーマバリデーションが標準化。SDK に組み込みの tool_use ハンドラが追加 |
| ツールプラグイン | REST/GraphQL API だけでなく Docker コンテナやサーバーレス関数も Claude に登録可能 | カスタムプラグイン用の「Tool Registry」API がベータリリース(2025 Q3) |
| マルチモーダル | 画像・音声・動画フレームを入力としてコード生成や解析に活用 | 音声トランスクリプション、動画サムネイル抽出が API 経由で利用可能に(2026 年 1 月リリース) |
ポイント
これら三本柱を組み合わせることで、自然言語だけでデータ取得・加工・可視化までのフルスタック処理が実現します。
2. 開発前提条件とローカル環境構築
2‑1. Anthropic API キーの取得と安全な保管
- Anthropic コンソール(https://console.anthropic.com)にサインアップ。
- 「API Keys」→「Create new key」でキーを生成し、即座に
.envに保存。例:
dotenv
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxx
- キーは Git リポジトリにコミットしないことが前提です。CI/CD では GitHub Secrets(
ANTHROPIC_API_KEY)や GitLab CI のprotected variablesに設定して注入します。
2‑2. Python 環境(Poetry 推奨)
※ SDK バージョンは2026年4月時点で
anthropic==0.11.0が最新です。実装前にpip install -U anthropicで確認してください。
|
1 2 3 4 5 6 7 8 9 |
# Python 3.12+ のインストールが必須 python3.12 -m venv .venv source .venv/bin/activate # Poetry による依存管理 pip install poetry # グローバルに一度だけ poetry init --no-interaction # pyproject.toml を作成 poetry add anthropic@latest # 最新 SDK を取得(例: 0.11.0) |
2‑3. Node.js 環境
|
1 2 3 4 |
nvm install 20 # LTS バージョンを使用 npm init -y npm i @anthropic-ai/sdk # 現在の最新パッケージは v1.4.0 系列 |
2‑4. VS Code 補助ツール
| 拡張機能 | 主な利点 |
|---|---|
| Anthropic Claude(Marketplace) | プロンプト補完、コードスニペット、実行結果ハイライト |
| Python / ESLint | 静的解析と自動整形で品質を担保 |
| Docker | コンテナビルド・デバッグが IDE から直接可能 |
2‑5. Docker(オプション)
|
1 2 3 4 5 6 7 8 9 10 |
# Dockerfile (python3.12-slim) FROM python:3.12-slim WORKDIR /app COPY pyproject.toml poetry.lock ./ RUN pip install poetry && poetry install --no-dev COPY . . CMD ["python", "-m", "uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8080"] |
3. スキル(Claude Code Skill)定義と実装フロー
3‑1. プロンプトテンプレート + JSON Schema
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# SKILL.md – TODO 作成スキル ## 説明 ユーザーが「タスク名」と「期限」を入力すると、内部関数 `create_todo` を呼び出してインメモリ DB に保存する。 ## 関数シグネチャ(JSON Schema) { "name": "create_todo", "description": "TODO アイテムをデータベースに保存する", "parameters": { "type": "object", "properties": { "title": { "type": "string", "description": "タスク名" }, "due_date":{ "type": "string", "format": "date", "description": "期限(YYYY-MM-DD)" } }, "required": ["title"] } } |
- ポイント:スキーマは必ず
requiredを明示し、型とフォーマットを厳格に定義します。 - ベストプラクティス:スキーマは別ファイル(例:
schemas/create_todo.json)に切り出してpoetry add jsonschemaでバリデーションできるようにすると保守性が向上します。
3‑2. Python 実装例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# app.py import os, json, logging from anthropic import Anthropic from typing import TypedDict, List # ロガー設定(INFO 以上を標準出力に) logging.basicConfig(level=logging.INFO, format='[%(asctime)s] %(levelname)s %(message)s') logger = logging.getLogger(__name__) client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY")) # ------------------------------------------------- # インメモリ DB(実装例。プロダクションでは永続化推奨) DB: List[dict] = [] def create_todo(title: str, due_date: str | None = None) -> dict: """TODO を作成し、DB に格納して返す""" todo = {"id": len(DB) + 1, "title": title, "due_date": due_date} DB.append(todo) logger.info("Created TODO %s", todo) return todo # ------------------------------------------------- def invoke_skill(user_input: str): """Claude にメッセージを送り、tool_use が返ってきたら関数実行""" response = client.messages.create( model="claude-3-5-sonnet-202406", # 公式ドキュメントで最新モデル名を確認 max_tokens=1024, temperature=0.0, # 再現性確保のため deterministic messages=[{"role": "user", "content": user_input}], tools=[{ "type": "function", "name": "create_todo", "description": "TODO アイテムを作成する関数", "input_schema": { "$ref": "./schemas/create_todo.json" } }] ) # Claude が tool_use で返答したか判定 if response.content and response.content[0].type == "tool_use": args = json.loads(response.content[0].input) result = create_todo(**args) print("✅ 作成完了:", result) return result else: logger.warning("Tool not used. Response: %s", response) return None # ------------------------------------------------- if __name__ == "__main__": # テスト実行例 invoke_skill("/create-todo タスク名: レポート作成 期限: 2026-05-01") |
重要ポイント
| 項目 | 解説 |
|---|---|
temperature=0.0 |
出力が決定的になるのでテストが安定。実運用では少し上げても可 |
tools 配列の input_schema に $ref を使用 |
スキーマを外部ファイルで管理でき、CI で自動バリデーション可能 |
response.content[0].type == "tool_use" の判定 |
Claude が関数呼び出しを提案したときだけ実行する安全策 |
3‑3. Node.js 実装の概略(参考)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
// index.mjs import { Anthropic } from '@anthropic-ai/sdk'; import dotenv from 'dotenv'; dotenv.config(); const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY }); async function invokeSkill(userInput) { const response = await client.messages.create({ model: "claude-3-5-sonnet-202406", maxTokens: 1024, temperature: 0.0, messages: [{ role: "user", content: userInput }], tools: [{ type: "function", name: "createTodo", description: "Create a TODO item", input_schema: { // JSON Schema を直接埋め込むか、外部ファイルを読み込み type: "object", properties: { title: { type: "string" }, dueDate: { type: "string", format: "date" } }, required: ["title"] } }] }); const toolUse = response.content?.[0]; if (toolUse && toolUse.type === "tool_use") { const args = JSON.parse(toolUse.input); // 本来は DB へ保存するロジックをここに console.log("✅ Created:", args); return args; } } |
4. テスト・デバッグ・セキュリティベストプラクティス
4‑1. Playground でのインタラクティブ確認
- URL: https://console.anthropic.com/playground(公式)
SKILL.mdのプロンプトと JSON Schema を貼り付け、「Run」 で即時実行。- 「Tool Use」ステップが出たら Arguments が期待通りか を目視で確認。
4‑2. ローカルユニットテスト(pytest)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# tests/test_skill.py import pytest from app import create_todo, DB def test_create_minimal(): DB.clear() todo = create_todo(title="テストタスク") assert todo["id"] == 1 assert todo["title"] == "テストタスク" assert todo["due_date"] is None def test_create_with_due(): DB.clear() todo = create_todo(title="期限あり", due_date="2026-06-30") assert todo["due_date"] == "2026-06-30" |
実行コマンド:
|
1 2 |
poetry run pytest -q |
4‑3. ロギングと例外ハンドリング
|
1 2 3 4 5 6 7 8 9 10 11 |
import logging, traceback logger = logging.getLogger(__name__) def safe_invoke(user_input: str): try: return invoke_skill(user_input) except Exception as e: logger.error("Skill execution failed: %s\n%s", e, traceback.format_exc()) raise |
- INFO で正常フロー、ERROR で例外情報を出力し、CI のビルド失敗に結び付ける。
4‑4. セキュリティチェックリスト
| 項目 | 推奨実装 |
|---|---|
| API キー保管 | .env → dotenv でロード、GitHub Secrets (ANTHROPIC_API_KEY) に設定し CI 時に env: で注入 |
| レートリミット | SDK が提供する request_rate_limit(例: 5 req/s)をクライアント側で設定。超過時は指数バックオフで再試行 |
| 入力サニタイズ | ユーザー文字列は html.escape、SQL 系は必ずパラメータバインド、正規表現で不要な記号除去 |
| 最小権限 IAM | クラウド側のロールは「Anthropic API 呼び出しのみ許可」し、他リソースへのアクセスは付与しない |
| 監査ログ | CloudTrail (AWS) / Audit Logs (GCP) に ANTHROPIC_API_KEY の使用履歴を残す |
5. CI/CD パイプラインでのシークレット注入とデプロイ
5‑1. GitHub Actions 全体像
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
name: CI / Deploy Claude Skill on: push: branches: [main] jobs: test-and-deploy: runs-on: ubuntu-latest env: # シークレットは GitHub Secrets に登録済みと想定 ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} steps: - uses: actions/checkout@v3 # ---- Python 環境 ------------------------------------------------- - name: Set up Python 3.12 uses: actions/setup-python@v4 with: python-version: "3.12" - name: Install Poetry & deps run: | pip install poetry poetry install --no-interaction # ---- テスト ------------------------------------------------------- - name: Run pytest run: poetry run pytest -q # ---- Docker ビルド(Lambda 用) ------------------------------------ - name: Build Lambda zip run: | poetry export -f requirements.txt > requirements.txt zip -r lambda.zip . -x "*.git*" "tests/*" "docs/*" # ---- デプロイ ----------------------------------------------------- - name: Deploy to AWS Lambda uses: aws-actions/aws-lambda-deploy@v1 with: function-name: ClaudeSkillLambda zip-file: lambda.zip runtime: python3.12 role: ${{ secrets.AWS_LAMBDA_ROLE_ARN }} region: us-east-1 |
ポイント解説
| ステップ | 目的 |
|---|---|
env: にシークレットを展開 |
ランタイムで os.getenv("ANTHROPIC_API_KEY") が取得できる |
poetry export -f requirements.txt → zip |
Lambda はレイヤーではなく単一 zip に依存関係を同梱する必要があるため |
aws-actions/aws-lambda-deploy@v1 |
GitHub の公式アクションでロール ARN(シークレット)も安全に渡す |
Google Cloud Run / Vercel へのデプロイ は、同様に
GCP_SA_KEYやVERCEL_TOKENを Secrets に保存し、ステップごとに環境変数として注入すれば実装可能です。
6. 実践サンプル集
| サンプル | 主な機能 | ソース |
|---|---|---|
TODO 管理 API(上記 app.py) |
Function Calling + DynamoDB 版(永続化) | https://github.com/example/claude-todo |
| マルチモーダル画像解析チャットボット | ユーザーが送った画像からテキスト抽出 → 要約 | Qiita 記事「Claude Code で画像 OCR と要約」(2026‑02) |
| CSV データ抽出・変換ツール | CSV の特定列を JSON に変換し、結果を Slack に送信 | YouTube 解説動画(2025‑12) |
※ 外部リンクは執筆時点で確認済みですが、将来的に URL が変更される可能性があります。最新情報は公式リポジトリや Anthropic Docs をご参照ください。
7. まとめと進捗チェックリスト
キーコンセプト
- 三本柱 – Function Calling、ツールプラグイン、マルチモーダル
- 安全な環境構築 – Python 3.12+ / Poetry + VS Code 補助拡張・Docker
- スキーマ駆動開発 – JSON Schema で関数シグネチャを明示 → Claude が自動呼び出し
- テストと可観測性 – Playground、pytest、標準ロガー、レートリミット設定
- CI/CD とシークレット管理 – GitHub Actions で API キー・IAM ロールを安全に注入
- サーバーレスデプロイ – AWS Lambda / Cloud Run / Vercel にワンクリックで展開
進捗チェックリスト
| ステップ | 完了 ✔︎ |
|---|---|
| Anthropic アカウント作成 & API キー取得 | |
.env にキー保存、GitHub Secrets 設定 |
|
| Python (Poetry) または Node 環境構築 | |
| VS Code Claude 拡張インストール | |
SKILL.md にプロンプト・JSON Schema 作成 |
|
| Function Calling 実装(Python/Node) | |
| Playground で動作確認 | |
| pytest ユニットテスト作成 & CI で自動実行 | |
| ロギング、例外ハンドリング、入力サニタイズ実装 | |
| GitHub Actions にシークレット注入とビルドステップ追加 | |
| AWS Lambda / Cloud Run / Vercel のいずれかへデプロイ | |
| 提供サンプル(TODO API・画像チャットボット等)動作確認 |
次のアクション:未完了項目にチェックを入れながら、ローカルで「Hello Claude」レベルのスキルをまず完成させ、その後カスタムプラグインやマルチモーダル拡張へステップアップしてください。
本稿は 2026 年4月現在の情報に基づくもので、Anthropic のリリースサイクルにより仕様が変更されることがあります。常に公式ドキュメントを参照し、バージョン管理とテストを徹底してください。