Appleの公式資料では、システムモデルが使えない理由として、デバイスが対象外、Apple Intelligenceが無効、モデルが準備中という状態を確認できます(利用不可理由の一覧)。そのため、Apple Foundation Modelsを使うSwiftUI入門では、まず短いテキスト機能を作り、開発環境とモデルの利用可否を分けて確かめてください。最初からAgentやツール呼び出しに広げず、対応環境で回答が表示できたら初回の動作確認は完了です。

この手順が向いている人 SwiftUIを学び始め、練習用アプリにAIのテキスト生成を加えたい学生。 簡単な画面は作れるものの、Foundation Modelsへの最初のリクエスト方法が分からない人。 手元に互換性を確認できるMacがなく、遠隔Macで課題に取り組む予定の人。

今週の進め方:画面を作る → 環境を確認する → リクエストを送る → 実機条件で判定する

先に環境を比べる:ビルド成功とモデル利用は別の確認

「コンパイルできた」と「モデルを呼び出せた」は同じ意味ではありません。Xcodeの要件は開発に使うMacとツールの条件を示し、モデルのavailabilityは実行先でシステムモデルを使えるかを示します。両方を別々に確認してください。

確認するもの 何が分かるか 次にすること
Xcodeのシステム要件 開発用MacとXcodeの組み合わせが条件を満たすか AppleのXcodeシステム要件で、導入するXcode 27の条件を確認します
プロジェクトの実行先 アプリをどの端末やシミュレーターで動かしているか 課題の指定先と同じ条件で起動できるか確かめます
SystemLanguageModelのavailability 実行先でモデルが利用可能か、利用不可なら何が理由か 判定結果ごとに案内文を出し、未確認のまま成功と扱わないようにします

Xcode 27という名前だけでは、Macの対応状況や実行先のモデル利用可否まで判断できません。バージョン要件はAppleの最新システム要件で確認し、モデル条件はSystemLanguageModelの公式説明で照合してください。

注意:手元にMacがない場合も、遠隔で割り当てられる環境がFoundation Modelsを呼び出せるとは限りません。利用前に、実際のシステムとXcode、実行先でのavailabilityを確認してください。

最初のマイルストーン:入力と表示だけの画面を作る

まず、入力欄、実行ボタン、回答欄を持つページを用意します。モデルを呼ぶ前に、入力した文字が画面に反映され、ボタン操作で状態表示が変わることを確かめます。

SwiftUIでは、画面の状態を値として持ち、その値が変わると表示も更新されます。課題用紙に書き込んだ内容が画面に映る、と考えると分かりやすいでしょう。AppleのStateの説明を確認しながら、入力文、回答、状態メッセージを別々に管理します。

import SwiftUI

struct ContentView: View {
    @State private var prompt = ""
    @State private var answer = ""
    @State private var status = "質問を入力してください"

    var body: some View {
        VStack(spacing: 16) {
            TextField("質問を入力", text: $prompt)
                .textFieldStyle(.roundedBorder)

            Button("回答を作る") {
                status = "準備中です"
            }

            Text(status)
            Text(answer)
        }
        .padding()
    }
}

この段階では固定の案内文を表示するだけで構いません。入力した内容が欄に残り、ボタンを押すと状態が変わり、回答欄を後から更新できることを確認できれば、画面側の土台はできています。

次のマイルストーン:短いテキストをモデルに送る

画面が動いたら、Apple Foundation Modelsを使う処理を追加します。公式の基本的な流れは、FoundationModelsを読み込み、LanguageModelSessionを作成し、respond(to:)にテキストを渡して応答を受け取る形です。フレームワークの概要とLanguageModelSessionの説明、respond(to:)のAPIリファレンスで、実装時点のAPIを確認してください。

import FoundationModels

let session = LanguageModelSession()
let response = try await session.respond(to: prompt)
let answerText = response.content

ここでいうsessionは、モデルとやり取りするための会話の入れ物です。promptはモデルに渡す質問や指示にあたります。最初は「短い文章を一文で要約してください」のような、個人情報を含まない依頼で試してください。

実際の画面では、ボタンを押したときに非同期処理を開始し、完了後にanswerへ応答文を入れます。処理中はstatusを「回答を作成中です」に変え、成功したら回答を表示し、失敗したらエラー案内に切り替えます。画像入力、外部ツール、独自モデル設定は初回の練習では加えません。

利用不可なら成功扱いにしない:理由ごとに案内を変える

リクエストを送る前に、SystemLanguageModel.default.availabilityを確認します。利用可能ならセッションを作り、利用不可なら理由に応じて案内し、モデル呼び出しへ進まない設計にします。availabilityの状態と理由はAppleのSystemLanguageModel資料を参照してください。

switch SystemLanguageModel.default.availability {
case .available:
    status = "モデルを利用できます"
case .unavailable(let reason):
    switch reason {
    case .deviceNotEligible:
        status = "この実行先ではモデルを利用できません"
    case .appleIntelligenceNotEnabled:
        status = "設定でApple Intelligenceを確認してください"
    case .modelNotReady:
        status = "モデルの準備が整ってから再度お試しください"
    @unknown default:
        status = "モデルの利用条件を確認してください"
    }
}

判定の意味は、デバイス非対応なら別の対応環境で確認すること、Apple Intelligenceが無効なら設定を確認すること、モデルが準備中なら状態が変わってから再試行することです。エラー理由やAPIの表現が更新される可能性があるため、コードを写すだけで終わらせず、公式資料で現在の定義を照合してください。

画面が読み込み中のまま止まる場合は、成功・失敗のどちらにも遷移していない可能性があります。利用不可の理由を表示し、待ち続ける状態から抜けられるようにしてください。

最後のマイルストーン:画面、リクエスト、推論を別々に記録する

個人情報を含まない短い質問を入力し、次の項目を順番に確認します。画面の表示、リクエスト処理、モデルの利用可否を混同しないことが、初学者の動作確認で重要です。

  • 画面:入力した文が欄に表示され、ボタンで状態が変わる。
  • 処理:ボタン操作でセッションとリクエストの処理に進む。
  • 利用可否:availabilityが利用可能を示し、応答文が表示される。
  • 失敗時:理由に合った案内が出て、読み込み表示から抜けられる。

シミュレーターで画面のレイアウトや状態遷移を確かめることと、実行先でモデルが実際に応答することは、別の確認項目です。課題の要件が実際の生成結果なら、指定された実行先でavailabilityと応答表示まで確認してください。試験の結果は「画面確認済み」「リクエスト処理確認済み」「モデル応答確認済み」のように分けて記録すると、どこまで完了したかが伝わります。

よくある疑問

Foundation Modelsの呼び出しはSwiftUIの画面からできますか?

できます。画面のボタン操作をきっかけに非同期処理を始め、応答を状態に保存して表示する構成にします。最初の実装では入力、送信、回答表示に絞り、モデルの利用可否とリクエスト中の表示も用意してください。APIの詳細はApple公式資料を確認し、手元の環境でビルドとモデル応答を別々に確かめます。

呼び出し前に何を確認すればよいですか?

Xcodeを動かすMacのシステム要件、アプリの実行先、実行時のavailabilityを確認します。Xcode 27の要件を満たしていても、モデルが使えるとは限りません。反対に、利用不可でも画面の入力や状態管理は先に練習できます。モデルを使った課題として提出する前に、指定環境で応答が得られたか確認してください。

モデルがまだ使えないとき、練習は中断すべきですか?

画面づくりは続けられます。固定文でボタン、読み込み表示、回答欄、失敗時の案内を確認し、モデル呼び出し部分はavailabilityを見て分岐させます。ただし、固定文が表示されてもシステムモデルの動作確認にはなりません。画面側の練習を完了させたうえで、対応条件を満たす実行先で改めてモデル応答を確かめましょう。

手元にMacがなくても課題を進められますか?

遠隔Macを使える場合は、割り当て環境のOS、Xcode、モデル利用可否を授業要件と照合してください。リモート接続できることだけでは、Foundation Modelsが利用できる証明になりません。条件が合わない場合は、画面の練習まで先に進め、モデル呼び出しの検証は対応環境で行う計画にします。

最終更新:2026年9月25日。確認先はApple DeveloperのFoundation Models、SystemLanguageModel、LanguageModelSessionおよびXcodeシステム要件です。 実際の要件やAPIに変更がないか、着手時にも各公式ページで確認してください。

授業で使う環境が手元になく、開発用Macをその都度用意する方法を検討しているなら、まず遠隔Macの利用案内で接続環境を確認してください。遠隔環境には、割り当て条件がモデル要件に合うか事前確認が必要なこと、接続品質に学習場所の回線が影響すること、利用期間に応じた費用がかかることがあります。長期間、毎日安定して使うなら自分のMacを用意する方が合う場合もありますが、授業や課題のために一時的な検証環境が必要なら、VMSPINのプランを確認し、必要な環境条件と利用期間が合う場合に限って選ぶのが現実的です。レンタルを選ぶ場合も、購入前に実際の割り当て環境でモデル利用可否を確かめてください。