Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Creating an English conversation app using the ...
Search
Asakura Shinsuke
June 19, 2026
Technology
13
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Creating an English conversation app using the Foundation Models framework
Asakura Shinsuke
June 19, 2026
More Decks by Asakura Shinsuke
See All by Asakura Shinsuke
Cla ude Code で0からキーボードを作る
asashin227
1
78
Ore Keybord #1
asashin227
0
1.6k
Build AI app with AI agent
asashin227
0
21
ReactNative入門
asashin227
0
95
アウトプットしようね
asashin227
0
35
SwiftUIでキラキラを作る
asashin227
0
96
ローカル拠点でのEMの役割
asashin227
0
300
XcodeCloud移行奮闘記
asashin227
0
140
現場主導の開発効率向上の仕組みづくり
asashin227
0
410
Other Decks in Technology
See All in Technology
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
520
SQL Server 2025 最適化されたロック
odashinsuke
0
120
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
2
180
[2026 Oracle Technical Deep Dive] AI時代のデータベース基盤をどう選ぶ? Exadata Database Serviceの選択肢と使い分け (2026年9月17日開催)
oracle4engineer
PRO
0
190
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
1
1.1k
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
140
AI 時代の Azure エンジニアリング ~ 私たちは何を磨き、何を任せるのか ~
chack411
1
360
Amazon Bedrock Agents ClassicからAmazon Bedrock AgentCoreへ移行した際、ガードレール設定が2箇所に割れた話
matsunobu
0
170
1万名の社員が使う認証基盤で どう信頼性を担保するか?
kairim0
0
180
Codex概要
ymiya55
0
230
全社共通データ基盤をつくる。ソニーのDatabricks活用とデータガバナンス設計の裏側
sony
0
300
[2026 Oracle Technical Deep Dive] オンプレミスDBのCloud移行アプローチ:移行計画に基づくメソッドとツールの選択 (2026年9月17日開催)
oracle4engineer
PRO
0
110
Featured
See All Featured
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
380
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Being A Developer After 40
akosma
91
590k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
750
Google's AI Overviews - The New Search
badams
0
1.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Documentation Writing (for coders)
carmenintech
77
5.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
750
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
540
Transcript
Foundation Models framework で 英会話アプリを作る話 〜 オンデバイスLLMで“無料・オフライン・プライベート”な英会話練習 〜 mobile.stmn #18
/ あさしん(@asashin227) mobile.stmn #18 / 2026-06-19
自己紹介 あさしん @asashin227 株式会社スタメン エンジニアリングマネージャ iOS開発 / Claude Code・AIエージェント /
自作キーボード 最近はオンデバイスAIで英会話アプリを試作中 今日は Apple の Foundation Models で英会話アプリを作った話を LT で mobile.stmn #18 / 2026-06-19 2
作ったもの:オンデバイス英会話アプリ 端末内のLLMと英語で会話して練習 会話 / ロールプレイ / ディベート の複数モード 会話を自動で添削:文法フィードバック・CEFRレベル推定 発音評価・ヒント・学習統計・カリキュラム
… 学習を一通り サーバーに会話を送らない(オンデバイス完結) SwiftUI製。AIは Foundation Models(オンデバイス)で動かしている mobile.stmn #18 / 2026-06-19 3
Foundation Models framework とは Apple が提供する オンデバイスLLM(iOS 26+ / Apple
Intelligence) LanguageModelSession で respond / ストリーミング / 構造化出力 / ツール 前提:iPhone 15 Pro 以降+Apple Intelligence 有効・実機必須 メリット 内容 無料 API課金なし(端末内で推論) オフライン 通信不要で動く プライバシー 会話が端末から出ない 英会話はターン数が膨大 → クラウドAPIだと課金がきつい。オンデバイスが効く mobile.stmn #18 / 2026-06-19 4
availability でデバイスを出し分け(実コード) SystemLanguageModel の可用性を判定して、AI機能の出し方を分岐。 switch SystemLanguageModel.default.availability { case .available: return
.foundationModels // オンデバイスAI が使える case .unavailable(let reason): switch reason { case .modelNotReady: // モデルDL 中 return .downloading case .appleIntelligenceNotEnabled, // AI 無効 .deviceNotEligible: // 非対応端末 return .cloudAPIOnly // → クラウドAPI へ退避 @unknown default: return .cloudAPIOnly } } 「実機必須/未対応端末」をここで吸収して画面・プロバイダを出し分け mobile.stmn #18 / 2026-06-19 5
設計①:system(instructions)と履歴を分離 会話のキャラ崩れ・指示誤応答を防ぐ正しい構造: LanguageModelSession(instructions:) に「モード別のシステム指示」を置く 履歴(Transcript)には実会話だけを入れる アンチパターン:指示文を“最後のユーザー発言”として履歴に混ぜる → 会話崩壊 「指示」と「会話」を混ぜない。generate (単発)と会話ターンも分ける
mobile.stmn #18 / 2026-06-19 6
最小コード:セッション生成 → 応答取得 import FoundationModels // ① セッション生成:system 指示は instructions
に(履歴とは分離) let session = LanguageModelSession( instructions: "You are a friendly English tutor. Reply in simple English." ) // ② ユーザー発話を渡し、モデルに考えさせて応答を受け取る let response = try await session.respond(to: userText) let reply = response.content // モデルの返答テキスト 逐次表示は session.streamResponse(to:) (累積スナップショットが返る) mobile.stmn #18 / 2026-06-19 7
@Generable とは?(guided generation) 「自由テキスト」ではなく “この型で答えて” とモデルに制約をかける仕組み。 構造体に @Generable → その型に沿った出力をモデルが生成
@Guide で各フィールドに説明・制約(値域・列挙など)を与える 受け取りは respond(to:, generating: 型.self).content → 型そのもので返る 利点 JSONパース不要(壊れたJSON・try? の失敗が原理的に起きない) 文字列プロンプトに「JSONで返して」と書かなくてよい 非対応モデルは LanguageModelError.unsupportedGenerationGuide を投げる(黙って劣化し ない) 出力の“形”をコードで保証=AI機能をただのSwiftの型として扱える mobile.stmn #18 / 2026-06-19 8
設計②:@Generable で型安全な構造化出力 構造体に @Generable を付けるだけで、型安全に直接受け取れる(JSONパース不要) @Generable struct GrammarFeedback { @Guide(description:
" 誤りがあれば true") var hasError: Bool var correction: String var explanation: String } // 呼び出し側:型を渡すと、その型で返ってくる let fb = try await session.respond( to: text, generating: GrammarFeedback.self ).content // → GrammarFeedback (誤り箇所・訂正・説明) 数秒かかるので 会話終了後に非同期実行 すればUX影響なし mobile.stmn #18 / 2026-06-19 9
一番ハマった:モデルが“非力” オンデバイスモデルは軽量 → 長く詰め込んだプロンプトほど精度が落ちる。 長い指示・大量の制約を一度に渡すと、指示を無視・的外れな回答に 試行錯誤の末の指針: プロンプトは短く・1タスク1指示に分割 否定の羅列をやめて肯定形で(NEVER… → こう振る舞う、と書く)
構造化出力は @Generable に任せ、指示文から外す 履歴は直近だけ(16件程度)に絞る 「賢いモデル前提の長プロンプト」をそのまま移植すると失敗 → 短く・絞るが正解 mobile.stmn #18 / 2026-06-19 10
対策の実コード:GenerationOptions 出力を短く・安定にして“非力”をカバー(アプリの実コード) 。 guard SystemLanguageModel.default.isAvailable else { throw … }
let options = GenerationOptions( temperature: 0.7, // 既定1.0 は高め → 会話は0.7 が落ち着く maximumResponseTokens: 200 // 長すぎる応答を抑える ) let response = try await session.respond(to: prompt, options: options) temperature / maximumResponseTokens で短く・安定に トークン計測 response.usage ・ model.contextSize も用意あり(本アプリは未使用・シン プル運用) 軽く絞るほどオンデバイスは安定する mobile.stmn #18 / 2026-06-19 11
その他のハマりどころ try? のサイレント失敗:AIが ```json 付きで返すと黙ってデフォルト値に落ちる → @Generable を使えばそもそもJSONパース自体が不要 temperature は既定1.0が高め
→ 会話は 0.7 が落ち着く テストでシミュレータが実モデルを実走し1呼び出し19秒 → Mockをクロージャ注入で0.1秒 に mobile.stmn #18 / 2026-06-19 12
拡張:同じAPIのまま Claude へ(ハイブリッド) Claude for Foundation Models で、同じ LanguageModelSession のままクラウドのClaude
に切替可能 使い分け:軽い会話=オンデバイス/重い処理・Web検索・大コンテキスト=Claude 429(レート制限)時はオンデバイスに退避、という分岐をアプリ側で自動化 ※ Claude for Foundation Models は iOS 27+(ベータ)が前提(要確認) プロバイダ切替UIは隠しつつインターフェースは温存 → 後から足せる設計に mobile.stmn #18 / 2026-06-19 13
コード:429 ならオンデバイスに退避 同じ LanguageModelSession API なので、モデルを差し替えるだけ。 // クラウド(Claude) 用セッション(本番は .proxied
で鍵を埋めない) let claude = LanguageModelSession( model: ClaudeLanguageModel(name: .sonnet4_6, auth: .proxied(headers: headers)) ) do { let reply = try await claude.respond(to: userText).content } catch LanguageModelError.rateLimited { // 429 → オンデバイスに退避(同じAPI ) let reply = try await onDevice.respond(to: userText).content } 重い処理はClaude/レート制限時はオンデバイス、を同じコードで mobile.stmn #18 / 2026-06-19 14
今後の展望:iOS 27 で広がる(WWDC 2026) オンデバイスAIの選択肢が純正で増える。今日の構成の“本命”が来る。 LanguageModel プロトコルが外部モデルに正式対応 → Claude/Gemini 等を同じAPIで(今
日のハイブリッドが本格化) PrivateCloudComputeLanguageModel (Apple純正サーバーモデル) APIキー不要・プロンプト非保存・32Kコンテキスト=オンデバイスで足りない時の純正 エスカレーション先 DynamicProfile :1セッションを状態で切替 → 会話/ロールプレイ/ディベートのモード切替 をきれいに システムツール(OCR / Spotlight=ローカルRAG)→ 教材・履歴を絡めた英会話へ ※ いずれも iOS 27(ベータ・2026 Fall 正式予定) 。要キャッチアップ mobile.stmn #18 / 2026-06-19 15
まとめ mobile.stmn #18 / 2026-06-19
まとめ Foundation Models=無料・オフライン・プライベートなオンデバイスLLM 英会話のような高ターンユースケースと相性が良い 効いた設計 system指示と会話履歴を分離(キャラ崩れ防止) @Generable で型安全な構造化出力(JSONパース不要) 同じAPIのまま Claudeへエスカレーションできる拡張余地
オンデバイスAI、英会話みたいな“喋り続ける”用途にハマります mobile.stmn #18 / 2026-06-19 17
ありがとうございました 質問・ツッコミ歓迎 / @asashin227 mobile.stmn #18 / 2026-06-19