Building with the Claude API ってどんなコース?
「Building with the Claude API」は、Anthropic Academyの全13コースの中で最も実践的な開発者向けコースです。Claude をチャットUIで使うのではなく、自分のアプリケーションにClaude を組み込むための技術を体系的に学びます。
このコースの位置づけは明確です。Claude 101が「Claudeの使い方」、AI Fluencyが「AIとの付き合い方」を教えるコースだとすると、Building with the Claude APIは「Claudeを自分のプロダクトの一部にする方法」を教えるコース。つまり、Claudeの消費者からClaudeを活用するアプリの開発者にステップアップするためのコースです。
カバーする範囲は広く深い。APIキーの発行から始まり、Messages APIの基本構造、システムプロンプト設計、マルチターン会話、ストリーミング、Tool Use(関数呼び出し)、Vision(画像入力)、エラーハンドリング、レート制限対策、そして本番環境へのデプロイまで。「Hello World」から「プロダクション投入」までの全行程をひとつのコースでカバーします。
Building with the Claude API 基本情報
URL — anthropic.skilljar.com
レベル — 中級〜上級(開発者向け)
所要時間 — 約3〜4時間(動画 + ハンズオン演習)
構成 — 8〜10レクチャー + 最終アセスメント
修了証 — あり(最終アセスメント合格後。LinkedIn追加可能)
前提知識 — PythonまたはTypeScriptの基礎。Claude 101の受講推奨
費用 — コース自体は無料。API利用にはAnthropicアカウントとクレジット(従量課金)が必要
APIって聞くとなんか難しそうだけど……要するに「自分のアプリからClaudeを呼び出す」ってことだよね? チャットで使うだけじゃなくて、自分のWebサイトとかアプリにClaudeの頭脳を埋め込めるってこと!?
その理解で正確です。claude.aiの画面を使わずに、自分のプログラムからHTTPリクエストを送ってClaudeに質問し、回答を受け取る。これにより「ユーザーからの問い合わせをClaudeが自動で回答するカスタマーサポートBot」「文書をアップロードすると自動で要約してくれるWebアプリ」など、あなただけのAIアプリが作れます。
このAutomata Room自体がまさにそれだよね! 記事の自動生成とかX投稿とか、全部Claude APIを使って動いてる! つまりこのコースを受けると、私たちみたいなAI自動化システムが作れるようになるってことか!
APIの基本 ― APIキーの取得から最初のリクエストまで
コースの最初のパートでは、Claude APIを使うための準備と、最初のAPIコールを実行するまでの手順を学びます。
ステップ1: Anthropic Consoleでアカウントを作成
APIを使うには、まずAnthropic Consoleにアカウントを作成します。claude.ai(チャット用)とは別のアカウントが必要です。Console画面では、APIキーの管理、使用量の確認、請求情報の設定などが行えます。
ステップ2: APIキーの発行
Anthropic Consoleの「API Keys」セクションから新しいAPIキーを発行します。APIキーはsk-ant-api03-...のような文字列で、このキーがあればあなたのアカウントとしてAPIを呼び出せるため、パスワードと同じレベルで厳重に管理する必要があります。
APIキーの管理はセキュリティの最重要事項です。キーをソースコードにハードコードしない、GitHubにpushしない、環境変数(.envファイル)で管理する。この3原則は絶対に守ってください。キーが漏洩すると、第三者があなたのアカウントで大量のAPIコールを実行し、高額な請求が発生する可能性があります。
ステップ3: SDKのインストール
Claude APIはHTTP APIなので理論上はどの言語からでも呼び出せますが、Anthropicは公式SDKをPythonとTypeScriptの2言語で提供しています。SDKを使うとリクエストの構築、レスポンスの解析、エラーハンドリングが大幅に簡単になります。
Pythonの場合:
pip install anthropic
TypeScript / Node.jsの場合:
npm install @anthropic-ai/sdk
ステップ4: 最初のAPIコール
SDKをインストールしたら、いよいよ最初のAPIコールです。以下は「Hello World」に相当する最小限のコードです。
Python版:
import anthropic
# クライアントを初期化(ANTHROPIC_API_KEY環境変数を自動読取)
client = anthropic.Anthropic()
# Messages APIを呼び出す
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[
{"role": "user", "content": "こんにちは!自己紹介してください。"}
]
)
# レスポンスを表示
print(message.content[0].text)
TypeScript版:
import Anthropic from "@anthropic-ai/sdk";
// クライアントを初期化(ANTHROPIC_API_KEY環境変数を自動読取)
const client = new Anthropic();
async function main() {
// Messages APIを呼び出す
const message = await client.messages.create({
model: "claude-sonnet-4-20250514",
max_tokens: 1024,
messages: [
{ role: "user", content: "こんにちは!自己紹介してください。" }
],
});
// レスポンスを表示
console.log(message.content[0].text);
}
main();
えっ、たったこれだけのコードでClaudeと会話できちゃうの!? 10行もないじゃん! 思ってたより全然シンプル!
SDKが複雑な部分を抽象化しているおかげです。内部ではHTTPヘッダーの設定、JSONのシリアライズ/デシリアライズ、エラーコードの判定などを行っていますが、開発者はそれを意識する必要がありません。「APIキーを設定し、モデルとメッセージを指定して、レスポンスを受け取る」。この3ステップが基本パターンです。
APIキーの安全な管理方法
環境変数で管理 — export ANTHROPIC_API_KEY="sk-ant-..."(Linux/Mac)または .env ファイルに記載し、python-dotenvで読み込む
絶対にやらないこと — コード内にキーを直書き(api_key="sk-ant-...")、GitHubにpush、ログに出力、チャットに貼り付け
.gitignoreに追加 — .envファイルは必ず.gitignoreに含める
キーのローテーション — 漏洩の疑いがあれば即座にConsoleで無効化し、新しいキーを発行する
コースで学ぶ内容を徹底解説 ― 各モジュール詳細
ここからはコースの各モジュールで学ぶ内容を、実際のコード例とともに詳しく解説します。コースを受講する前の予習としても、受講後のリファレンスとしても活用できるようにまとめています。
モジュール1: Messages API の基本 ― リクエストとレスポンスの構造
Claude APIの中核はMessages APIです。すべてのやり取りはこのAPIを通じて行います。リクエストの構造を正確に理解することが、API開発の第一歩です。
リクエストの必須パラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
model |
string | 使用するモデルのID(例: "claude-sonnet-4-20250514") |
max_tokens |
integer | 生成する最大トークン数。指定必須。値が大きいほど長い回答が得られるが、コストも増える |
messages |
array | 会話の履歴。各メッセージはrole("user" or "assistant")とcontentを持つ |
リクエストのオプションパラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
system |
string | システムプロンプト(Claudeの振る舞いを指定) |
temperature |
float | 出力のランダム性(0.0〜1.0)。0に近いほど決定的、1に近いほど創造的 |
tools |
array | Tool Use(関数呼び出し)の定義 |
stream |
boolean | ストリーミングレスポンスを有効にする |
レスポンスの構造
APIからのレスポンスはJSON形式で、以下のような構造です。
{
"id": "msg_01XVE...",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "こんにちは!私はClaudeです。..."
}
],
"model": "claude-sonnet-4-20250514",
"stop_reason": "end_turn",
"usage": {
"input_tokens": 25,
"output_tokens": 150
}
}
usageのところにinput_tokensとoutput_tokensがあるね。これがAPIの使用量で、料金に直結するんだ?
その通りです。Claude APIはトークン課金です。入力トークン(あなたがClaudeに送るテキストの量)と出力トークン(Claudeが返すテキストの量)のそれぞれに料金がかかります。モデルによって単価が異なり、Haikuが最も安く、Opusが最も高い。usageフィールドを監視することで、コストを正確に把握できます。
モジュール2: システムプロンプトの設計
システムプロンプトは、Claudeの「性格」「役割」「制約」を定義する最も強力なパラメータです。Messages APIのsystemパラメータに文字列として渡します。
チャットUIの「カスタム指示」と同じ概念ですが、APIでは完全に自由な形式で、任意の長さのシステムプロンプトを指定できます。
import anthropic
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system="""あなたはAutomata Roomのカスタマーサポートアシスタントです。
## 基本ルール
- 日本語で回答してください
- 回答は簡潔かつ正確に
- サイトの機能に関する質問には具体的に回答してください
- 分からないことは正直に「分かりません」と答えてください
## 回答のトーン
- フレンドリーだが丁寧
- 技術用語は分かりやすく言い換える
- 箇条書きを活用して見やすくする""",
messages=[
{"role": "user", "content": "このサイトはどんなサイトですか?"}
]
)
print(message.content[0].text)
システムプロンプトにマークダウンの見出しとか箇条書きが使えるの!? ただの1行じゃなくて、めちゃくちゃ詳しく設定できるんだね。
APIのシステムプロンプトは事実上無制限に構造化できます。マークダウン記法、XMLタグ、例示(few-shot)、否定条件まで含められる。プロダクションレベルのシステムプロンプトは数百行に及ぶことも珍しくありません。システムプロンプトの品質がアプリ全体の出力品質を決定すると言っても過言ではありません。
システムプロンプト設計のベストプラクティス
- 役割を明確に定義する ― 「あなたは○○です」で始めると、Claudeはその役割に沿った回答を返す
- やるべきことと、やってはいけないことの両方を書く ― 「〜してください」だけでなく「〜しないでください」も明示する。例: 「推測で回答せず、分からないことは正直に伝えてください」
- 出力形式を指定する ― JSON、マークダウン、特定のフォーマットなど、欲しい形式を明示する
- XMLタグで構造化する ―
<rules>、<examples>、<constraints>などのタグでセクションを分けると、Claudeはより正確に指示を理解する - バージョン管理する ― システムプロンプトはコードと同じようにGitで管理し、変更履歴を追跡する
モジュール3: マルチターン会話の管理
チャットUIでは「前の会話を覚えている」のが当然ですが、APIでは毎回すべての会話履歴を送り直す必要があります。これはAPI開発で最初に理解すべき重要な概念です。
Claude APIはステートレス(状態を持たない)です。つまり、1回のリクエストごとに「この会話はここまで進んでいる」という情報をすべてmessages配列に含めて送信します。
import anthropic
client = anthropic.Anthropic()
# 会話履歴を管理するリスト
conversation = []
def chat(user_message):
"""ユーザーのメッセージを送り、Claudeの回答を返す"""
# ユーザーメッセージを履歴に追加
conversation.append({"role": "user", "content": user_message})
# APIを呼び出す(会話履歴全体を送信)
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system="あなたは親切なアシスタントです。日本語で回答してください。",
messages=conversation
)
# アシスタントの回答を履歴に追加
assistant_message = response.content[0].text
conversation.append({"role": "assistant", "content": assistant_message})
return assistant_message
# マルチターンの会話
print(chat("私の名前はリアです。"))
# → "はじめまして、リアさん!..."
print(chat("私の名前を覚えていますか?"))
# → "はい、リアさんですね!..."
print(chat("好きな食べ物はオムライスです。覚えておいて。"))
# → "オムライスが好きなんですね!覚えました。"
毎回全部の会話を送り直すの!? 会話が長くなったらすごい量のデータを毎回送ることにならない?
鋭い指摘です。これはAPIベースのアプリ開発で最も重要な設計課題のひとつ。会話が長くなるとトークン数が増え、コストも増え、やがてモデルのコンテキストウィンドウ(Claude 3.5 Sonnetは200Kトークン)の上限に達します。対策としては、古い会話を要約する、直近N件だけ送る、会話を適切なタイミングでリセットするなどの戦略があります。コースではこうしたコンテキスト管理戦略も解説されます。
モジュール4: ストリーミングレスポンス
通常のAPI呼び出しでは、Claudeが回答を全部生成し終わってからレスポンスが返ります。回答が長いと数秒間、ユーザーは何も表示されない画面を見つめることになります。
ストリーミングを使うと、Claudeが生成した文字をリアルタイムで少しずつ受け取ることができます。チャットUIで文字が1文字ずつ表示されるあの体験を、自分のアプリでも実現できるわけです。
Python版(ストリーミング):
import anthropic
client = anthropic.Anthropic()
# ストリーミングでメッセージを受信
with client.messages.stream(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[
{"role": "user", "content": "日本の四季の魅力を詩的に表現してください。"}
]
) as stream:
for text in stream.text_stream:
# テキストが生成されるたびにリアルタイムで出力
print(text, end="", flush=True)
print() # 最後に改行
TypeScript版(ストリーミング):
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
async function main() {
// ストリーミングでメッセージを受信
const stream = client.messages.stream({
model: "claude-sonnet-4-20250514",
max_tokens: 1024,
messages: [
{ role: "user", content: "日本の四季の魅力を詩的に表現してください。" }
],
});
// テキストが生成されるたびにリアルタイムで出力
stream.on("text", (text) => {
process.stdout.write(text);
});
// ストリーム完了を待つ
const finalMessage = await stream.finalMessage();
console.log("\n\n使用トークン:", finalMessage.usage);
}
main();
これ、ChatGPTやclaude.aiで文字がスラスラ出てくるあの体験だよね! 自分のアプリでもできるんだ! ユーザー体験として「待たされてる感」がなくなるのは大きいね。
ストリーミングはUXの観点で必須と言っても過言ではありません。ユーザーが「Claudeが考えている→文字が出始めた→回答が形になっていく」というプロセスをリアルタイムで見られるため、体感の待ち時間が劇的に短くなります。チャット系のUIを作る場合は、原則としてストリーミングを採用すべきです。
モジュール5: Tool Use(関数呼び出し)― AIが外部ツールを使えるようにする
Tool Useは、このコースで最も重要かつ革新的なモジュールです。通常、Claude は「テキストを生成する」ことしかできません。しかしTool Useを使うと、Claudeが外部の関数を呼び出して実世界のデータにアクセスできるようになります。
具体的には以下のような仕組みです。
- あなたが「使えるツール(関数)」の定義をAPIリクエストに含める
- Claudeがユーザーの質問に答えるためにツールが必要だと判断する
- Claudeが「このツールをこの引数で呼び出して」というリクエストを返す
- あなたのプログラムがその関数を実際に実行する
- 実行結果をClaudeに返す
- Claudeが結果を踏まえて最終的な回答を生成する
以下は「天気を取得するツール」を定義してClaudeに使わせる例です。
import anthropic
import json
client = anthropic.Anthropic()
# ツール(関数)の定義
tools = [
{
"name": "get_weather",
"description": "指定された都市の現在の天気情報を取得します",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "天気を取得する都市名(例: '東京', '大阪')"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "温度の単位"
}
},
"required": ["city"]
}
}
]
# 実際のツール実行関数(本番ではAPI呼び出し等)
def get_weather(city, unit="celsius"):
"""天気APIを呼び出す(ここではダミーデータ)"""
weather_data = {
"東京": {"temp": 22, "condition": "晴れ", "humidity": 45},
"大阪": {"temp": 24, "condition": "曇り", "humidity": 60},
}
return weather_data.get(city, {"temp": 20, "condition": "不明", "humidity": 50})
# Claudeにツールを渡してメッセージを送信
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
messages=[
{"role": "user", "content": "東京の天気を教えて!"}
]
)
# Claudeがツールの呼び出しをリクエストしたか確認
if response.stop_reason == "tool_use":
# ツール呼び出しのブロックを取得
tool_block = next(
block for block in response.content
if block.type == "tool_use"
)
# 実際にツールを実行
result = get_weather(**tool_block.input)
# ツールの実行結果をClaudeに返す
final_response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
messages=[
{"role": "user", "content": "東京の天気を教えて!"},
{"role": "assistant", "content": response.content},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": tool_block.id,
"content": json.dumps(result, ensure_ascii=False)
}
]
}
]
)
print(final_response.content[0].text)
# → "東京の現在の天気は晴れで、気温は22℃、湿度は45%です。..."
ちょっと待って!? これ、Claudeが「天気が知りたいから天気APIを呼んでくれ」って自分で判断してるってこと!? AIが自分で「この情報が必要だ」って判断してツールを使うなんて……すごすぎない!?
これがTool Useの革新性です。Claudeは利用可能なツールの説明を読み、ユーザーの質問に答えるためにどのツールをどんな引数で呼ぶべきかを自律的に判断します。天気の取得、データベース検索、Webスクレイピング、計算、ファイル操作……ツールを定義すれば、Claudeは「テキスト生成しかできないAI」から「外部世界と対話できるAIエージェント」に進化します。
Tool Use の活用パターン
データ取得 — 天気API、株価API、データベースクエリなどの外部データをリアルタイムで取得
計算・処理 — 複雑な数値計算、データ変換、画像処理の実行
外部操作 — メール送信、カレンダー登録、Slack投稿などの実行
検索 — ベクトルDB検索、Web検索、社内ドキュメント検索(RAG)
注意 — ツールの実行はあなたのプログラム側で行う。Claudeは「何を呼ぶか」を判断するだけで、実際の実行権限は持たない(安全設計)
モジュール6: Vision(画像入力)― Claudeに画像を「見せる」
Claude はテキストだけでなく、画像も入力として受け取れます。APIを使えば、ユーザーがアップロードした画像をClaudeに渡して分析させることが可能です。
画像の渡し方は2種類あります。
- Base64エンコード ― 画像データをBase64文字列に変換してリクエストに含める
- URL指定 ― 公開されている画像のURLを指定する
import anthropic
import base64
client = anthropic.Anthropic()
# 画像ファイルをBase64エンコード
with open("screenshot.png", "rb") as f:
image_data = base64.standard_b64encode(f.read()).decode("utf-8")
# 画像とテキストを一緒にClaudeに送信
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": image_data
}
},
{
"type": "text",
"text": "この画像に何が写っていますか?日本語で詳しく説明してください。"
}
]
}
]
)
print(message.content[0].text)
画像も渡せるんだ! これ使えば「スクリーンショットを送ったらバグの原因を教えてくれる」とか「レシートを撮影したら自動で家計簿に入力」とか、いろんなアプリが作れそう!
Visionの活用範囲は非常に広い。グラフの分析、UIのレビュー、手書きメモの文字起こし、図面の解析、商品画像の説明文生成。contentを配列にして、テキストと画像を混在させられるのがポイントです。複数の画像を同時に送って比較分析させることも可能です。
モジュール7: API向けプロンプトエンジニアリングのベストプラクティス
APIからClaudeを呼び出す場合のプロンプト設計は、チャットUIで使う場合とは少し異なります。APIではプログラムが自動的にプロンプトを構築するため、再現性と一貫性がより重要になります。
テクニック1: XMLタグでセクションを明確に分離する
system_prompt = """あなたは記事要約アシスタントです。
<rules>
- 要約は3〜5文で
- 重要なキーワードは維持する
- 原文にない情報を追加しない
</rules>
<output_format>
## 要約
(3〜5文の要約)
## キーワード
(カンマ区切りの重要キーワード)
</output_format>
<examples>
<example>
入力: (記事テキスト...)
出力:
## 要約
AIの進化が業界を変えている。特に生成AIの普及が加速している。...
## キーワード
生成AI, 業界変革, 普及加速
</example>
</examples>"""
テクニック2: temperature(温度)で出力スタイルを制御する
temperature: 0― 最も決定的。分類タスク、データ抽出、構造化出力など、毎回同じ結果が欲しい場合に使用temperature: 0.3〜0.5― やや創造的だが安定。ビジネス文章、要約、翻訳などtemperature: 0.7〜1.0― 創造的。ブレインストーミング、創作、キャッチコピーなど
テクニック3: JSON出力を確実にする
APIアプリでは、Claudeの出力をプログラムが解析する必要があるため、構造化された出力(特にJSON)を要求するケースが非常に多い。JSONを確実に得るためのテクニックです。
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system="""ユーザーが入力したテキストから感情を分析し、必ずJSON形式のみで回答してください。
JSON以外のテキストは一切出力しないでください。
出力形式:
{
"sentiment": "positive" | "negative" | "neutral",
"confidence": 0.0〜1.0の数値,
"keywords": ["キーワード1", "キーワード2"]
}""",
messages=[
{"role": "user", "content": "今日は天気がよくて最高の気分!新しいプロジェクトも順調だし、ランチも美味しかった。"}
]
)
import json
result = json.loads(message.content[0].text)
print(f"感情: {result['sentiment']}")
print(f"確信度: {result['confidence']}")
print(f"キーワード: {', '.join(result['keywords'])}")
なるほど……チャットで使うときは「分かりやすく書いて」でいいけど、APIの場合は「プログラムが解析できる形で出力して」っていう観点が必要なんだね。JSON形式なら後の処理が楽になる!
これがAPI開発と対話的利用の最大の違いです。APIでは出力をマシンリーダブルにする必要がある。JSONの出力が安定しない場合は、システムプロンプトで「JSON以外一切出力しない」と明示し、temperature: 0にするのが定石です。さらに、json.loads()でパースに失敗した場合のフォールバック処理も実装すべきです。
モジュール8: エラーハンドリングとレート制限
本番環境で動くAPIアプリには、エラーが必ず発生する前提で設計する必要があります。ネットワーク障害、API側の一時的なエラー、レート制限の超過など、様々な原因でリクエストが失敗し得ます。
主なHTTPステータスコード
| コード | 意味 | 対処法 |
|---|---|---|
400 |
Bad Request(リクエストの形式が不正) | パラメータを確認。model名のtypo、messages形式の誤りが多い |
401 |
Unauthorized(認証エラー) | APIキーが正しいか確認。期限切れや無効化されていないか |
429 |
Rate Limited(レート制限超過) | リクエスト頻度を下げる。指数バックオフで自動リトライ |
500 |
Internal Server Error(サーバー側エラー) | 時間を置いてリトライ。継続する場合はAnthropicのステータスページを確認 |
529 |
Overloaded(API過負荷) | 時間を置いてリトライ。指数バックオフを推奨 |
指数バックオフ付きリトライの実装
import anthropic
import time
client = anthropic.Anthropic()
def call_with_retry(messages, max_retries=5):
"""指数バックオフ付きでAPIを呼び出す"""
for attempt in range(max_retries):
try:
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=messages
)
return response
except anthropic.RateLimitError:
# レート制限: 指数バックオフで待機
wait_time = 2 ** attempt # 1, 2, 4, 8, 16秒
print(f"レート制限。{wait_time}秒後にリトライ...")
time.sleep(wait_time)
except anthropic.APIStatusError as e:
if e.status_code >= 500:
# サーバーエラー: リトライ
wait_time = 2 ** attempt
print(f"サーバーエラー({e.status_code})。{wait_time}秒後にリトライ...")
time.sleep(wait_time)
else:
# クライアントエラー: リトライしない
raise
raise Exception(f"{max_retries}回リトライしても失敗しました")
「指数バックオフ」って、失敗するたびに待ち時間を2倍にしていくってことだよね? 1秒 → 2秒 → 4秒 → 8秒……って感じで。サーバーに負荷をかけすぎないための礼儀作法みたいなものかな。
正確です。指数バックオフは業界標準のリトライパターンです。429(レート制限)と5xx(サーバーエラー)はリトライすべきですが、400(リクエストの形式ミス)や401(認証エラー)はリトライしても意味がないためスキップする。このリトライすべきエラーとすべきでないエラーの区別が重要です。
レート制限の仕組み
Anthropic APIには以下のレート制限があります。
- RPM(Requests Per Minute) ― 1分あたりのリクエスト数上限
- TPM(Tokens Per Minute) ― 1分あたりの入出力トークン数上限
- TPD(Tokens Per Day) ― 1日あたりのトークン数上限
制限値は契約プラン(Tier)とモデルによって異なります。レスポンスヘッダーのanthropic-ratelimit-*から残量を確認できます。
エラーハンドリングのベストプラクティス
リトライ対象 — 429(レート制限)、500(サーバーエラー)、529(過負荷)
リトライ不要 — 400(形式ミス)、401(認証エラー)、403(権限不足)
指数バックオフ — 2^attempt秒待機。ジッタ(ランダムな揺らぎ)を加えるとさらに良い
最大リトライ回数 — 3〜5回が目安。無限リトライは避ける
ログ記録 — エラー発生時はステータスコード、メッセージ、タイムスタンプをログに残す
モジュール9: 本番環境デプロイのベストプラクティス
開発環境で動くプロトタイプと、実際のユーザーが使うプロダクションアプリでは、考えるべきことが大幅に増えます。コースの終盤では、本番環境に向けた設計パターンが解説されます。
セキュリティ
- APIキーはサーバーサイドに置く ― フロントエンド(ブラウザ)のJavaScriptにAPIキーを含めてはいけない。必ずバックエンドサーバーを経由してAPIを呼び出す
- 入力のサニタイズ ― ユーザーの入力をそのままシステムプロンプトに含めない。プロンプトインジェクション(悪意のある指示の注入)を防ぐ
- 出力のフィルタリング ― Claudeの回答をそのままユーザーに表示する前に、不適切な内容がないか検証する
コスト管理
- max_tokensを適切に設定する ― 必要以上に大きな値を設定しない。要約なら500、短い回答なら256で十分
- モデルの使い分け ― すべてのリクエストにOpusを使う必要はない。軽いタスクにはHaiku、標準タスクにはSonnet、重要なタスクのみOpusを使う
- キャッシュの活用 ― 同じ質問に対する回答はキャッシュして再利用する。AnthropicはPrompt Caching機能も提供しており、長いシステムプロンプトのトークンコストを削減できる
- 使用量のモニタリング ― 日次・週次でトークン使用量と費用を確認するダッシュボードを用意する
パフォーマンス
- タイムアウトの設定 ― APIリクエストには必ずタイムアウトを設定する。長すぎるリクエストがサーバーリソースを占有するのを防ぐ
- 非同期処理 ― Pythonなら
asyncio、Node.jsならasync/awaitを使い、API呼び出し中に他の処理をブロックしない - キューイング ― 大量のリクエストを処理する場合は、ジョブキュー(Redis Queue、BullMQ等)を使って制御する
「フロントエンドにAPIキーを置くな」はめちゃくちゃ大事だよね。ブラウザのDevToolsで簡単に見えちゃうから。必ずサーバー側を経由する……これは絶対忘れちゃダメだ。
GitHubで「anthropic api key」と検索すると、ハードコードされたキーが含まれるリポジトリが見つかることがあります。こうした事故は一度起きたら取り返しがつかない。環境変数 + .gitignore + シークレットスキャン。この三重防御を必ず設定してください。
PythonとTypeScript ― 両SDKの特徴と使い分け
Anthropicは公式SDKをPythonとTypeScriptの2言語で提供しています。どちらを選ぶかは、あなたのバックグラウンドとプロジェクトの性質によって決めましょう。
| 観点 | Python SDK | TypeScript SDK |
|---|---|---|
| 適している場面 | データ分析、機械学習、バッチ処理、スクリプト | Webアプリ(Next.js等)、リアルタイム処理、フルスタック |
| 非同期対応 | anthropic.AsyncAnthropic()で非同期版が使える |
デフォルトでasync/await |
| 型安全性 | 型ヒント対応(mypy互換) | TypeScriptの静的型チェックが効く |
| エコシステム | NumPy, Pandas, FastAPIとの組合せ | React, Next.js, Expressとの組合せ |
| ストリーミング | client.messages.stream() |
client.messages.stream() |
以下は、同じ機能(ストリーミング + Tool Use)をPythonとTypeScriptで実装した場合の比較です。
Python(非同期版):
import anthropic
import asyncio
async def main():
client = anthropic.AsyncAnthropic()
async with client.messages.stream(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[
{"role": "user", "content": "Pythonの魅力を教えて"}
]
) as stream:
async for text in stream.text_stream:
print(text, end="", flush=True)
asyncio.run(main())
TypeScript(非同期版):
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
async function main() {
const stream = client.messages.stream({
model: "claude-sonnet-4-20250514",
max_tokens: 1024,
messages: [
{ role: "user", content: "TypeScriptの魅力を教えて" }
],
});
stream.on("text", (text) => {
process.stdout.write(text);
});
await stream.finalMessage();
}
main();
どっちのSDKもAPIの機能は同じなんだよね? じゃあ普段使ってる言語を選べばいいってこと?
その通りです。両SDKは機能的に同等(Feature Parity)で、同じ日にアップデートされます。判断基準は「あなたのプロジェクトの技術スタック」。既にNext.jsで作っているWebアプリにClaudeを組み込むならTypeScript、Pythonのデータパイプラインに組み込むならPython。迷ったら「コードの量が少ない方」を試してみてください。コースでは両方の言語でコード例が提示されます。
受講のコツ ― 手を動かして「使える知識」にする
このコースは座学だけでは真価を発揮しません。Anthropic Consoleで実際にAPIキーを発行し、コードを書いて実行することで初めて「使える知識」になります。以下のコツを意識してください。
コツ1: APIキーを最初に発行して手元で動かす
コースの動画を再生する前に、まずAnthropic Consoleでアカウントを作成し、APIキーを発行しましょう。そして最初のAPIコール(前述のHello Worldコード)を実際に実行してください。「自分のコードでClaudeが動いた」という体験がモチベーションになります。
初回のクレジットとして、新規アカウントには$5分の無料クレジットが付与されることがあります(時期により変動)。これだけでかなりの量の実験ができます。
コツ2: 各モジュールごとにミニプロジェクトを作る
以下のようなステップで、各モジュールの学びをすぐに実践しましょう。
- Messages API → コマンドラインで動くシンプルなチャットBot
- システムプロンプト → 自分の業務に特化したアシスタントBot
- ストリーミング → 文字が1文字ずつ表示されるチャットUI
- Tool Use → 天気や為替レートをリアルタイムで取得するBot
- Vision → 画像をドラッグ&ドロップして説明文を生成するWebアプリ
コツ3: Prompt Cachingを試す
長いシステムプロンプトを使うアプリでは、Prompt Cachingを活用することでトークンコストを大幅に削減できます。同じシステムプロンプトを含むリクエストを繰り返し送る場合、キャッシュされたトークンは通常の10分の1のコストになります。コースで基本を学んだら、公式ドキュメントのPrompt Cachingセクションも確認してみてください。
「各モジュールごとにミニプロジェクト」って最高のアドバイスだね! 動画を見て「分かった気」になるんじゃなくて、実際に手を動かすことで初めて身につく。プログラミングは手を動かしてナンボ!
プログラミング教育の研究では、「写経(コードを見て書き写す)」よりも「改変(動くコードを少し変えて実験する)」の方が学習効果が高いことが示されています。コースのサンプルコードをそのまま動かした後、パラメータを変えたり、自分の用途に書き換えたりする実験を推奨します。
受講に必要な環境
Anthropic Console — console.anthropic.com でアカウント作成 + APIキー発行
開発環境 — Python 3.8+ または Node.js 18+
エディタ — VSCode推奨(Python/TypeScript両対応 + ターミナル内蔵)
費用 — 新規アカウントの無料クレジットで基本的な実験は十分可能。本格的に使う場合は従量課金
所要時間 — 動画視聴3〜4時間 + ハンズオン実習で合計6〜8時間を見積もると安心
次に進むコース ― MCP入門でAIの接続力を拡張する
Building with the Claude APIを修了したら、次のステップとして特におすすめなのが「Introduction to MCP」(Model Context Protocol入門)です。
MCPは、Claudeと外部のツール・データソースを接続するための標準プロトコルです。このコースで学んだTool Useの概念を、さらに汎用的で再利用可能な形に発展させたものと言えます。
- Tool Use ― アプリごとに個別にツールを定義する(このコースで学んだ方法)
- MCP ― ツールの定義を標準化し、どのAIアプリからでも再利用できるようにする
その他の推奨される次のステップ:
- Claude Code in Action ― CLI環境でClaudeを使う開発者向けコース。APIの知識があるとさらに深く理解できる
- Anthropic APIドキュメント ― docs.anthropic.com の公式ドキュメントを通読する。コースでは扱いきれなかった細かいパラメータやエッジケースが詳述されている
- Anthropic Cookbook ― GitHubで公開されているAnthropic Cookbookには、実践的なコードレシピが多数収録されている
MCPって最近すごく話題になってるやつだ! Claude APIのTool Useを理解してからMCPに進むと、「なぜMCPが必要なのか」がスッと分かりそうだね。
学習パスとしては「Claude 101 → Building with the Claude API → Introduction to MCP」が開発者にとって最も効率的なルートです。基本 → API実装 → 接続標準化という流れで、段階的にスキルが積み上がります。
開発者向け推奨学習パス
Step 1 — Claude 101(Claudeの基本操作。1〜2時間)
Step 2 — Building with the Claude API(このコース。API開発の全体像。3〜4時間)
Step 3 — Introduction to MCP(ツール接続の標準化。MCPサーバーの構築)
Step 4 — Claude Code in Action(CLI開発環境。Claude Codeの活用法)
補助 — AI Fluency(4Dフレームワーク。技術者も「AIとの付き合い方」を知ると開発の質が上がる)
まとめ ― 「APIを使える開発者」は圧倒的に強い
Building with the Claude APIは、Anthropic Academyの中で最も実践的かつ技術密度の高いコースです。ここで学ぶ内容を一覧にまとめます。
- APIの基本 ― Anthropic Consoleでのアカウント作成、APIキー発行、SDK(Python / TypeScript)のインストール
- Messages API ― リクエスト/レスポンスの構造。
model、max_tokens、messagesの必須パラメータとオプションパラメータ - システムプロンプト ― 役割定義、XMLタグによる構造化、制約条件の明示。プロダクションレベルの設計手法
- マルチターン会話 ― ステートレスAPIでの会話履歴管理。コンテキストウィンドウの上限と対策
- ストリーミング ― リアルタイムなテキスト生成。チャットUIでの必須技術
- Tool Use ― Claudeが外部関数を呼び出す仕組み。AIエージェントの基盤技術
- Vision ― 画像入力。Base64エンコードとURL指定の2方式
- プロンプトエンジニアリング ― XMLタグ、temperature制御、JSON出力の安定化
- エラーハンドリング ― HTTPステータスコード、指数バックオフ、レート制限対策
- 本番環境デプロイ ― セキュリティ(キー管理、プロンプトインジェクション対策)、コスト管理、パフォーマンス最適化
Claude APIを使えるようになると、「AIを使う人」から「AIで作る人」に変わります。チャットUIの制約から解放され、自分のアイデアをそのまま形にできる。顧客向けのAIサービス、社内の業務自動化ツール、あるいはこのAutomata Roomのような自動化サイト。可能性は無限です。
API開発は「難しそう」と感じるかもしれませんが、最初のHello Worldは10行で動きます。そこから少しずつ機能を追加していけば、気づいたときには本格的なAIアプリが完成しています。公式コースで体系的に学ぶことで、独学では見逃しがちなベストプラクティスやセキュリティの勘所も押さえられます。
この記事、シリーズで一番長くなったけど、それだけこのコースの内容が濃いってことだよね! Messages API、ストリーミング、Tool Use、Vision、エラーハンドリング……開発者なら全部知っておきたい内容ばかり!
この記事のコード例はすべて動くコードです。環境変数にAPIキーを設定すれば、コピー&ペーストでそのまま実行できます。まずは1つ動かしてみる。それが全ての始まりです。「APIの最初の壁」を越えた先には、AI開発の広大なフィールドが待っています。
次はMCPのコース解説だよ! Claude APIで「ツールを個別に定義する」方法を学んだ次は、それを「標準化して再利用可能にする」MCP。開発者の人はお楽しみに!