---
title: PHP SDK
url: https://platform.claude.com/docs/ja/cli-sdks-libraries/sdks/php
description: 値オブジェクトとビルダーパターンを備えたAnthropic PHP SDKのインストールと設定
---

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

<Info>
  PHP SDKは現在ベータ版です。APIはバージョン間で変更される可能性があります。
</Info>

<Info>
  コード例を含むAPI機能のドキュメントについては、[APIリファレンス](https://platform.claude.com/docs/ja/api/overview)を参照してください。このページでは、PHP固有のSDK機能と設定について説明します。
</Info>

## インストール

このSDKはHTTPに[PSR-18](https://www.php-fig.org/psr/psr-18/)を使用し、インストールされているPSR-18クライアントを自動的に検出します。SDKが追加設定なしで「streaming」（ストリーミング）用に構成するため、[Guzzle](https://docs.guzzlephp.org/)を推奨します。

```bash
composer require "anthropic-ai/sdk" "guzzlehttp/guzzle:^7"
```

## 要件

PHP 8.1.0以上。

## 使用方法

このライブラリは、オプションの引数を指定するために名前付きパラメータを使用します。デフォルト値を持つパラメータは名前で設定する必要があります。

```php
$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を含む認証オプションについては、[認証](https://platform.claude.com/docs/ja/manage-claude/authentication)を参照してください。お使いのAPIキーが複数のワークスペースにアクセスできる[個人キーまたはサービスアカウントキー](https://platform.claude.com/docs/ja/manage-claude/authentication#key-types)である場合は、`anthropic-workspace-id`リクエストヘッダーにワークスペースIDを設定してください。[ワークスペースを選択する](https://platform.claude.com/docs/ja/manage-claude/authentication#select-a-workspace)では、このSDKにおけるリクエストごとのオプションを示しています。

## 値オブジェクト

「value objects」（値オブジェクト）を初期化するには、静的な `with` コンストラクタ `Base64ImageSource::with(data: "U3RhaW5sZXNzIHJvY2tz", ...)` と名前付きパラメータを使用することを推奨します。

ただし、ビルダーも提供されています：`(new Base64ImageSource)->withData("U3RhaW5sZXNzIHJvY2tz")`。

## ストリーミング

このSDKは、「Server-Sent Events」（サーバー送信イベント）、すなわちSSEを使用したストリーミングレスポンスをサポートしています。

```php
$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クライアントを指定してください。

```php
$client = new \Anthropic\Client(
  requestOptions: \Anthropic\RequestOptions::with(streamingTransporter: $myStreamingClient),
);
```

## エラー処理

ライブラリがAPIに接続できない場合、またはAPIが成功以外のステータスコード（つまり4xxまたは5xxレスポンス）を返した場合、`Anthropic\Core\Exceptions\APIException` のサブクラスがスローされます。

```php
<?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 Internalエラー、およびタイムアウトは、すべてデフォルトでリトライされます。

`maxRetries` オプションを使用して、これを設定または無効化できます。

```php
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のリストメソッドはページネーションされています。

このライブラリは各リストレスポンスに自動ページネーションイテレータを提供するため、後続のページを手動でリクエストする必要はありません。

```php
$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;
// ...
}
```

## 高度な使用方法

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

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

<Note>
  同名の `extra*` パラメータは、ドキュメント化されたパラメータを上書きします。
</Note>

```php
<?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` を使用してリクエストを行えます。

```php
$client = new Client();

$response = $client->request(
  method: "post",
  path: '/undocumented/endpoint',
  query: ['dog' => 'woof'],
  headers: ['useful-header' => 'interesting-value'],
  body: ['hello' => 'world']
);
```

## プラットフォーム統合

<Note>
  コード例を含む詳細なプラットフォームセットアップガイドについては、以下を参照してください。

  * [Amazon Bedrock](https://platform.claude.com/docs/ja/build-with-claude/claude-in-amazon-bedrock)
  * [Amazon Bedrock（Opus 4.6以前）](https://platform.claude.com/docs/ja/build-with-claude/claude-on-amazon-bedrock-legacy)
  * [Claude Platform on AWS](https://platform.claude.com/docs/ja/build-with-claude/claude-platform-on-aws)
  * [Google Cloud](https://platform.claude.com/docs/ja/build-with-claude/claude-on-vertex-ai)
  * [Microsoft Foundry](https://platform.claude.com/docs/ja/build-with-claude/claude-in-microsoft-foundry)
</Note>

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を使用する既存のアプリケーション向けに引き続き提供されます。

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

このパッケージは[SemVer](https://semver.org/spec/v2.0.0.html)の規約に従います。ライブラリは初期開発段階にありメジャーバージョンが `0` であるため、APIはいつでも変更される可能性があります。

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

## 追加リソース

* [GitHubリポジトリ](https://github.com/anthropics/anthropic-sdk-php)
* [Packagist](https://packagist.org/packages/anthropic-ai/sdk)
* [APIリファレンス](https://platform.claude.com/docs/ja/api/overview)
* [メッセージのストリーミング](https://platform.claude.com/docs/ja/build-with-claude/streaming)
