Claude APIとPHP連携の実践ガイド
はじめに
Claude APIをPHPアプリケーションに統合する方法を、実践的なコード例とともに解説します。初心者でも30分で実装できる内容です。
環境準備
# Composer でGuzzleをインストール
composer require guzzlehttp/guzzle
// .env ファイル
ANTHROPIC_API_KEY=sk-ant-xxxxx
基本的な実装
1. APIクライアントの作成
<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
class ClaudeAPI {
private $client;
private $apiKey;
public function __construct($apiKey) {
$this->apiKey = $apiKey;
$this->client = new Client([
'base_uri' => 'https://api.anthropic.com',
'timeout' => 60.0
]);
}
public function chat($message, $systemPrompt = '') {
$response = $this->client->post('/v1/messages', [
'headers' => [
'x-api-key' => $this->apiKey,
'anthropic-version' => '2023-06-01',
'content-type' => 'application/json'
],
'json' => [
'model' => 'claude-3-5-sonnet-20241022',
'max_tokens' => 4000,
'system' => $systemPrompt,
'messages' => [
['role' => 'user', 'content' => $message]
]
]
]);
$data = json_decode($response->getBody(), true);
return $data['content'][0]['text'];
}
}
2. 使用例
// APIキーを取得
$apiKey = getenv('ANTHROPIC_API_KEY');
$claude = new ClaudeAPI($apiKey);
// システムプロンプトを設定
$systemPrompt = "あなたは親切なプログラミングアシスタントです。";
// メッセージを送信
$response = $claude->chat(
"PHPでファイルアップロード機能を実装する方法を教えて",
$systemPrompt
);
echo $response;
実践例: AIチャットボット
<?php
session_start();
// 会話履歴を保持
if (!isset($_SESSION['conversation'])) {
$_SESSION['conversation'] = [];
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$userMessage = $_POST['message'] ?? '';
// ユーザーメッセージを履歴に追加
$_SESSION['conversation'][] = [
'role' => 'user',
'content' => $userMessage
];
// Claude APIに送信
$claude = new ClaudeAPI(getenv('ANTHROPIC_API_KEY'));
$response = $claude->chatWithHistory(
$_SESSION['conversation'],
"あなたはカスタマーサポート担当です。"
);
// Claudeの返答を履歴に追加
$_SESSION['conversation'][] = [
'role' => 'assistant',
'content' => $response
];
echo json_encode(['response' => $response]);
exit;
}
// フロントエンド (JavaScript)
async function sendMessage() {
const message = document.getElementById('userInput').value;
const response = await fetch('chat.php', {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: `message=${encodeURIComponent(message)}`
});
const data = await response.json();
displayMessage('assistant', data.response);
}
エラーハンドリング
public function chat($message, $systemPrompt = '') {
try {
$response = $this->client->post('/v1/messages', [
// ... 設定 ...
]);
$data = json_decode($response->getBody(), true);
// エラーチェック
if (isset($data['error'])) {
throw new Exception($data['error']['message']);
}
return $data['content'][0]['text'];
} catch (GuzzleHttp\Exception\RequestException $e) {
// APIエラー
error_log("Claude API Error: " . $e->getMessage());
return "申し訳ございません。一時的にサービスが利用できません。";
} catch (Exception $e) {
error_log("Error: " . $e->getMessage());
return "エラーが発生しました。";
}
}
ストリーミング対応
public function chatStream($message, $callback) {
$this->client->post('/v1/messages', [
'headers' => [
'x-api-key' => $this->apiKey,
'anthropic-version' => '2023-06-01',
'content-type' => 'application/json'
],
'json' => [
'model' => 'claude-3-5-sonnet-20241022',
'max_tokens' => 4000,
'stream' => true,
'messages' => [
['role' => 'user', 'content' => $message]
]
],
'stream' => true,
'sink' => fopen('php://temp', 'r+')
]);
}
パフォーマンス最適化
1. キャッシング
// Redisでレスポンスをキャッシュ
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$cacheKey = 'claude_' . md5($message);
$cached = $redis->get($cacheKey);
if ($cached) {
return $cached;
}
$response = $claude->chat($message);
$redis->setex($cacheKey, 3600, $response); // 1時間キャッシュ
2. 非同期処理
// ジョブキューに追加
$job = [
'message' => $message,
'user_id' => $userId
];
file_put_contents('/var/queue/claude_' . time() . '.json', json_encode($job));
セキュリティ考慮事項
- APIキー管理: 環境変数で管理
- レート制限: Redis等で実装
- 入力検証: XSS対策
- ログ記録: 全リクエストを記録
// レート制限の例
function checkRateLimit($userId) {
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$key = "rate_limit_$userId";
$count = $redis->incr($key);
if ($count === 1) {
$redis->expire($key, 60); // 1分
}
if ($count > 10) {
throw new Exception('レート制限を超えました');
}
}
まとめ
Claude APIとPHPの連携により、高度なAI機能を簡単に実装できます。本記事のコードをベースに、自社サービスに合わせてカスタマイズしてください。
実装例
タグ: #Claude #PHP #API #AI開発 #チャットボット