PHP SDK
値オブジェクトとビルダーパターンを備えたAnthropic PHP SDKのインストールと設定
Anthropic PHPライブラリは、PHP 8.1.0以降の任意のアプリケーションからClaude APIへの便利なアクセスを提供します。
インストール
SDKはHTTPにPSR-18を使用し、インストールされているPSR-18クライアントを自動的に検出します。SDKが追加のセットアップなしでストリーミング用に設定するため、Guzzleの使用を推奨します:
composer require "anthropic-ai/sdk" "guzzlehttp/guzzle:^7"要件
PHP 8.1.0以降。
使用方法
このライブラリは、オプションの引数を指定するために名前付きパラメータを使用します。デフォルト値を持つパラメータは名前で設定する必要があります。
$client = new Client();
$message = $client->messages->create(
maxTokens: 1024,
messages: [['role' => 'user', 'content' => 'Hello, Claude']],
model: 'claude-opus-5-5',
);
$textBlock = array_find($message->content, static fn ($block): bool => $block->type === 'text');
echo $textBlock->text;Workload Identity Federationを含む認証オプションについては、認証を参照してください。APIキーがワークスペースにスコープされていない個人キーまたはサービスアカウントキーである場合は、anthropic-workspace-idリクエストヘッダーにワークスペースIDを設定してください。このSDKでのリクエストごとのオプションについては、ワークスペースを選択するで説明しています。
値オブジェクト
値オブジェクトを初期化するには、静的なwithコンストラクタBase64ImageSource::with(data: "U3RhaW5sZXNzIHJvY2tz", ...)と名前付きパラメータを使用することを推奨します。
ただし、ビルダー(new Base64ImageSource)->withData("U3RhaW5sZXNzIHJvY2tz")も提供されています。
ストリーミング
SDKは、「Server-Sent Events」(サーバー送信イベント)、すなわちSSEを使用したストリーミングレスポンスをサポートしています。
$client = new Client();
$stream = $client->messages->createStream(
maxTokens: 1024,
messages: [['role' => 'user', 'content' => 'Hello, Claude']],
model: 'claude-opus-5-5',
);
foreach ($stream as $event) {
echo $event->type . PHP_EOL;
}ストリーミングには、レスポンスボディを段階的に返すHTTPクライアントが必要です。検出されたPSR-18クライアントがGuzzleの場合、SDKはストリーミング用に自動的に設定します。バッファリングを行うクライアントでは、foreachループは段階的にではなく、レスポンスの完了時にすべてのイベントを一度に返します。この症状が見られる場合は、Guzzleをインストールするか、streamingTransporterリクエストオプションを通じてストリーミング対応のPSR-18クライアントを指定してください:
$client = new Client(
requestOptions: RequestOptions::with(streamingTransporter: $myStreamingClient),
);エラー処理
ライブラリがAPIに接続できない場合、またはAPIが成功以外のステータスコード(つまり4xxまたは5xxレスポンス)を返した場合、Anthropic\Core\Exceptions\APIExceptionのサブクラスがスローされます:
<?php
use Anthropic\Core\Exceptions\APIConnectionException;
use Anthropic\Core\Exceptions\APIStatusException;
use Anthropic\Core\Exceptions\RateLimitException;
try {
$message = $client->messages->create(
maxTokens: 1024,
messages: [['role' => 'user', 'content' => 'Hello, Claude']],
model: 'claude-opus-5-5',
);
} catch (APIConnectionException $e) {
echo "The server could not be reached", PHP_EOL;
echo $e->getPrevious()?->getMessage(), PHP_EOL;
} catch (RateLimitException $_) {
echo "A 429 status code was received; we should back off a bit.", PHP_EOL;
} catch (APIStatusException $e) {
echo "Another non-200-range status code was received", PHP_EOL;
echo $e->getMessage();
}エラーコードは次のとおりです:
| 原因 | エラータイプ |
|---|---|
| HTTP 400 | BadRequestException |
| HTTP 401 | AuthenticationException |
| HTTP 403 | PermissionDeniedException |
| HTTP 404 | NotFoundException |
| HTTP 409 | ConflictException |
| HTTP 422 | UnprocessableEntityException |
| HTTP 429 | RateLimitException |
| HTTP >= 500 | InternalServerException |
| その他のHTTPエラー | APIStatusException |
| タイムアウト | APITimeoutException |
| ネットワークエラー | APIConnectionException |
リトライ
特定のエラーは、デフォルトで短い指数バックオフを伴って自動的に2回リトライされます。
接続エラー(たとえば、ネットワーク接続の問題によるもの)、408 Request Timeout、409 Conflict、429 Rate Limit、500以上の内部エラー、およびタイムアウトは、すべてデフォルトでリトライされます。
maxRetriesオプションを使用して、これを設定または無効化できます:
use Anthropic\RequestOptions;
// すべてのリクエストのデフォルトを設定します:
$client = new Client(requestOptions: RequestOptions::with(maxRetries: 0));
// または、リクエストごとに設定します:
$result = $client->messages->create(
maxTokens: 1024,
messages: [['role' => 'user', 'content' => 'Hello, Claude']],
model: 'claude-opus-5-5',
requestOptions: RequestOptions::with(maxRetries: 5),
);ページネーション
Claude APIのリストメソッドはページネーションされています。
このライブラリは各リストレスポンスに自動ページネーションイテレータを提供するため、後続のページを手動でリクエストする必要はありません:
$client = new Client();
$page = $client->beta->messages->batches->list(limit: 20);
// 現在のページからアイテムを取得します
foreach ($page->getItems() as $item) {
echo $item->id, PHP_EOL;
}
// 追加のネットワークリクエストを行い、現在のページ以降のすべてのページからアイテムを取得します
foreach ($page->pagingEachItem() as $item) {
echo $item->id, PHP_EOL;
}高度な使用方法
OpenTelemetryトレーシング
アプリケーションがOpenTelemetryトレーサープロバイダーを登録すると、SDKは送信する各リクエストについてスパンを出力します。スパンをオブザーバビリティプラットフォームに送信するには、Claude SDKでOpenTelemetryを設定するを参照してください。
ドキュメント化されていないプロパティ
次のように、任意のエンドポイントにドキュメント化されていないパラメータを送信し、ドキュメント化されていないレスポンスプロパティを読み取ることができます:
<?php
use Anthropic\RequestOptions;
$message = $client->messages->create(
maxTokens: 1024,
messages: [['role' => 'user', 'content' => 'Hello, Claude']],
model: 'claude-opus-5-5',
requestOptions: RequestOptions::with(
extraQueryParams: ['my_query_parameter' => 'value'],
extraBodyParams: ['my_body_parameter' => 'value'],
extraHeaders: ['my-header' => 'value'],
),
);ドキュメント化されていないリクエストパラメータ
追加のパラメータを明示的に送信したい場合は、前の例に示したように、リクエスト時にRequestOptions::with()の下でextraQueryParams、extraBodyParams、extraHeadersオプションを使用できます。
ドキュメント化されていないエンドポイント
認証、リトライ、その他のクライアント機能の利点を維持しながらドキュメント化されていないエンドポイントにリクエストを送信するには、次のようにclient->requestを使用してリクエストを送信できます:
$client = new Client();
$response = $client->request(
method: "post",
path: '/undocumented/endpoint',
query: ['dog' => 'woof'],
headers: ['useful-header' => 'interesting-value'],
body: ['hello' => 'world']
);プラットフォーム統合
PHP SDKは次のプラットフォームをサポートしています:
- Agent Platform:
Anthropic\Vertex\Client。::fromEnvironment()を使用します。 - Bedrock:
Anthropic\Bedrock\MantleClient。new MantleClient(awsRegion: ...)を使用します。 - Bedrock(レガシー):
Anthropic\Bedrock\Client。::fromEnvironment()または::withCredentials()を使用します。 - Claude Platform on AWS:
Anthropic\Aws\Client(ソフト依存関係としてaws/aws-sdk-phpが必要)。new Anthropic\Aws\Client(workspaceId: ...)を使用するか、ANTHROPIC_AWS_WORKSPACE_IDを設定します。ベータ版で利用可能です。 - Foundry:
Anthropic\Foundry\Client。::withCredentials()を使用します。
新しいプロジェクトにはMantleClientを使用してください。Anthropic\Bedrock\Clientは、BedrockのInvokeModel APIを使用する既存のアプリケーション向けに引き続き提供されます。
PHP SDKは、Anthropic\GoogleCloud\Clientを通じてClaude Models on Google Cloud (Anthropic managed)もサポートしています。このクライアントはベータ版です。Anthropic\GoogleCloud\Clientには、ソフト依存関係としてgoogle/authが必要です。new Anthropic\GoogleCloud\Client(workspaceId: ...)を使用するか、ANTHROPIC_GOOGLE_CLOUD_WORKSPACE_ID環境変数を設定してください。プロジェクト、ロケーション、およびワークスペースの解決を参照してください。
セマンティックバージョニング
このSDKの各メジャーバージョンは、デフォルトでanthropic-versionヘッダーに1つのAPIバージョンを送信し、新しいAPIバージョンごとに新しいメジャーバージョンがリリースされます。2026-10-21を送信する最初のメジャーバージョンは1.0.0です。2026-10-21へのアップグレードを参照してください。
このパッケージはSemVerの規約に従います。
このパッケージは、(ランタイム以外の)PHPDoc型定義の改善を破壊的変更ではないものとみなします。
その他のリソース
Was this page helpful?