Claude Platform Docs
CLI、SDK、ライブラリクライアントSDK

PHP SDK

値オブジェクトとビルダーパターンを備えたAnthropic PHP SDKのインストールと設定

Anthropic PHPライブラリは、PHP 8.1.0以降のあらゆるアプリケーションからClaude APIへの便利なアクセスを提供します。

インストール

このSDKはHTTPにPSR-18を使用し、インストールされているPSR-18クライアントを自動的に検出します。SDKが追加設定なしで「streaming」(ストリーミング)用に構成するため、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',
);

$textBlock = array_find($message->content, static fn ($block): bool => $block->type === 'text');
echo $textBlock->text;

Workload Identity Federationを含む認証オプションについては、認証を参照してください。お使いのAPIキーが複数のワークスペースにアクセスできる個人キーまたはサービスアカウントキーである場合は、anthropic-workspace-idリクエストヘッダーにワークスペースIDを設定してください。ワークスペースを選択するでは、このSDKにおけるリクエストごとのオプションを示しています。

値オブジェクト

「value objects」(値オブジェクト)を初期化するには、静的な 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',
);

foreach ($stream as $event) {
  echo $event->type . PHP_EOL;
}

ストリーミングには、レスポンスボディを段階的に返すHTTPクライアントが必要です。検出されたPSR-18クライアントがGuzzleの場合、SDKは自動的にストリーミング用に構成します。バッファリングするクライアントの場合、foreach ループは段階的にではなく、レスポンスが完了した時点ですべてのイベントを一度に返します。この症状が見られる場合は、Guzzleをインストールするか、streamingTransporter リクエストオプションを通じてストリーミング対応のPSR-18クライアントを指定してください。

$client = new Anthropic\Client(
  requestOptions: Anthropic\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',
  );
} 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 400BadRequestException
HTTP 401AuthenticationException
HTTP 403PermissionDeniedException
HTTP 404NotFoundException
HTTP 409ConflictException
HTTP 422UnprocessableEntityException
HTTP 429RateLimitException
HTTP >= 500InternalServerException
その他のHTTPエラーAPIStatusException
タイムアウトAPITimeoutException
ネットワークエラーAPIConnectionException

リトライ

特定のエラーは、デフォルトで短い指数バックオフを伴って自動的に2回リトライされます。

接続エラー(例えばネットワーク接続の問題によるもの)、408 Request Timeout、409 Conflict、429 Rate Limit、>=500 Internalエラー、およびタイムアウトは、すべてデフォルトでリトライされます。

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',
  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;
}

高度な使用方法

ドキュメント化されていないプロパティ

以下のように、ドキュメント化されていないパラメータを任意のエンドポイントに送信したり、ドキュメント化されていないレスポンスプロパティを読み取ったりできます。

<?php

use Anthropic\RequestOptions;

$message = $client->messages->create(
  maxTokens: 1024,
  messages: [['role' => 'user', 'content' => 'Hello, Claude']],
  model: 'claude-opus-5',
  requestOptions: RequestOptions::with(
    extraQueryParams: ['my_query_parameter' => 'value'],
    extraBodyParams: ['my_body_parameter' => 'value'],
    extraHeaders: ['my-header' => 'value'],
  ),
);

ドキュメント化されていないリクエストパラメータ

追加のパラメータを明示的に送信したい場合は、前述の例のように、リクエスト時に RequestOptions::with()extraQueryParamsextraBodyParamsextraHeaders オプションを使用して送信できます。

ドキュメント化されていないエンドポイント

認証、リトライ、その他のクライアント機能の利点を維持しながらドキュメント化されていないエンドポイントにリクエストを行うには、以下のように 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\MantleClientnew 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を使用する既存のアプリケーション向けに引き続き提供されます。

セマンティックバージョニング

このパッケージはSemVerの規約に従います。ライブラリは初期開発段階にありメジャーバージョンが 0 であるため、APIはいつでも変更される可能性があります。

このパッケージでは、(ランタイムに影響しない)PHPDoc型定義の改善は破壊的変更ではないとみなします。

追加リソース

Was this page helpful?