世界を動かす技術を、日本語で。

Appleの基盤モデル

概要

  • Claude for Foundation Models はAppleのFoundation Modelsフレームワーク向けSwiftパッケージ
  • LanguageModelSession API でApple純正モデルと同様にClaudeを利用可能
  • Anthropic API への直接リクエスト、Appleは通信内容を閲覧不可
  • サーバーサイド専用、iOS/macOS/watchOS/visionOS 27(β)が対象
  • APIキー管理やツール利用、モデル切替、エラー処理方法も網羅

Claude for Foundation Models 概要

  • Claude for Foundation Models は、AppleのFoundation Modelsフレームワーク上で サーバーサイド言語モデル としてClaudeを利用するためのSwiftパッケージ
  • LanguageModelプロトコル に準拠しており、 LanguageModelSession API (respond(to:), streaming, tool呼び出し等)をそのまま利用可能
  • リクエストは直接Anthropic API に送信され、Appleは内容を一切取得しない設計
  • 利用料金 はAnthropicの標準API料金体系で、アプリ側でAppleモデルとの使い分けが可能
  • ベータ版 であり、OS 27ベータ(iOS, macOS, visionOS, watchOS)とXcode 27(β)が必要

インストールとセットアップ

  • Package.swift のdependenciesに追加
    • .package(url: "https://github.com/anthropics/ClaudeForFoundationModels.git", from: "0.1.0")
  • Xcode の場合、「File > Add Package Dependencies…」でリポジトリURLを指定
  • ターゲットのdependenciesに追加し、 import FoundationModelsimport ClaudeForFoundationModels を記述

クイックスタート

  • ClaudeLanguageModel を作成し、 LanguageModelSession に渡して利用
    • 例:
      let model = ClaudeLanguageModel(
        name: .sonnet4_6,
        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)
      
  • baseURLtimeoutserverTools も指定可能

モデル選択とカスタマイズ

  • ClaudeModel で利用モデルを指定
    • 例: .opus4_8はclaude-opus-4-8を指す
  • Capabilities (サンプリングパラメータ、effort、画像入力等)はモデルごとに定義
  • 未登録モデル もcapabilitiesを明示すれば利用可能

Effortレベル指定

  • fixedEffort: でリクエストごとにClaudeのeffortレベルを指定可能(low, medium, high, xhigh, max)
  • モデルが受け入れるレベルのみ指定可能

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

  • オンデバイスモデル は高速・プライバシー重視・オフライン対応
  • Claude は大規模文脈・高度推論・サーバーサイドツール利用時に推奨
  • LanguageModelSession API 共通なので、model引数を差し替えるだけで切替可能

認証方式

  • 開発時 はAPIキーを直接指定(.apiKey)
  • 本番運用 は独自バックエンド経由で認証情報を隠蔽(.proxied)
    • 例:
      ClaudeLanguageModel(
        name: .sonnet4_6,
        auth: .proxied(headers: ["X-App-Token": "..."]),
        baseURL: URL(string: "https://api.yourapp.com/claude")!
      )
      

ストリーミング応答

  • streamResponse(to:) で応答を逐次取得
    • 各要素は累積スナップショット

構造化出力

  • @Generable を付与した型で generating: を利用
    • モデルが対応していない場合は LanguageModelError.unsupportedGenerationGuide をthrow

ツール利用

  • クライアントサイドツール はToolプロトコル準拠型を渡すだけで利用可能
  • サーバーサイドツール (web search/code execution等)はserverTools:でモデルごとに設定
    • 複数ClaudeLanguageModelインスタンスで会話ごとにツールセットを切替

画像入力

  • 画像入力対応モデル はvision capabilityを宣言
  • 標準API経由で画像データ送信、Claude API形式へ自動変換

エラー処理

  • Claude APIエラー はAppleの LanguageModelError にマッピング
    • 例: context-window overflowは.contextSizeExceeded、HTTP 429は.rateLimited
  • ClaudeError で独自エラーも提供
  • .rateLimited 時はSystemLanguageModelへのフォールバック等が可能

サポート外機能

  • プロンプトキャッシュ制御 (TTLやbreakpoint設定不可)
  • ストップシーケンスバッチ処理Files APIトークンカウントBetaヘッダー 未対応

参考リソース

  • Apple Foundation ModelsドキュメントClaudeForFoundationModels GitHub (例・イシュートラッカー含む)
  • Claude APIリファレンス
  • Apache 2.0ライセンス、バグ報告はGitHub Issueへ(β期間中は外部PR非対応)

Hackerたちの意見

これって、Appleが開発者にAPIの抽象化レイヤーを通じてLLMを使わせようとしてるってこと?自社のLLMを発表する時に(多分、かなりお金をかけてトレーニングしてるって聞いたし、Siriや今のApple AIに関わってるかも?)開発者がスムーズに移行できるようにするためなのかな。それとも、単なる開発者への配慮か何か?

シニカルな(もしくは現実的な?)私の考えでは、この抽象化レイヤーはAppleがユーザーに自社のApple Intelligenceに基づくLLM機能を認識させるための手段なんじゃないかな。他の会社が実際にLLMを提供していてもね。

多分、かなりお金をかけてトレーニングしてるって聞いたし、Siriや今のApple AIに関わってるかも? まじでこれだよ。これが彼らがトレーニングしてきたモデルなんだ(Apple Foundationモデルが大きなヒントじゃなかった?)

もしかして、プロバイダーにデフォルトモデルとしての使用料を払わせるつもりなのかな?つまり、今のGoogleが検索エンジンでやってることと同じ。違うのは、Googleは追加の検索リクエストでお金を稼いでるけど、AIは(現時点では)追加リクエストでお金を失ってるってこと。まだビジネスとしての見込みは見えないけどね。

このフレームワークを通じて使えるオンデバイスモデルはもうあるよ。Claudeはその追加の一つに過ぎない。

ダークだけど、全く不公平ではない見方:Appleが他社が提供するモデルに対してお金を取るのが簡単になるし、Appleが望むなら、ユーザーがサードパーティのモデルを使う様子を基に自社のモデルをトレーニングするためのデータセットを作ることもできる。APIはAppleデバイスでしか使われないから、iOSで動かしたいなら同じシステムを使わせないことで市場を分けて、ユーザーをさらにロックインしてるんだ。

Appleはユーザーデータを守るための巧妙な仕組みを持ってるよ。最近、アプリトラッキングのことを扱ったんだけど、ユーザーの詳細を匿名化されたコホート(SKAN、Differential Privacy)でプライベートに保つアプローチは、サードパーティプラットフォームにトラッキングイベントを報告する前に驚くほどよく考えられてた。プライバシーを気にするなら、彼らをループに入れておく価値があるよ。

これは、reality/mac/iPad/watch/tv/iOS 27に搭載される新しいフレームワークのサポートだよ(年内にオープンソース化することを約束してるから、バックエンドでSwiftを使う時にも頼れるはず)。このフレームワークのポイントは、デバイスの内蔵モデル、Appleがホストするオンラインモデル(プライベートクラウドコンピュータ)、または任意のホストされたオンラインモデルを呼び出すためのシムを自分で書くことができる同じAPIを使えることなんだ。そうすることで、システムAPIを使って、異なる種類のモデルやプロバイダーにダイナミックにルーティングできる。自分で「これにはローカルモデルを使いたいけど、あれにはClaudeを使いたい」といった抽象化層を書く必要もないし、Anthropic/OpenAIのAPIとの統合を自分でやる必要もない。ツール呼び出しのようなことを一つの場所で抽象化してくれるし、セッション中にプロバイダーやモデルをダイナミックに切り替えても同じ「トランスクリプト」を維持するような便利な機能もあるよ。

コーディングエージェント自体が強制されたレイヤーだよね。今、さらに一つレイヤーを追加するの?コーディングエージェントを90年代のボディショップのベンダースーパーバイザーに例えることが多いんだけど、顧客に何でも約束して、かわいそうな請負業者に納品を強いる感じ。コーディングエージェントは、ボディショップが顧客に請求する金額の10倍のトークンを消費する。簡単なテストで、コーディングエージェントを通すとコンテキストの長さを超えちゃうタスクも、直接プロンプトを与えると問題なく動く。レイヤーは贅沢で、コントロールと透明性を奪うよね。

コーディングエージェントを作る時には使わない方がいいね。

Appleがこの抽象化を導入してくれたのは嬉しいけど、ローカルモデルに関してはちょっと心配。Gemma4を例に挙げたいけど、ユーザーのことを考えると、10個のアプリが同じモデルを使ってダウンロードしたら、スマホが重くなっちゃうよね。Appleが複数のアプリが同じデバイスモデルを使う方法を提供しているのか、まだよく分からないんだ(トリッキーな名前空間や権限なしで)。そういうことを示唆する情報は見当たらなかったな。

アプリは同じフレームワークとAPIを使って、システム提供のデバイスモデルを利用できるけど、アプリ間でカスタムモデルの重複を避けるための仕組みはないんだよね。

Hacker Newsで議論の続きを見る