Apple Foundation Models 3 と Claude ユーザーのためのオンデバイス LLM スタック
WWDC 2026(2026年6月8日発表) で Apple は Foundation Models の第3世代 —— AFM 3 —— を出荷し、さらに Foundation Models フレームワーク を、Swift を一切書かない人にも意味のある方向へ拡張した。フレームワークは 第三者の LLM プロバイダ を受け入れるようになり(Anthropic Claude と Google Gemini が Swift パッケージとして提供される)、オンデバイス の経路は玩具のような 3B モデルにとどまらず、200 億パラメータのスパース MoE が Apple Silicon 上で動作するようになった。ほとんどのエキスパートを NAND に保持し、プロンプトが必要とするぶんだけを RAM にスワップする方式だ。Claude アプリを作っていて「オンデバイス」を API ワークフローとは別世界だと扱ってきた人にとって、その隔たりは今年で埋まりつつある。このページでは、実際に出荷されたもの、目立たない仕組み、そしていま利用できる具体的な移行と互換性の選択肢を解きほぐす。
- AFM 3 の 4 モデル —— Core(3B)、Core Advanced(20B スパース)、Cloud、Cloud Pro —— を名指しでき、それぞれがどこで動くかを説明できる
- 20B モデルを iPhone に収めるための「フラッシュ + DRAM」エキスパートルーティングの仕掛けを理解する
- Foundation Models フレームワークの @Generable / @Guide マクロを使って制約付きデコーディングを行う —— モデルは文字通り不正な JSON を出力できない
- WWDC26 で何が変わったかを知る:LanguageModel / LanguageModelExecutor プロトコルにより、Claude や任意の LLM を同じ Swift セッション API に接続できるようになった
- オンデバイスの 3B に手を伸ばすとき、Private Cloud Compute に切り替えるとき、そしてワークロードを Claude API に残すべきときを判断できる
一文で言うと
AFM 3 はオンデバイス LLM における Apple の2度目の本格的な挑戦だ。再構築された 3B の密モデル(Core)、iPhone 上で動作する新しい 20B のスパース MoE(Core Advanced)(大半のエキスパートをフラッシュストレージに保持)、Apple Silicon と Google Cloud 上の NVIDIA GPU で稼働する Cloud と Cloud Pro の対、そして Anthropic Claude と Google Gemini を同じ LanguageModel プロトコルの背後で交換可能なファーストクラスのプロバイダとして扱う フレームワーク から成る。開発者はオンデバイス呼び出しを無料で利用でき、App Store Small Business Program に参加している 200 万初回ダウンロード未満の開発者は Private Cloud Compute も無料で使える。
AFM 3 について、あまり語られない 3 つのこと
誰もが「Apple はオンデバイスの 3B モデルを出した」という見出しを書いている。ここでは、多くの記事が飛ばす仕掛けを取り上げる。
1. 20B モデルが iPhone に収まるのは、大半が RAM ではなく NAND に住んでいるからだ
「200 億パラメータのモデルを iPhone に」という言葉を素直に読むと不可能だ。4-bit にしても 20B の重みは約 10 GB あり、iPhone が RAM に保持できる量をはるかに超える。WWDC 2026 の発表によれば、Apple の仕掛けは AFM 3 Core Advanced モデルの全体をフラッシュメモリ(NAND)に格納 し、推論時には 入力に応じてルーティングされたエキスパートだけを DRAM にスワップ することだ。アーキテクチャには常駐する 共有エキスパート と、ルータがプロンプトごとに選ぶ ルーティング対象のエキスパート があり(20B 全体ではなく 一度に 1〜4B のパラメータ を活性化する)、Quantization Aware Training と組み合わせることで、実用 RAM が約 8 GB のデバイスで 20B クラスのモデルを出荷できている。結果として iPhone 側のレイテンシは、行列積よりも NAND の読み出し帯域幅とルータの選択に支配されるようになる —— 3B の密モデルとは大きく異なる性能プロファイルだ。
2. 制約付きデコーディングはランタイムではなく Swift コンパイラに組み込まれている
フレームワークの @Generable マクロはよく「構造化出力」と説明されるが、それでは過小評価だ。@Generable は コンパイル時 に動作し、Swift 型に対して JSON スキーマとパーサを生成する。フレームワークはそのスキーマを 制約付きデコーディング に使う —— つまりオンデバイスモデルはトークンレベルで、あなたの Swift 構造体にパースし直せる出力しか生成できない。「JSON として妥当であることを祈って、駄目なら再試行」という手はない。@Guide アノテーション(.anyOf(["PG", "PG-13", "R", "G"])、範囲、説明など)を付ければ、それらもデコード時に強制される。Claude のツール使用ループの周りで JSON 修復のフォールバックを書いてきた人は、アプリのオンデバイス 3B 側からその再試行層を丸ごと落とせる。
3. フレームワークは任意の LLM —— Claude や Gemini を含めて —— を一つの Swift API の背後で受け入れる
WWDC 2026 のセッション 「Bring an LLM provider to the Foundation Models framework」 では 2 つの新しいプロトコルが出荷された:LanguageModel(能力とエグゼキュータ構成を宣言)と LanguageModelExecutor(実際の生成、KV キャッシュ、ストリーミングを扱う)。誰でもこれらに準拠した Swift パッケージを出荷できる —— Apple は launch time のプロバイダとして Anthropic Claude と Google Gemini を明示的に挙げた。結果として、アプリの側から見れば、同じ LanguageModelSession、同じ @Generable 型、同じツール呼び出しコントラクト、同じトランスクリプトモデルが、背後のモデルがオンデバイスの 3B であれ、Private Cloud Compute であれ、Anthropic API 上の Claude であれ、Google Cloud 上の Gemini であれ、Hugging Face からの MLX 重みファイルであれ、そのまま適用される。モデル選定は SDK の書き直しではなく Swift パッケージの依存関係になる。
AFM 3 を俯瞰する
実際にはどこで動くのか
- 任意の Apple Intelligence デバイスで動作。API キーもネットワークもトークン課金もなしに、Foundation Models フレームワーク経由で Swift から無料で呼び出せる。分類、抽出、要約、オンデバイスの書き換え、そして機内モードでも動く必要のあるすべてをここに置く。
- Apple の最新シリコンで動作、古い Apple Intelligence デバイスは透過的に Core にフォールバックする。3B が拒否したり幻覚を起こしたりするタスクで、要求がエキスパートスワップのレイテンシを許容できるがオンデバイスに留めなければならない場合(例:プライベートな医療・金融の推論)に使う。
- フレームワークは、デバイスモデルでは不十分なときに PCC へルーティングする。特定のサーバ SKU は選べない —— 推論レベルを要求し、Apple が選ぶ。オンデバイスと同じプライバシー契約:PCC のノード認証により Apple のスタッフでもリクエストを読めない。
- LanguageModel + LanguageModelExecutor に準拠したパッケージを追加する(Anthropic Claude と Google Gemini が launch time の例)。セッション API から見ればコードは同一で、モデル選定はパッケージの依存関係になる。
オンデバイス呼び出しの最小例
フレームワークの目玉機能は、オンデバイスの 3B から、ほとんど儀式なしに型付き・スキーマ検証済みの出力を得られることだ。
@Generable の構造化出力を用いたオンデバイス 3B 呼び出し(Swift)
import FoundationModels
@Generable
struct TripIdea {
@Guide(description: "Short, evocative title")
let title: String
@Guide(description: "One-paragraph pitch, 40–80 words")
let summary: String
@Guide(.range(1...14))
let estimatedDays: Int
@Guide(.anyOf(["easy", "moderate", "hard"]))
let difficulty: String
}
let session = LanguageModelSession() // defaults to on-device Core
let idea = try await session.respond(
to: "Suggest a shoulder-season trip in Puglia for a family with a 6-year-old.",
generating: TripIdea.self // constrained decoding
)
print(idea.title, idea.difficulty, idea.estimatedDays)実行時、モデルはトークンレベルで、走行中のテキストが TripIdea としてパース可能であり続けるトークンだけを出力するよう強制される。JSON 文字列を目にすることはなく、TripIdea 値を受け取る。これはセッションがオンデバイスの 3B、PCC、あるいは Swift パッケージとして接続した第三者プロバイダのいずれと話していても同じ契約だ。
Claude を同じ Swift セッションに持ち込む
WWDC 2026 の「Bring an LLM provider」セッションはこれを具体化した:LanguageModel と LanguageModelExecutor を実装し、git タグ付き Swift パッケージとして公開すれば、すでにオンデバイス 3B を使っていたアプリコードはイニシャライザを 1 つ変えるだけで自分のプロバイダを呼び出せる。
LanguageModel に準拠した第三者プロバイダのスケッチ
import FoundationModels
public struct ClaudeSonnet5: LanguageModel {
public let capabilities = LanguageModelCapabilities(capabilities: [
.toolCalling, .guidedGeneration, .reasoning
])
public var executorConfiguration: ClaudeExecutor.Configuration
}
public final class ClaudeExecutor: LanguageModelExecutor {
public struct Configuration: Hashable { // hashable = KV-cache key
public var modelID: String
public var tokenProvider: TokenProvider // NOT a plain API key string
}
public required init(configuration: Configuration) throws { /* … */ }
public func respond(
to request: LanguageModelExecutorGenerationRequest,
model: Model,
streamingInto channel: LanguageModelExecutorGenerationChannel
) async throws {
// 1. Map Foundation Models transcript → Anthropic /messages payload
// 2. Stream deltas back via channel.send(.response(action: .appendText(...)))
// 3. Surface tool calls / reasoning via the same transcript entry types
}
}API が意図的に押しつけてくる、2 つの微妙な点がある。第一に、Configuration はわざと Hashable だ:フレームワークは構成をキーにエグゼキュータをキャッシュするため、同じ構成 = 同じエグゼキュータ = ターンを跨いで保持される KV キャッシュ となる。第二に、ガイダンスはイニシャライザ内での 素の API キー文字列 を明確に非推奨としている —— TokenProvider やサインインフローを使い、トークンをキーチェーンに保存し、クラウド呼び出しには App Attest を使って、改ざんされたビルドが外部からエンドポイントを叩くのを防ぐことを推奨している。
何をいつ使うか —— Claude ビルダー向けの判断表
- オンデバイス AFM 3 Core(3B)を選ぶ:要約、分類、エンティティ抽出、オンデバイスの書き換え、キーボード候補 —— 有界なプロンプトと型付き出力がネットワーク往復に勝るものすべて。無料。
- AFM 3 Core Advanced(20B)を選ぶ:デバイスから出せないプライベートな推論(医療、金融、未公開文書)で、3B ではさばけないもの。NAND のエキスパートスワップにより変動レイテンシがあることを想定する。
- Private Cloud Compute(Cloud / Cloud Pro)を選ぶ:大きなコンテキスト、長い推論、あるいは 20B のオンデバイスでは追いつかないマルチモーダルだが、プライバシー上、第三者 API は依然として使えないケース。
- Anthropic API(または新しい Swift パッケージのプロバイダ)経由で Claude に残る:長時間のエージェント実行、拡張思考、大規模コンテキストのコードベース作業、そして同一モデルを Android と Web でも必要とするクロスプラットフォームアプリ。「Claude 対他社」の基礎ページを参照。
- オンデバイス 3B を JSON 修復ループで包まないこと:制約付きデコーディングがある。出力がパースできないなら、スキーマが誤っているか、@Generable を飛ばしている。
相互リンク
- オンデバイスは、ローカル AI エージェント と Ollama でモデルをローカル実行する で扱うローカルエージェント話の対極にある。Apple の切り口はそれとは違って ファーストパーティの OS 統合 であり、独立したローカルサーバではない。
- Apple のオンデバイスモデルと Claude を並走させるどちらを選ぶかで悩むなら、設計パターンは Claude + ローカルモデル:ハイブリッドパターン と ローカルか Claude のエージェントか にある。
- 「これらのモデルはどう違い、どれを選ぶべきか」というより広い枠組みには、モデルの選び方 と モデル間でプロンプトを移植する を参照。
- ローカル + クラウドのハイブリッドを出荷することのセキュリティ的含意は ローカルとハイブリッドエージェントのセキュリティ にある。
簡単なチェック
Check yourself
0/5出典と参考文献
- Introducing the third generation of Apple's foundation models —— Apple Machine Learning Research(2026年6月8日):AFM 3 Core / Core Advanced / Cloud / Cloud Pro のアーキテクチャ、NAND + エキスパートスワップの解説、25 言語対応、Quantization Aware Training、PT-MoE のサーバアーキテクチャ。
- Bring an LLM provider to the Foundation Models framework —— WWDC26 セッション 339 ——
LanguageModel/LanguageModelExecutorプロトコルの設計、ストリーミング/トランスクリプトモデル、カスタムセグメント、第三者プロバイダ。 - Apple Intelligence for developers —— Foundation Models フレームワークの概観、動的プロファイル、評価、App Store Small Business の PCC 無料料金メモ。
- Meet the Foundation Models framework —— WWDC25 セッション 286 と Deep dive into the Foundation Models framework —— WWDC25 セッション 301 —— WWDC26 が土台とする元の
@Generable/@Guide/ ツール呼び出し API。 - Apple Intelligence Foundation Language Models: Technical Report (arXiv 2507.13575) —— オンデバイスアーキテクチャの物語を裏付けるのに有用な、前世代の技術的詳細。