---
title: Apple Foundation Models
url: https://platform.claude.com/docs/ja/cli-sdks-libraries/libraries/apple-foundation-models
description: Claude for Foundation Models Swiftパッケージを使用して、Foundation Modelsフレームワークを通じてAppleプラットフォーム上でClaudeを利用します。
---

[Claude for Foundation Models](https://github.com/anthropics/ClaudeForFoundationModels)は、Appleの[Foundation Models](https://developer.apple.com/documentation/foundationmodels)フレームワークにおいて、Claudeをサーバーサイドの言語モデルとして利用可能にするSwiftパッケージです。このパッケージはClaudeをフレームワークの`LanguageModel`プロトコルに準拠させるため、Appleのオンデバイスモデルで使用するのと同じ`LanguageModelSession` APIで操作できます。`respond(to:)`、「streaming」（ストリーミング）、ガイド付き生成、ツール呼び出しはすべて同じように動作します。

リクエストはアプリからClaude APIへ直接送信されます。Appleはリクエスト経路に含まれず、プロンプトやレスポンスを見ることはありません。使用量は[標準のAPI料金](https://platform.claude.com/docs/ja/about-claude/pricing)でお客様のAnthropicアカウントに請求されるため、組織には利用可能なクレジット残高または有効な請求方法が必要です。Claudeをいつ使用し、Appleのオンデバイスモデルをいつ使用するかはアプリが決定します。各セッションに使用したいモデルを渡してください。

<Note>
  **ベータ版。** このパッケージは、OS 27ベータで導入されたFoundation Modelsのサーバーサイド言語モデルAPIを対象としています。ベータ期間中にAPIが変更される可能性があります。
</Note>

<Info>
  Claude for Foundation Modelsは汎用のMessages APIクライアントでは**ありません**。その公開インターフェースは、Foundation Modelsプロバイダーへの準拠と、それに到達する設定型（`ClaudeLanguageModel`、`ClaudeModel`、`AuthMode`、`ClaudeServerTool`）です。他の言語からMessages APIに直接アクセスするには、[クライアントSDK](https://platform.claude.com/docs/ja/cli-sdks-libraries/overview#client-sdks)を参照してください。
</Info>

## 要件

* iOS 27、macOS 27、visionOS 27、またはwatchOS 27（すべてベータ版）：Foundation Modelsフレームワークがサーバーサイド言語モデルをサポートするOSリリース
* Xcode 27（ベータ版）
* 開発用に[Claude Console](https://platform.claude.com/)から取得したClaude APIキー。本番環境向けのオプションについては[認証](https://platform.claude.com/docs/ja/cli-sdks-libraries/libraries/apple-foundation-models#authentication)を参照してください。

## パッケージのインストール

`Package.swift`にパッケージを追加します：

```swift
dependencies: [
  .package(url: "https://github.com/anthropics/ClaudeForFoundationModels.git", from: "0.1.0")
]
```

またはXcodeで：**File** > **Add Package Dependencies…** を選択し、リポジトリのURLを入力します。

次に、ターゲットの依存関係に`ClaudeForFoundationModels`を追加し、`FoundationModels`と一緒にインポートします：

```swift
import FoundationModels
import ClaudeForFoundationModels
```

## クイックスタート

`ClaudeLanguageModel`がエントリーポイントです。これを`LanguageModelSession`に渡し、他のFoundation Modelsプロバイダーとまったく同じようにセッションを使用します：

```swift
import FoundationModels
import ClaudeForFoundationModels

let model = ClaudeLanguageModel(
  name: .sonnet5,
  auth: .apiKey(ProcessInfo.processInfo.environment["ANTHROPIC_API_KEY"] ?? "")
)

let session = LanguageModelSession(model: model)
let response = try await session.respond(to: "Plan a 4-day trip to Buenos Aires.")
print(response.content)
```

イニシャライザは`baseURL`（デフォルトは`https://api.anthropic.com`）、`timeout`、および`serverTools`（[サーバーサイドツール](https://platform.claude.com/docs/ja/cli-sdks-libraries/libraries/apple-foundation-models#server-side-tools)を参照）も受け付けます。

完全に動作するプログラムとして、リポジトリには[`Examples/ClaudeExample`](https://github.com/anthropics/ClaudeForFoundationModels/tree/main/Examples/ClaudeExample)が含まれています。これはチャットのターンをターミナルにストリーミングする実行可能なコマンドラインターゲットで、そのターンでサーバーサイドのウェブ検索を有効にする`--search`フラグを備えています。実行にはmacOS 27のホストが必要です。

## モデルの選択

モデル識別子は`ClaudeModel`の値です。コンパイル済みの定数を使用するか、まだコンパイルされていないIDについては明示的なケイパビリティを指定して構築します（[ケイパビリティ](https://platform.claude.com/docs/ja/cli-sdks-libraries/libraries/apple-foundation-models#capabilities)を参照）：

```swift
ClaudeLanguageModel(name: .opus5_5, auth: auth)
```

定数はAPIのモデルIDを反映しており（`.opus5`は`claude-opus-5`）、各モデルのケイパビリティを保持しています。新しいモデルはパッケージのリリースで新しい定数として提供されます。現在のリストについてはXcodeで`ClaudeModel`を確認し、モデルの比較については[モデル概要](https://platform.claude.com/docs/ja/models/overview)を参照してください。

### ケイパビリティ

各`ClaudeModel`は、受け付けるものを宣言します：サンプリングパラメータ、エフォートレベル、適応型思考、構造化出力、画像入力です。モデルが拒否するフィールドを送信するとハードエラーになるため、パッケージはこれを使用してどのリクエストフィールドを送信するかを決定します。定数は正しいケイパビリティを保持しています。コンパイルされていないIDについては、モデルが受け付けるものを宣言してください（推測する省略記法は意図的に用意されていません）：

```swift
let model = ClaudeModel(
  id: "claude-experimental-x",
  capabilities: .init(samplingParams: false, effortLevels: [.low, .high])
)
ClaudeLanguageModel(name: model, auth: auth)
```

### エフォート

`fixedEffort:`を使用して、すべてのリクエストに対してClaudeの[エフォートレベル](https://platform.claude.com/docs/ja/build-with-claude/effort)を固定します。これはフレームワークのリクエストごとの推論ヒントよりも優先されます。フレームワークの名前付き推論レベルはhighまでです。単一のリクエストでより高いエフォートを要求する場合は、代わりにClaudeのエフォートを指定するカスタム推論レベル（`.custom("xhigh")`または`.custom("max")`）を渡すと、直接マッピングされます。エフォートが送信されない場合、APIはモデルのデフォルトレベルを使用します。これはモデルによって異なります（[エフォートレベル](https://platform.claude.com/docs/ja/build-with-claude/effort#effort-levels)を参照）：

```swift
ClaudeLanguageModel(name: .opus5_5, auth: auth, fixedEffort: .xhigh)
```

レベルはモデルが受け付けるものでなければなりません。各`ClaudeModel`は、5つのレベル（`low`、`medium`、`high`、`xhigh`、`max`）のうちそのモデルがどれを受け付けるか（受け付ける場合）を宣言します。エフォートをまったく受け付けないモデルもあります。

### Claudeとオンデバイスモデルの使い分け

Appleのオンデバイスモデルは高速でプライベート、かつオフラインで利用可能ですが、軽量なタスク向けのサイズです。より大きなコンテキスト、最先端の推論、またはウェブ検索やコード実行などのサーバーサイドツールが必要な場合はClaudeにエスカレーションしてください。どちらも同じ`LanguageModelSession` APIを使用するため、`model:`引数を入れ替えるだけで切り替えられます。

## 認証

`auth:`パラメータで認証情報を設定します。バックエンドなしで出荷するには`.appAttest`、独自のバックエンドを経由してリクエストをルーティングするには`.proxied`、開発中に反復作業するには`.apiKey`を使用します。

### App Attest

アプリの各インストールは、Appleの[App Attest](https://developer.apple.com/documentation/devicecheck/establishing-your-app-s-integrity)サービスを使用して、登録したアプリの正規かつ改変されていないビルドであることを証明します。その後、Anthropicはそのデバイスに対して、使用量をワークスペースに課金する短期間有効なアクセストークンを発行します。アプリにはAPIキーが含まれず、運用すべきプロキシもありません。

App Attest認証は、アプリがClaude APIを直接呼び出す場合にのみ利用できます。Amazon Bedrock、Google Cloud、またはMicrosoft Foundry経由では利用できません。

バックエンドを運用せずに出荷するには、`.appAttest`を使用します：

```swift
ClaudeLanguageModel(
  name: .sonnet5,
  auth: .appAttest(clientID: "clid_...")
)
```

<Note>
  App Attestには物理デバイスが必要です。シミュレータ、およびSecure Enclaveを持たないハードウェアではApp Attestを実行できません。シミュレータで反復作業する間は`.apiKey`を使用し、デバイス上で実行する際は`.appAttest`を使用してください。
</Note>

App Attestをセットアップするには、Apple Developer Team IDと、組織内でのadmin、owner、またはprimary ownerのロールが必要です。Xcodeプロジェクトを設定し、[Claude Console](https://platform.claude.com/)でアプリを登録します。

1. Xcodeで、**Signing & Capabilities**の下にあるアプリターゲットに**App Attest**ケイパビリティを追加します。
2. Claude Consoleで、[App integrations](https://platform.claude.com/settings/workspaces/default/app-integrations)ページ（`platform.claude.com/settings/workspaces/default/app-integrations`）に移動します。各アプリインテグレーションは1つのワークスペースに属します。サイドバーのワークスペースピッカーで目的のワークスペースを選択してください。
3. **Create app integration**をクリックし、名前、Apple Developer Team ID、および1つ以上のバンドルID（最大32個）を入力します。
4. インテグレーションの**Overview**タブからクライアントID（`clid_...`）をコピーし、アプリのClaude設定に渡します。

アプリがデバイス上で初めてClaudeを使用する際、アプリはAnthropicにチャレンジをリクエストし、Appleの`DCAppAttestService`でデバイスをアテステーション（証明）し、検証済みのアテステーションをアクセストークンと交換します。Claude for Foundation Modelsパッケージはこのフローを自動的に実行し、トークンの有効期限が切れると新しいトークンをリクエストします。アテステーション用のコードを自分で書く必要はありません。

トークンはワークスペースにスコープされ、1時間後に有効期限が切れ、[Messages API](https://platform.claude.com/docs/ja/api/messages/create)の呼び出しのみを認可します。トークンにはエンドユーザーのIDは含まれません。App Attestが識別するのはアプリであり、それを使用している人ではないため、ユーザーごとのロジックはアプリ側で処理してください。

侵害されたアプリや廃止済みのアプリを停止するには、そのインテグレーションを取り消します。Claude Consoleで、[App integrations](https://platform.claude.com/settings/workspaces/default/app-integrations)ページ（`platform.claude.com/settings/workspaces/default/app-integrations`）に移動します。各アプリインテグレーションは1つのワークスペースに属します。サイドバーのワークスペースピッカーで、そのインテグレーションを保持しているワークスペースを選択します。インテグレーションを選択して**Revoke**をクリックし、確認します。インテグレーションを取り消すと、そのインテグレーションの未使用のトークンが無効化され、登録済みのデバイスは新しいトークンをリクエストできなくなります。取り消しは永続的であるため、アクセスを復元するには新しいアプリインテグレーションを作成してください。

### プロキシ（本番環境）

本番環境では、`.proxied`を使用して独自のバックエンドを経由してリクエストをルーティングします。`baseURL`にあるリレーがサーバーサイドでClaude APIの認証情報を追加するため、アプリにキーは含まれません。指定した`headers`はすべてのリクエストで送信されるため、プロキシは呼び出し元を認可できます。不要な場合は`[:]`を渡してください：

```swift
ClaudeLanguageModel(
  name: .sonnet5,
  auth: .proxied(headers: ["X-App-Token": "..."]),
  baseURL: URL(string: "https://api.yourapp.com/claude")!
)
```

プロキシは標準の[Messages API](https://platform.claude.com/docs/ja/api/messages/create)リクエストを受け取り、`x-api-key`ヘッダーを付加して、`https://api.anthropic.com`に転送します。

### APIキー（開発用）

開発中はAPIキーを直接渡します：

```swift
ClaudeLanguageModel(name: .sonnet5, auth: .apiKey("YOUR_API_KEY"))
```

<Warning>
  アプリにバンドルされたキーは出荷されたバイナリから抽出可能であり、抽出した人は誰でもお客様のアカウントに請求されるリクエストを行うことができます。`.apiKey`は開発用途のみに使用し、リリース前にApp Attestまたはプロキシに切り替えてください。
</Warning>

## ストリーミング

`streamResponse(to:)`はレスポンスを段階的に返します。各要素は差分ではなく、その時点までのレスポンスの累積スナップショットです：

```swift
let stream = session.streamResponse(to: "Summarize today's top science stories.")
for try await partial in stream {
  print(partial.content)
}
```

## 構造化出力

型に`@Generable`を付与し、`generating:`でリクエストします。モデルは[構造化出力](https://platform.claude.com/docs/ja/build-with-claude/structured-outputs)を通じてその型の値を返します：

```swift
@Generable
struct Trip {
  @Guide(description: "Destination city") var destination: String
  @Guide(description: "Length in days") var days: Int
}

let response = try await session.respond(to: "Plan a trip to Tokyo.", generating: Trip.self)
print(response.content.destination)
```

構造化出力には、ケイパビリティにそれを含むモデルが必要です（コンパイル済みの定数はすべて含んでいます）。選択したモデルが含まない場合、パッケージは暗黙的に機能を低下させるのではなく、`LanguageModelError.unsupportedGenerationGuide`をスローします。

## ツール使用

### クライアントサイドツール

フレームワークの`tools:`配列はそのまま動作します。型を`Tool`に準拠させ、`LanguageModelSession`に渡すと、Claudeがそれらを呼び出した際にフレームワークがデバイス上で実行します。[Claudeでの「tool use」（ツール使用）](https://platform.claude.com/docs/ja/agents-and-tools/tool-use/overview)を参照してください。

```swift
let session = LanguageModelSession(model: model, tools: [FindRestaurantsTool()])
```

### サーバーサイドツール

[サーバーツール](https://platform.claude.com/docs/ja/agents-and-tools/tool-use/server-tools)（ウェブ検索、ウェブフェッチ、コード実行）は、単一のラウンドトリップ内でAnthropicのインフラストラクチャ上で実行され、フレームワークがデバイス上で呼び出すものはありません。`serverTools:`を使用してモデルごとに設定します：

```swift
let model = ClaudeLanguageModel(
  name: .sonnet5,
  auth: auth,
  serverTools: [
    .webSearch(maxUses: 5),
    .codeExecution,
  ]
)
```

`.webSearch`と`.webFetch`はオプションの`allowedDomains`、`blockedDomains`、`maxUses`を受け付けます。サーバーツールのアクティビティは、トランスクリプト内に`ClaudeServerToolSegment`カスタムセグメントとして表示されます。

<Note>
  セッション型はAppleのものであるため、`serverTools`は`LanguageModelSession`ではなく`ClaudeLanguageModel`で設定します。会話ごとに異なるサーバーツールセットを使用するには、複数の`ClaudeLanguageModel`インスタンスを構築してください。
</Note>

## 画像

ケイパビリティに画像入力を含むモデルは、フレームワークのビジョンケイパビリティを宣言します。フレームワークの標準セッションAPIを通じて画像コンテンツを渡すと、パッケージがそれをClaude APIの画像形式に変換します。画像の要件については[ビジョン](https://platform.claude.com/docs/ja/build-with-claude/vision)を参照してください。

## エラー処理

パッケージは、適合するものがある場合、Claude APIのエラーをAppleの`LanguageModelError`のケースにマッピングします。「context window」（コンテキストウィンドウ）のオーバーフローは`.contextSizeExceeded`として、HTTP 429は`.rateLimited`として、設定されたタイムアウトを超えたリクエストは`.timeout`として表示されます。フレームワークに相当するものがないプロバイダーエラーは`ClaudeError`として表示されます。パターンマッチングを使用してプロダクトのフローを制御します：

```swift
do {
  let response = try await session.respond(to: prompt)
  print(response.content)
} catch ClaudeError.missingCredential {
  // APIキーの入力を求めます。
} catch let error as LanguageModelError {
  // フレームワーク由来のエラー（レート制限、ガードレール、コンテキスト長、デコード）。
} catch {
  // トランスポートエラー。
}
```

一般的なパターンは、`.rateLimited`をキャッチしてそのターンでは`SystemLanguageModel`にフォールバックする、リクエストをキューに入れる、または再試行の手段を提示することです。

## 機能サポート

パッケージは、Foundation Modelsプロバイダープロトコルが表現できるMessages APIの機能を提供します。Appleのプロトコルに表現がない機能は、これを通じては利用できません。以下が含まれます：

* 「prompt caching」（プロンプトキャッシング）の制御（パッケージはプロンプトキャッシングを自動的に適用します。キャッシュのTTLとブレークポイントの配置は設定できません）
* ストップシーケンス
* バッチ処理
* Files API
* トークンカウント
* ベータヘッダー

## 追加リソース

| リファレンス                                                                                         | 内容                                                                              |
| ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| [Apple Foundation Modelsドキュメント](https://developer.apple.com/documentation/foundationmodels)    | `LanguageModelSession`、`@Generable`、`Transcript`、`Tool`、およびフレームワークのその他のインターフェース |
| [GitHub上の`ClaudeForFoundationModels`](https://github.com/anthropics/ClaudeForFoundationModels) | ソース、実行可能なサンプル、およびイシュートラッカー                                                      |
| [Claude APIリファレンス](https://platform.claude.com/docs/ja/api/overview)                           | 基盤となるMessages API                                                               |

パッケージはApache 2.0でライセンスされています。バグ報告はGitHubのイシューを通じて歓迎します。ベータ期間中は外部からのプルリクエストは受け付けていません。
