RORK LABEN
ENGINE — Rork MaxはClaude CodeとClaude Opus 4.6を基盤に、ネイティブSwiftアプリを直接生成しますCORE ML — Rork MaxからCore MLの端末内推論・HealthKit・HomeKit・NFC・App Clipsといった機能に手が届きますSEED — Rorkは2026年4月にLeft Lane Capital主導で$15Mのシードを調達し、Peak XVやa16z Speedrunが参加しましたM&A — Rorkはアプリビルダー Paperline を買収し、エンジニアリング人材の獲得を目的に買収を継続する方針ですMARKET — Gartnerは2026年末までに新規アプリの75%がローコードまたはノーコードで作られると予測していますGROWTH — ノーコードAI市場は2024年の$4.9Bから2029年に$24.8Bへ、年38.2%の成長が見込まれていますENGINE — Rork MaxはClaude CodeとClaude Opus 4.6を基盤に、ネイティブSwiftアプリを直接生成しますCORE ML — Rork MaxからCore MLの端末内推論・HealthKit・HomeKit・NFC・App Clipsといった機能に手が届きますSEED — Rorkは2026年4月にLeft Lane Capital主導で$15Mのシードを調達し、Peak XVやa16z Speedrunが参加しましたM&A — Rorkはアプリビルダー Paperline を買収し、エンジニアリング人材の獲得を目的に買収を継続する方針ですMARKET — Gartnerは2026年末までに新規アプリの75%がローコードまたはノーコードで作られると予測していますGROWTH — ノーコードAI市場は2024年の$4.9Bから2029年に$24.8Bへ、年38.2%の成長が見込まれています
記事一覧/AIモデル
AIモデル/2026-06-24上級

Foundation Models の Guided Generation で、オンデバイスAIの出力を型で受け取る

オンデバイスのFoundation Modelsで、AIの返答を自由文ではなく型付きの構造体として受け取る方法を、Guided GenerationとTool Callingの実装コードとともに整理します。

Foundation Models4オンデバイスAI12Rork Max219SwiftUI62Guided Generation

プレミアム記事

オンデバイスのAIにアプリの機能を任せるとき、私が個人開発でいちばん神経を使ってきたのは、モデルの「自由文の返答」をアプリ側で構造化データに整形する部分でした。プロンプトで「JSONで返して」とお願いしても、前後に説明文が混じったり、キー名が微妙に揺れたり、配列が空のときだけ形が変わったりします。そのたびに正規表現やtry?で受け止める処理が増えていき、いちばん壊れやすい場所になっていきました。

iOS 26 の Foundation Models フレームワークには、この問題を根本から消すための仕組みが二つ用意されています。出力を Swift の型に縛る Guided Generation と、モデルにアプリ側の関数を呼ばせる Tool Calling です。Rork Max はネイティブ Swift を生成するため、これらの API をそのまま生成コードに組み込めます。自由文パースをやめて型でAIの出力を受け取るところまでを、ここから実際に動くコードで追っていきます。

なぜ自由文の返答をパースする実装は壊れやすいのか

従来のクラウドLLM連携では、こういう形のコードを書きがちでした。

// 壊れやすい例:自由文を受け取って自前でJSONに整形する
let text = try await callCloudLLM(prompt: "おすすめの瞑想テーマを3つ、JSON配列で返して")
 
// text には「はい、こちらがおすすめです:[...]」のような前置きが混じることがある
guard let jsonStart = text.firstIndex(of: "["),
      let data = String(text[jsonStart...]).data(using: .utf8),
      let themes = try? JSONDecoder().decode([String].self, from: data) else {
    // ここに来る頻度が想像以上に高い
    return fallbackThemes
}

問題は、text が「人間向けの文章」である以上、フォーマットが保証されないことです。私が運用中のアプリにAI機能を足したときも、テスト中は安定していたのに、リリース後に特定の入力でだけ前置きが付いてパースが失敗する、という報告が出ました。fallbackThemes に逃げる回数が増えるほど、AI機能の価値は薄れていきます。

Guided Generation は、この「文章を整形する」工程そのものを不要にします。モデルに最初から型を渡し、その型に適合した値だけを生成させるからです。

@Generable で出力を型に縛る

まず、AIに返してほしいデータを Swift の構造体として宣言し、@Generable を付けます。

import FoundationModels
 
@Generable
struct MeditationTheme {
    @Guide(description: "瞑想セッションのタイトル。15文字以内の日本語")
    var title: String
 
    @Guide(description: "そのテーマで意識すること。1文の説明")
    var focus: String
 
    @Guide(description: "推奨する時間(分)", .range(3...30))
    var durationMinutes: Int
}

@Generable を付けた型は、モデルにとって「この形で出力せよ」という設計図になります。あとはセッションに型を渡して生成を依頼するだけです。

let session = LanguageModelSession()
 
let response = try await session.respond(
    to: "初心者向けの瞑想テーマを1つ提案してください",
    generating: MeditationTheme.self
)
 
// response.content は MeditationTheme 型。パース処理は一切ない
let theme = response.content
print(theme.title)          // 例:「呼吸に還る」
print(theme.durationMinutes) // 例:5

ここがこの仕組みの核心です。response.content は文字列ではなく MeditationTheme そのものです。JSONDecoder も正規表現も登場しません。モデルが制約を満たせない値(たとえばdurationMinutesに40を入れる)を生成しようとしても、フレームワーク側が型と@Guideの制約に沿うように生成を誘導するため、アプリに届く時点で3...30の範囲に収まっています。

なぜ正規表現でのパースより信頼できるのか、という点が大事です。自前パースは「生成された後の文字列を検査する」後追いの防御ですが、Guided Generation は「生成の段階で型に沿わせる」前向きの制約です。壊れたものを直すのではなく、壊れたものを作らせない、という違いです。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
モデルの自由文を毎回パースして壊れていた処理を、@Generable で型付きの構造体として安全に受け取れるようになる
Tool Calling でモデルにアプリ側の関数を呼ばせ、ネットワークなしでも動くアシスタント機能を実装できる
部分生成のストリーミング表示と、生成失敗時のフォールバック設計まで含めて、本番アプリに耐える on-device AI を組める
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

AI モデル2026-06-14
Rork Max の Swift アプリに Foundation Models の画像入力でオンデバイス・タグ付けを実装する
WWDC26 で Foundation Models のオンデバイスモデルに画像入力が加わりました。Rork Max が生成する Swift アプリに、画像のタグ付け・説明生成をクラウドに出さず実装する具体的な手順を、可用性ゲートとVision併用まで含めて解説します。
AI モデル2026-07-01
Rork Max のネイティブ Swift で SpeechAnalyzer を使い、長尺の音声を端末内で文字起こしする
SFSpeechRecognizer では詰まっていた長尺・オフラインの文字起こしを、iOS 26 の SpeechAnalyzer と SpeechTranscriber で作り直す実装メモです。モデル資産のダウンロード、AsyncStream での音声供給、確定前と確定後の結果の扱い分け、Rork Max のネイティブ生成と Expo からの橋渡しの境界設計まで、実際にハマった点を添えてまとめます。
AI モデル2026-06-30
Rork のハイブリッドAIが知らぬ間にクラウドへ偏って課金が膨らんでいたとき — 経路選択を計測して切り分ける運用メモ
オンデバイス・エッジ・クラウドを振り分けるAIルーターは、判断ログが無いと静かにクラウドへ偏り、トラフィックが横ばいでも課金だけが伸びます。経路選択を計測して原因を切り分けた運用メモです。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →