Foundation Models Frameworkは、Apple Intelligenceを動かしているオンデバイスの大規模言語モデルを、アプリからSwiftで直接呼び出すためのAppleのフレームワークです。2025年6月のWWDC25で発表され、iOS 26から使えるようになりました。オンデバイスモデルは約30億パラメータで、呼び出しに料金はかからず、通信なしで動きます。2026年9月14日(米国時間)に配信されたiOS 27では、Private Cloud Compute上の大型モデルやClaude・Geminiを同じAPIから呼べるようになり、エラー型も入れ替わりました。この記事では、モデルの性能、対応機種と日本語対応、実装コード、iOS 27での変更点、オンデバイスとクラウドの選び方を、Appleの公式ドキュメントと技術報告に沿って整理します。
まとめ:Foundation Models Frameworkの要点(2026年10月・iOS 27時点)
- 正体:Apple Intelligenceのオンデバイスモデル(
SystemLanguageModel)をSwiftから呼ぶAPI。iOS/iPadOS/macOS/visionOS 26以降で利用でき、推論は無料・オフラインで動く。 - 性能:2025年版のオンデバイスモデルは約30億パラメータ・重み2ビット量子化。技術報告のMMLUは量子化前で67.85(Qwen-2.5-3Bの66.37より上、Qwen-3-4Bの75.10より下)、端末向けの最適化後は64.4。2026年6月発表の第3世代(AFM 3)では、人手評価で旧モデルより選ばれた割合が45.6%対23.3%。
- 制約:コンテキストはドキュメント上4,096トークンだが、iOS 27では機種で変わるため
contextSizeで実行時に確認する(日本語は1文字がおおむね1トークン)。計算・コード生成・論理推論は公式に「避けるべき用途」とされている。 - 条件:Apple Intelligence対応機種で、機能をオンにし、端末とSiriの言語を同じ対応言語にそろえる必要がある。日本語は対応言語に含まれる。
- iOS 27の変更:32Kトークン・推論レベル付きのPrivate Cloud Computeモデル、
LanguageModelプロトコルによるClaude・Gemini連携、画像入力、LanguageModelErrorへの移行(GenerationErrorは非推奨)。
以下、性能の数字から順に、実装と移行で押さえる点を見ていきます。
Foundation Models Frameworkの位置づけ:Apple Intelligenceのモデルをアプリから呼ぶAPI
Foundation Models Frameworkが提供するのは、モデルそのものではなく「OSに入っているモデルを呼ぶ窓口」です。中心になる型は3つあります。モデルを表すSystemLanguageModel、会話の状態と履歴を持つLanguageModelSession、出力をSwiftの型で受け取るための@Generableマクロです。
モデルはApple Intelligenceをオンにした時点でOS側がダウンロードするため、アプリにモデルファイルを同梱しません。Appleはこのモデルを通常のOSアップデートで更新しており、ドキュメントには「iOS 26.0〜26.3」「iOS 26.4」「iOS 27.0」の3世代があると明記されています。同じプロンプトでもOSの版によって出力が変わりうるので、OSアップデートのたびに主要なプロンプトを再評価する運用が前提になります。
自前のモデルを変換して載せるCore MLとは役割が違います。Core MLは画像分類や独自学習モデルのように「自分で用意したモデル」を動かす仕組みで、Foundation Models Frameworkは「Appleが用意した汎用LLM」を使う仕組みです。推論を支えるハードウェアについてはNeural Engine(ANE)とは?16コアの意味・Neural Acceleratorとの違いで、自前モデルを動かす側の仕組みはCore MLとは?Create ML・coremltools 9でのモデル作成とCore AIとの使い分けで解説しています。
Apple Foundation Modelsの性能:モデル規模・量子化・評価結果
「Apple Foundation Models」はApple Intelligenceを支えるモデル群の総称で、Foundation Models Frameworkから呼べるのはその一部です。公表されている性能情報は、2025年の技術報告と、2026年6月8日に発表された第3世代(AFM 3)の2系統あります。
2025年版オンデバイスモデル:約30億パラメータと2ビット量子化
Apple Machine Learning Researchの2025年6月9日の記事と、2025年7月17日公開の技術報告「Apple Intelligence Foundation Language Models Tech Report 2025」によると、iOS 26で開発者に開放されたオンデバイスモデルは約30億パラメータです。軽量化の工夫は次のとおりです。
| 項目 | 公表値 |
|---|---|
| パラメータ数 | 約30億(~3B) |
| 重みの量子化 | 2ビット/重み(量子化認識学習 QAT) |
| 埋め込み表 | 4ビット/重み |
| KVキャッシュ | 8ビット |
| KVキャッシュ共有 | 2ブロック(深さ5:3)で共有しKVキャッシュのメモリを37.5%削減 |
| 対応言語(2025年6月の記事) | 15言語 |
技術報告(arXiv 2507.13575・2025年8月27日のv3)は、公開モデルとの比較をベンチマークの数値で載せています。評価は各モデルのinstruct版・思考なしの設定で、AFMが対応する言語に限って行われました。
| モデル | MMLU | MMMLU(多言語) | MGSM(多言語の算数) |
|---|---|---|---|
| AFM On-Device(約3B) | 67.85 | 60.60 | 74.91 |
| Qwen-2.5-3B | 66.37 | 56.53 | 64.80 |
| Qwen-3-4B | 75.10 | 66.52 | 82.97 |
| Gemma-3-4B | 62.81 | 56.71 | 74.74 |
| Gemma-3n-E4B | 57.84 | 50.93 | 77.77 |
| AFM Server | 80.20 | 74.60 | 87.09 |
| Llama 4 Scout | 84.88 | 80.24 | 90.34 |
| Qwen-3-235B | 87.52 | 82.95 | 92.00 |
| GPT-4o | 85.70 | 84.00 | 90.30 |
オンデバイスモデルは知識系(MMLU・MMMLU)でQwen-2.5-3B・Gemma-3-4B・Gemma-3n-E4Bを上回る一方、算数のMGSMではGemma-3n-E4Bに届かず、一回り大きいQwen-3-4Bには全項目で負けています。サーバーモデルも、規模の近いLlama 4 Scoutにやや及ばず、Qwen-3-235BとGPT-4oとは差が開いています。Appleの人手評価(同じ技術報告と2025年6月の記事)では、オンデバイスモデルはQwen-2.5-3Bより全言語で良好、英語ではQwen-3-4BやGemma-3-4Bと互角とされています。端末で動く3B級としては上位でも、クラウドの最上位モデルと同じ仕事をさせる設計ではありません。
端末向け最適化による精度変化:16ビットと2ビットの差
上の表のAFMの値は、技術報告のTable 3にある最適化前(16ビット)の値とほぼ一致します(オンデバイスのMMLUは67.85と67.8)。Table 3は最適化を施す前後の差を載せており、端末で実際に動くのは最適化後(Opt)の方です。
| モデル | 重みのビット数 | MMLU | IFEval(指示追従) |
|---|---|---|---|
| AFM On-Device | 16 | 67.8 | 85.1 |
| AFM On-Device Opt | 2 | 64.4 | 82.3 |
| AFM Server | 16 | 80.0 | 89.1 |
| AFM Server Opt | 3.6 | 79.2 | 90.2 |
Table 3は、オンデバイスモデルの2ビット量子化認識学習(QAT)、サーバーモデルのASTC圧縮(約3.56ビット)、品質回復用アダプタなどの最適化をまとめて適用した前後の比較です。オンデバイスモデルはこの前後でMMLUが3.4ポイント、IFEvalが2.8ポイント下がります。2ビット化だけの影響を切り出した数字ではありませんが、端末で動く版の方が低いことは確かです。ベンチマーク表の67.85をそのまま端末の実力と読むと、少し高く見積もることになります。
第3世代(AFM 3):Googleと共同開発した5モデル構成
2026年6月8日の記事「Introducing the Third Generation of Apple’s Foundation Models」で、Appleは第3世代のモデル群をGoogleとの協業で構築した5モデル構成だと発表しました。提携の範囲とSiri AIとの関係はAppleのGemini採用とは?Siri AIとの関係・Googleとの提携範囲で整理しています。
| モデル | 実行場所 | 公表されている特徴 |
|---|---|---|
| AFM 3 Core | 端末 | 30億パラメータの密モデル |
| AFM 3 Core Advanced | 端末 | 200億パラメータの疎モデル・稼働は10億〜40億 |
| AFM 3 Cloud | Private Cloud Compute | サーバー側の主力 |
| AFM 3 Cloud Pro | PCC(Google CloudのNVIDIA GPU) | 最上位・エージェント用途と複雑な推論 |
| ADM 3 Cloud (Image) | Private Cloud Compute | 画像の生成と編集 |
AFM 3 Core Advancedは全重みをフラッシュメモリに置き、プロンプトごとに使う専門家(エキスパート)を選んでDRAMへ読み込む構造で、「最も高性能なApple siliconで有効になる」とされています。評価は社内の人手による比較が中心です。一般的な文章タスクでAFM 3 Coreが選ばれた割合は45.6%で、2025年版の23.3%を上回りました。サーバー側のAFM 3 Cloudは64.7%対8.7%で2025年版のサーバーモデルに勝っています。
性能の数字の読み方:フレームワークで呼べるモデルとの対応
注意したいのは、AFM 3の発表記事の数字がそのままアプリで使えるモデルの性能を示すとは限らない点です。Foundation Models Frameworkのドキュメントは、SystemLanguageModelの世代をAFM 3の製品名ではなくOSの版(26.0〜26.3/26.4/27.0)で区別しています。WWDC26のセッション「What’s new in the Foundation Models framework」は、iOS 27のオンデバイスモデルを「一から作り直し、論理とツール呼び出しが向上した」と説明していますが、アプリから見たモデル名は示していません。AFM 3のベンチマークを含む技術報告についても、Appleは発表時点で「今夏後半に公開する」と予告するにとどめていました。
実務で性能を判断するなら、公表値より自分のタスクでの評価が確実です。WWDC26ではそのためのEvaluationsフレームワークも発表されており、Appleは「まずオンデバイスモデルで評価し、足りなければPrivate Cloud Computeへ移る」順番を推奨しています。
対応OS・対応機種・日本語対応と利用料
対応OSと対応機種
オンデバイスモデル(SystemLanguageModel)はiOS 26.0/iPadOS 26.0/Mac Catalyst 26.0/macOS 26.0/visionOS 26.0以降で使えます。watchOSでは使えませんが、iOS 27世代で加わったPrivate Cloud Computeモデルは watchOS 27 にも対応しました。開発にはXcode 26以降が必要で、iOS 27の新APIを使うにはXcode 27が必要です。Xcodeの現行版と更新手順はXcodeの最新バージョンは27|確認・アップデート手順にまとめています。
実行する端末はApple Intelligence対応機種である必要があります。Appleサポートの案内(2026年10月24日に確認)によると、iOS 27世代の対象は次のとおりです。
- iPhone:iPhone Duo、iPhone 16シリーズ以降、iPhone 15 Pro/15 Pro Max、iPhone Air
- iPad:iPad mini(A17 Pro)、M1以降のiPad
- Mac:M1以降のMac、MacBook Neo(A18 Pro)
- その他:Apple Vision Pro、Apple Watch Series 9以降/Ultra 2以降/SE 3(対応iPhoneとのペアリング時)
ストレージはApple Watchで最大1.5GB、その他の対応端末では原則最大8GBです。ただし、iPhone Duo、iPhone 17 Proモデル以降、iPhone Air、Apple Vision Pro(M5)やメモリ12GB以上のM4以降のiPad・M3以降のMacでは最大14GBを使います。無印のiPhone 15以前は対象外なので、アプリ側では必ず代替の表示を用意します。
日本語対応と言語の条件
日本語はApple Intelligenceの対応言語に含まれています。2026年9月時点の対応言語は、英語・デンマーク語・オランダ語・フランス語・ドイツ語・イタリア語・ノルウェー語・ポルトガル語・スペイン語・スウェーデン語・トルコ語・ベトナム語・中国語(簡体字/繁体字)・日本語・韓国語です。条件は、端末の言語とSiriの言語を同じ対応言語にそろえることです。Siriの言語を変えると、新しい言語のデータがそろうまでApple Intelligenceが使えなくなることがあります。
アプリからはsupportedLanguagesとsupportsLocale(_:)で対応を確かめられ、非対応の言語で呼ぶとエラー(iOS 27ではunsupportedLanguageOrLocale)になります。コンテキストの計算にも言語が効きます。Appleの説明では、英語は1トークンがおよそ3〜4文字ですが、日本語・中国語・韓国語はおよそ1文字1トークンです。ただし文字数は目安にすぎません。コンテキストには指示文・入力・出力に加えて、会話の履歴とツールの定義も入ります。上限はcontextSize、実際の消費はtokenCount(for:)で測り、超えたときのcontextSizeExceededエラーに備えます。
利用料と使用量の上限
オンデバイスモデルの推論は無料で、Appleの比較表でも使用量は「Unlimited」です。APIキーもアカウント登録も要りません。上限や利用条件があるのはサーバー側のモデルです。AppleのFoundation Models frameworkの製品ページは、PCCを使う開発者アプリを1日の上限の対象に挙げ、「上限を超えて使える枠は将来有料で提供する」と注記しています。詳細は次の「iOS 27で変わった点」で扱います。
基本の使い方:SwiftでのLanguageModelSession実装
ここからはiOS 26以降で共通のAPIを使った抜粋例です。各例ではFoundationModelsをインポートし、生成処理をasync throwsの関数内で実行します。inquiryTextは入力文字列、orderStoreはアプリ側で実装・提供する注文取得処理です。
モデルが使えるかの確認(availability)
最初にSystemLanguageModel.default.availabilityを確認します。使えない理由は3種類で、非対応機種(deviceNotEligible)、Apple Intelligenceがオフ(appleIntelligenceNotEnabled)、モデルのダウンロード中など準備が済んでいない(modelNotReady)です。
import FoundationModels
let model = SystemLanguageModel.default
switch model.availability {
case .available:
// 生成AIを使う画面を表示する
break
case .unavailable(.deviceNotEligible):
// 非対応機種:AIを使わない代替の画面を出す
break
case .unavailable(.appleIntelligenceNotEnabled):
// 設定でApple Intelligenceをオンにするよう案内する
break
case .unavailable(.modelNotReady):
// ダウンロード中など:時間をおいて再確認する
break
case .unavailable(let other):
print(other)
}
Apple Intelligenceをオンにした直後はモデルのダウンロードに時間がかかるため、modelNotReadyを「使えない」と確定させず、後で再確認する作りにします。
テキスト生成:respondとstreamResponse
セッションを作り、instructionsで役割を、プロンプトで個別の依頼を渡します。Appleの説明では、モデルはプロンプトよりinstructionsを優先して従うため、利用者の入力はプロンプト側に入れ、信頼できる指示だけをinstructionsに書きます。
let session = LanguageModelSession(instructions: """
あなたは社内ヘルプデスクの要約係です。3文以内で答えてください。
""")
// 完成した応答をまとめて受け取る
let response = try await session.respond(to: "次の問い合わせを要約して:\(inquiryText)")
print(response.content)
// 生成途中の内容を順に受け取る(画面に逐次表示したいとき)
let stream = session.streamResponse(to: "返信文の下書きを作って:\(inquiryText)")
for try await snapshot in stream {
print(snapshot.content)
}
1つのセッションは同時に1件しか処理できず、前の応答が終わる前に次を投げると実行時エラーになります。isRespondingで処理中かを確認します。会話を続ける場合は同じセッションを使い回し、単発の処理なら毎回新しいセッションを作ります。
構造化出力:@Generableと@Guide
Guided generation(ガイド付き生成)を使うと、出力を文字列でなくSwiftの型で受け取れます。フレームワークは生成時に出力の形を制約するので、JSONの崩れを後処理で直す必要がありません。
@Generable
enum Category {
case billing, account, bug, other
}
@Generable
struct TicketSummary {
@Guide(description: "問い合わせの分類")
let category: Category
@Guide(description: "要約。100文字以内")
let summary: String
@Guide(description: "緊急度", .range(1...5))
let priority: Int
}
let result = try await session.respond(
to: "次の問い合わせを分類して:\(inquiryText)",
generating: TicketSummary.self
)
print(result.content.category, result.content.priority)
@Guideのdescriptionに書いた「100文字以内」はモデルへの指示で、.rangeのような構造上の制約ではありません。文字数を厳密に守らせたいときは、生成後にsummary.countで確かめます。分類・抽出・タグ付けのように答えの形が決まっているタスクは、この方式にすると出力の解析処理を書かずに済みます。タグ付けに特化したモデルが必要なら、SystemLanguageModel(useCase: .contentTagging)で専用の版を指定できます。
ツール呼び出し:Toolプロトコル
モデルが知らない情報(アプリ内のデータや最新の値)は、Toolプロトコルに準拠した型を渡して、モデルに呼ばせます。
struct FindOrders: Tool {
let name = "findOrders"
let description = "顧客IDから直近の注文を取得する"
@Generable
struct Arguments {
@Guide(description: "顧客ID")
let customerID: String
}
func call(arguments: Arguments) async throws -> [String] {
// アプリのデータベースから取得する処理
return try await orderStore.recentOrders(for: arguments.customerID)
}
}
let session = LanguageModelSession(
tools: [FindOrders()],
instructions: "注文に関する質問には findOrders を使って答えてください。"
)
ツールの名前・説明・引数の定義はプロンプトに入るため、コンテキストを消費します。オンデバイスモデルの小さい枠では、そのセッションで使うツールだけを渡し、説明文を短く書きます。
iOS 27では、ツールの呼び出しを必須にしたり禁止したりするtoolCallingModeも加わりました(後述のDynamic Profilesの節で扱います)。
iOS 27(WWDC26)で変わった点:Private Cloud Compute・外部モデル・エラー型
2026年6月のWWDC26で発表され、iOS 27で正式に使えるようになった変更です。この章では、iOS 26向けの実装から変更が必要になるAPIと利用条件を整理します。WWDC26全体の発表内容はWWDC26まとめ|Siri AI・iOS 27・macOS Golden Gateの発表内容、iOS 27の配信状況はiOS 27はいつ配信?リリース日と27.0.1の修正・SDK破壊的変更を参照してください。
新しいオンデバイスモデルと画像入力
iOS 27ではオンデバイスモデルが新しくなり、画像を理解できるようになりました。プロンプトにAttachmentで画像を添えるだけで、UIImage・NSImage・CGImage・Core Imageの型・CoreVideoのピクセルバッファ・ファイルURLを渡せます。画像サイズと縦横比は任意ですが、大きい画像ほどトークンと待ち時間が増えます。
あわせて、Visionフレームワークを使うBarcodeReaderToolとOCRTool、Spotlightの索引を使って端末内だけで検索拡張生成(RAG)を組める検索ツールが、組み込みのツールとして加わりました。コンテキスト長はcontextSize、トークン数はtokenCount(for:)で実行時に取得できます(WWDC26のセッションでは iOS 26.4 で公開したと説明)。セッションのサンプル出力は8192で、Appleは実行する機種に合わせて処理量を調整するよう勧めています。
Private Cloud Computeモデル:32Kトークンと推論レベル
PrivateCloudComputeLanguageModelは、Apple Intelligenceの機能を動かしているサーバー側のモデルをアプリから使う型です。iOS/iPadOS/macOS/visionOS/watchOS 27以降で使え、セッション作成時に渡すモデルを1行変えるだけで切り替えられます。
| 項目 | SystemLanguageModel | PrivateCloudComputeLanguageModel |
|---|---|---|
| 実行場所 | 端末 | Appleのサーバー(PCC) |
| オフライン動作 | 可 | 不可 |
| コンテキスト | 4K(iOS 27は機種で変動) | 32K |
| 推論(reasoning) | 非対応 | light/moderate/deep |
| 使用量 | 無制限 | 利用者ごとに1日の上限 |
| 対応OS | 26以降(watchOSは不可) | 27以降(watchOSも可) |
APIキーや認証の実装は不要で、Appleは「プロンプトは保存されない」と説明しています。推論レベルはContextOptionsで指定し、Appleはmoderateから試して足りなければdeepへ上げる順を勧めています。
func reviewSpec(_ longDocument: String) async throws -> String? {
let prompt = "この仕様書の矛盾点を挙げてください:\(longDocument)"
if #available(iOS 27.0, macOS 27.0, watchOS 27.0, visionOS 27.0, *) {
let pcc = PrivateCloudComputeLanguageModel()
if pcc.isAvailable {
// PCCのときだけ推論レベルを指定する
let session = LanguageModelSession(model: pcc)
let response = try await session.respond(
to: prompt,
contextOptions: ContextOptions(reasoningLevel: .moderate)
)
return response.content
}
}
// 長い文書はオンデバイスの上限を超えやすいので、PCCが使えなければ呼び出し元に任せる
return nil
}
このコードは、PCCが使えないときnilを返し、呼び出し元で「この文書のレビューにはPrivate Cloud Computeが必要です」と表示する前提です。長い文書をそのままオンデバイスモデルへ回すと、コンテキストの上限を超えてエラーになりやすいためです。
開発者側にも条件があります。Appleの「Accessing Private Cloud Compute」によると、クラウドAPIの費用なしで使えるのは、App Store Small Business Programに加入し、App Storeで公開している各アプリの初回ダウンロード数がそれぞれ200万未満で、PCCのエンタイトルメントをアカウントに付与された開発者です。TestFlightやアドホック配布での検証は初回ダウンロード数に数えません。いずれかのアプリが200万を超えるか、Small Business Programから外れた場合は、通知から6か月以内に別の手段へ移行する必要があります。
エンタイトルメントは申請制の「管理対象capability」です。Apple DeveloperのCapability Requestsの手順では、Certificates, Identifiers & ProfilesでApp IDを選び、Capability Requestsタブから申請します。組織で登録している場合、申請できるのはAccount Holderだけです。承認後にXcodeでcapabilityを追加すれば署名設定まで自動で行われます。また、iOS 27のベータ期にはAppleの担当者が開発者フォーラムで「PCCはシミュレーターで動かない場合がある」という既知の問題(177684296)を案内し、回避策としてOS 27.0の実機を使うよう示していました。PCCの動作確認は実機で行う前提で計画します。
利用者側の1日の上限に近づいたときや使い切ったときは、quotaUsageで状態を確認し、iCloud+へのアップグレードを案内するシステムUIを出せます。Xcodeのスキーム設定には、上限に近い状態と上限到達の状態を再現するオプションがあります。
LanguageModelプロトコル:Claude・Geminiとの共通API
iOS 27では、セッションの裏側のモデルを差し替えるためのLanguageModelプロトコルが公開されました。SystemLanguageModelとPrivateCloudComputeLanguageModelはすでにこれに準拠しています。外部モデルのパッケージは、2026年10月24日時点で次の2つが公開されています。Swift Package Managerで追加し、モデルを渡してセッションを作れば、respond以降のコードは変わりません。
- Claude:AnthropicのClaudeForFoundationModels(Apache-2.0)。最新は2026年10月7日の0.2.3で、READMEには「Beta」と明記されています。
- Gemini:Firebaseの
GeminiLanguageModel。Firebase Apple SDK 12.19.0でPublic Previewとして追加されました。
端末のNeural EngineやMacのGPUでローカルモデルを動かすCoreAILanguageModelとMLXLanguageModelも、オープンソースで公開されています。Appleの製品ページからは、Core AI側がapple/coreai-models、MLX側がml-explore/mlx-swift-lmへ案内されています。MLX側の使い方はMLXとは?mlx-lmの使い方とApple Siliconでの採用判断を参照してください。
ただし外部のサーバーモデルは、認証と課金が開発者の責任になります。Appleはセッションで「秘密鍵をアプリのバイナリに入れない」「アクセストークンはOAuthなどで取得してKeychainに保存する」と注意しています。ClaudeForFoundationModelsは、AnthropicのコンソールにアプリのチームIDとバンドルIDを登録し、App Attestで正規のアプリかを確かめる方式(.appAttest(clientID:))を推奨しており、この方式ならアプリにAPIキーも自前のバックエンドも要りません。App Attestは実機専用なので、シミュレーターでの試作だけAPIキー方式を使い、そのキーを入れたまま配布しないよう注意書きがあります。トークン単位の課金を追えるよう、セッションと応答にusageプロパティが加わり、入力・キャッシュ・出力・推論のトークン数を取得できます。
Dynamic Profiles:同一セッション内のモデル・指示・ツールの切り替え
iOS 27で加わったDynamic Profilesは、セッションを作り直さずに、使うモデル・temperature・推論レベル・instructions・ツールを途中で入れ替える宣言的なAPIです。iOS 26では、instructionsはセッション作成時に1回評価されて固定されていました。Appleのドキュメント「Composing dynamic sessions with instructions and profiles」によると、DynamicInstructionsのbodyはモデルへのリクエストのたびに評価し直されるため、アプリの状態に応じて必要な指示とツールだけをモデルに渡せます。
型は3層です。指示とツールの組を宣言するDynamicInstructions、それにモデルや生成設定を結びつけるLanguageModelSession.Profile、状態に応じてどのProfileを有効にするかを決めるLanguageModelSession.DynamicProfileです。会話の履歴(トランスクリプト)はProfileを切り替えても引き継がれます。
// iOS 27以降:画像編集中だけPCCモデルと低いtemperatureを使う
struct EditorProfile: LanguageModelSession.DynamicProfile {
var pccModel = PrivateCloudComputeLanguageModel()
var isEditingImage = false
var body: some LanguageModelSession.DynamicProfile {
if isEditingImage {
Profile {
ImageEditingInstructions() // DynamicInstructionsに準拠した型
}
.model(pccModel)
.temperature(0.2)
.reasoningLevel(.light)
} else {
Profile {
DraftingInstructions() // 同上
}
.temperature(0.8)
}
}
}
let session = LanguageModelSession(profile: EditorProfile())
この例は分岐の書き方だけを示すもので、isEditingImageは固定値です。実行中に切り替えるには、次のtoolCallingModeの例のように@Observableな状態オブジェクトをアプリとProfileで共有し、bodyがその値を参照するようにします。bodyは次のリクエストの前に評価し直されます。DynamicProfileでは、有効なProfileが常に1つになるようにコンパイル時に検査されます。並列のifではなくif〜else if〜elseの式で書くのはそのためです。Appleはこの仕組みを、エージェントや「スキル」のような上位の抽象を組む部品と位置づけています。コンテキストの小さいオンデバイスモデルでは、全部のツールを常に渡すより、場面ごとに必要なツールだけを渡す方がコンテキストを節約できます。
iOS 27以降は、toolCallingModeでツールの使い方を指定できます。モードは、呼ぶかどうかをモデルに任せるallowed(既定)、ツールを呼ばせないdisallowed、ツール呼び出ししかさせないrequiredの3つです。Profileの修飾子としても、GenerationOptionsとしても渡せます。
注意が要るのはrequiredです。WWDC26のセッション「Build agentic app experiences with the Foundation Models framework」は、requiredのモデルは実質的にループに入るので、抜ける条件を必ず用意するよう説明しています。方法は、ツールが呼ばれたらモードを切り替えるか、最終回答用のツールからエラーを投げてループを打ち切るかです。「必ず注文データを引いてから答えさせたい」場合は、次のように取得後にdisallowedへ切り替えます。
// iOS 27以降:注文を引くまではツール呼び出しを必須にし、引いた後は回答に移る
import FoundationModels
import Observation
@Observable final class OrderLookupState {
var lookedUpOrders = false
}
struct OrderSupport: LanguageModelSession.DynamicProfile {
let state: OrderLookupState
var body: some LanguageModelSession.DynamicProfile {
Profile {
Instructions("注文に関する質問に答えてください。")
FindOrders()
}
.toolCallingMode(state.lookedUpOrders ? .disallowed : .required)
.onToolOutput { state.lookedUpOrders = true } // ツールの出力を受け取った後に切り替える
}
}
iOS 27への移行:GenerationErrorの非推奨化とアダプタの互換切れ
移行で最も影響が大きいのはエラー型です。iOS 26のLanguageModelSession.GenerationErrorは iOS 27.0 で非推奨になり、どのモデルでも共通のLanguageModelErrorと、モデル固有のエラー(SystemLanguageModel.Errorなど)に置き換わりました。ドキュメントには「Xcode 26でビルドしたアプリは、Xcode 27で再ビルドするまで従来のエラーを受け取り続ける」「新しいエラー型を受け取るには、App Storeへ提出する前にXcode 27へ更新する必要がある」と書かれています。
do {
let response = try await session.respond(to: prompt)
print(response.content)
} catch let error as LanguageModelError {
switch error {
case .contextSizeExceeded:
// トランスクリプトの古い項目を削って再試行する
break
case .guardrailViolation, .refusal:
// 応答を生成できなかったことを利用者に伝える
break
case .rateLimited, .timeout:
// 時間をおいて再試行する
break
default:
break
}
}
名前も変わっています。iOS 26のexceededContextWindowSizeはcontextSizeExceededに、unsupportedGuideはunsupportedGenerationGuideになりました。iOS 26を最低対応OSに残すアプリは、#availableで分岐して両方の型を受ける必要があります。なおiOS 26のドキュメントでは、rateLimitedはアプリがバックグラウンドで実行中にシステムの上限を超えたときに発生するとされ、バックグラウンドではストリーミングでなくrespondを使うよう勧めています。
独自データでモデルを調整するアダプタにも期限があります。Appleのアダプタ学習ツールキットのページには「バージョン26.0.0がこのツールキットの最終リリースで、macOS・iOS・iPadOS・visionOS 27以降とは互換性がない」と明記されています。iOS 26向けにアダプタを学習させたアプリは、iOS 27ではアダプタに頼らずプロンプトとGuided generationで同じ品質が出るかを評価し直す必要があります。
fm CLI・Python SDK・オープンソース化
macOS 27ではターミナルからfmコマンドでオンデバイスモデルとPCCを呼べるようになり、シェルスクリプトで文書要約やファイル名の生成に使えます。Python向けにはapple-fm-sdk(GitHubの apple/python-apple-fm-sdk)があり、要件はmacOS 26以降・Xcode 26以降・Python 3.10以上・Apple Intelligenceを有効にした対応Macです。SwiftアプリのプロンプトをPythonで一括実行して評価する用途が想定されています。
WWDC26では、フレームワークの中核をオープンソース化してLinuxサーバーでも使えるようにすると発表されました。2026年10月24日時点でGitHubのappleオーガニゼーションで確認できたのは、実験的な部品を集めたfoundation-models-utilities(Apache-2.0)と、上記のPython SDKです。utilitiesのREADMEは対応先を「Appleのプラットフォームと、Ubuntuなど一部のLinuxディストリビューション」としています。中身は、Appleの製品ページの説明ではカスタムスキル、コンテキスト管理の補助、任意のホスト型モデルにつなぐChat Completionsクライアントといった実験的な部品です。フレームワーク本体のリポジトリは、appleとswiftlangの両オーガニゼーションで見当たりませんでした。
オンデバイス・PCC・外部モデルの選び方と使うべきでない場面
判断の軸は、データを端末の外に出せるか、入力の長さ、利用者の数の3点です。
- オンデバイス(SystemLanguageModel):要約・分類・抽出・タグ付け・短い文章の書き換え。オフラインで動かしたい機能、件数が多く従量課金を避けたい機能に向きます。
- PCC:オンデバイスモデルの
contextSizeを超える文書、複数の条件を比べる判断、長い会話。対象はiOS 27以降で、開発者がSmall Business Programの条件を満たす場合に限られます。 - Claude・Geminiなど外部モデル:コード生成など大型モデルの能力が要る機能、Android版と利用モデルを共通化したい機能。最新の情報を答えさせるには、モデルの切り替えに加えてWeb検索などの接続も要ります。認証と課金の実装が必要です。
はっきり避けるべき場面もあります。Appleのドキュメントは、オンデバイスモデルの「避けるべき用途」として、簡単な計算(例:bagelに含まれるbの数)、コード生成、論理推論(例:Apple Parkからカナダを向いたときテキサスはどの方向か)を挙げています。金額計算や在庫数のように答えが1つに決まる処理をモデルに任せてはいけません。計算はSwiftのコードで行い、モデルには文章化だけを任せます。また、iPhone 15(無印)以前が利用者の多数を占めるアプリでは、この機能が主役になりません。AIを使わない画面でも用が足りるように作り、生成AIは上乗せの機能として扱うのが現実的です。対応機種の割合や代替画面まで含めた設計は、iOSアプリ開発の段階で決めておくと後の手戻りが減ります。
プライバシーの面では、オンデバイスはデータを端末の外に出さず、PCCはプロンプトを保存しない設計です。ただしPCCは通信を伴います。医療・金融など、端末の外に出すこと自体を避けたいデータはオンデバイスで処理し、PCCへ送る前に内容を利用者に示す設計にします。端末内でAIを動かす考え方全般はオンデバイスAIの仕組みと業務導入の判断基準で解説しています。
よくある質問
Apple Foundation Modelsの性能はどのくらいですか?
2025年版のオンデバイスモデルは約30億パラメータで、技術報告のMMLUは67.85です。Qwen-2.5-3B(66.37)とGemma-3-4B(62.81)を上回り、Qwen-3-4B(75.10)には届きません。端末で動く2ビット版ではMMLUが64.4に下がります。2026年6月発表のAFM 3 Coreは、人手評価で旧版より選ばれた割合が45.6%対23.3%でした。クラウドの最上位モデルと同等ではありません。
Foundation Models Frameworkは日本語で使えますか?
使えます。日本語はApple Intelligenceの対応言語です。利用条件は、端末の言語とSiriの言語を同じ対応言語にそろえることで、日本語で使うなら両方を日本語にします。日本語はおよそ1文字1トークンで、履歴やツールの定義もコンテキストを消費します。上限は機種とモデルで変わるため、contextSizeとtokenCount(for:)で実行時に確かめます。
利用料はかかりますか?
オンデバイスモデルは無料で、使用量の上限もありません。iOS 27のPCCモデルは、Small Business Programに加入し、公開する各アプリの初回ダウンロード数がそれぞれ200万未満で、PCCのエンタイトルメントを付与された開発者ならクラウドAPIの費用なしで使えますが、利用者ごとに1日の上限があります。ClaudeやGeminiを使う場合は各社の料金がかかります。
Macのターミナルから使えますか?
macOS 27ではfmコマンドでオンデバイスモデルとPCCを呼べます。macOS 26以降ならPython向けのapple-fm-sdk(pip install apple-fm-sdk)からもオンデバイスモデルを使えます。
Core MLとはどう使い分けますか?
自分で学習・変換したモデルを動かすならCore ML、Appleが用意した汎用の言語モデルで文章を扱うならFoundation Models Frameworkです。Core MLではモデルをアプリに同梱するほか、実行時にダウンロードする構成も選べます。Foundation Models FrameworkのオンデバイスモデルはOSが管理します。iOS 27では大規模なモデルを端末で動かすCore AIが加わり、Core AIで書き出したモデルをLanguageModelプロトコル経由でFoundation Modelsのセッションから呼ぶこともできます。