-- Views
July 22, 26
スライド概要
2026年7月22日に Apple Japan オフィスで開催された [try! Swift Tokyo WWDC Recap 2026](https://luma.com/tryswift-wwdc26?tk=l0NJkl) での発表資料です。
フリーランスiOSエンジニア 「エンジニアと人生」コミュニティ主宰
AI系新機能をぜんぶ試す #WWDC26 try! Swift Tokyo WWDC Recap 2026
堤 修一 • フリーランスiOSエンジニア • ID: shu223 • GitHub • Docswell(スライド) • Zenn, Qiita, note, はてな ブログ, X (Twitter) • YouTube, Podcast • 著書: 商業出版4冊、個人出 版多数
何を話すか?
AI時代の技術勉強会のトークどうするか問題 • 資料を渡せばAIが実装してくれる • 翻訳ツールの充実によりドキュメントや動画の「言語の壁」 もほぼ皆無 → ドキュメントやセッション動画等の一次情報で十分
AIに頼む「前」のギャップ • 知らないことはAIに頼めない(頼もうという発想がない) • 知っていても、「ここでこれが使える」と思わなければAIに 頼まない • 何がどこまでできるかを知らず「このユースケースには合 わないだろう」「どうせ精度が悪くて使えないだろう」等 と無意識に選択肢から落とす
本日のテーマ
「AI系新機能をぜんぶ試す」 Foundation ModelsやCore AI等のAI系新機能を実機デモベースでご紹介 • 何がどこまでできて何ができないのか • どれぐらい動くのか(あるいは動かないのか) → AIに依頼する「前」に必要な前提知識と手ざわりを持ち帰っていただく
話さないこと • APIの使い方の詳しすぎる解説 • セッション動画のURLを渡してAIに質問すれば答えてくれそうなこと
お品書き • 画像理解 • Core AI • Private Cloud Compute • Image Playground • Evaluations • 3Dオブジェクトトラッキング • Spotlight × FM でLLM検索 • Tap to Segment
画像理解
画像入力 • Foundation Modelsの新機能 • 昨年まで:テキストin/outのみ • iOS 27〜: 画像を渡せるようになった // UIImageをそのまま添付できる let prompt = Prompt { "Generate a caption for this image" Attachment(image) } let response = try await session.respond(to: prompt)
画像ベースのツール
Visionベースのツール 1 • BarcodeReaderTool • OCRTool let session = LanguageModelSession( tools: [BarcodeReaderTool(), OCRTool()] ) 1 実装もFoundation ModelsではなくVisionフレームワーク内にある
カスタムツール 画像引数を取る独自ツールも定義可能 struct PlantIdentifierTool: Tool { @Generable struct Arguments { var image: ImageReference } func call(arguments: Arguments) async throws -> String { let imageReference = arguments.image let transcript = Transcript(history) guard let imageAttachment = imageReference.resolve(in: transcript) else { ... } let image = try imageAttachment.pixelBuffer() return classifyPlant(image) } }
! 画像理解デモ
WWDC26-237「画像理解の新機能」内に出てきた事例を実装 • 実際のプロンプトは不明なので想 • 入力写真はスライドから切り出し たものを使用 • デモとしてわかりやすいように日 像で作成 本語を利用
• アジェンダ作成
• キャプション生成
• 部屋の内装提案
• 冷蔵庫の写真からレシピ提案
• チラシ読み取り(OCRTool + BarcodeReaderTool)
• 植物識別(カスタムツール)
デモ
• キャプション生成
• 冷蔵庫の写真からレシピ提案
• チラシ読み取り(ツール呼び出しあり/なし)
• 植物識別(カスタムツール)
! 試してみたメモ • iOS 27 beta では言語を英語、国をアメリカにしないとApple Intelligenceが 有効化できない → Foundation Modelsが使えない 3 • 3 しかし日本語でもちゃんと動く • supportedLanguages: 日本語を含む23 言語 • supportsLocale(ja-JP): true beta 3, 4で確認
• • 性能は悪くない(速度/内容) • 十分な回答が返ってきた • 冷蔵庫レシピ、植物識別の結果はイマイチ Tool callingは不安定? • ツールありだとエラー(実装の問題の可能性もあり) • ツールなしでも文字, QRコード読めてしまった
• 実機だとコンテキストサイズ 8192トークンと出る (SystemLanguageModel.default.contextSize) • セッションでは同一とどこかで言っていた気がするが、betaのどこかで 引き上げられた? • → beta 3で引き上げられたとのこと(by Apple Japanの武石さん)
Private Cloud Compute
オンデバイスモデル vs PCC オンデバイス PCC プライバシー ✅ ✅ 同等 オフライン ✅ ❌ ネット必須 利用制限 なし ユーザーごとに1日制限 コンテキスト 4K 32K リーズニング — ✅ 3段階
実装: model を差し替えるだけ let session = LanguageModelSession( model: PrivateCloudComputeLanguageModel(), tools: [tool], instructions: instructions ) • Generable もツール呼び出しも同じように動く • 利用申請と、Capabilityの追加(entitlements追加)が必要
Reasoning • 応答を生成する前に考える • Light / Moderate / Deep の3段階(respond 呼び出し時に指定) • リーズニングもトークンを消費し、コンテキスト制限に含まれる
! PCCデモ 1: 記事要約 WWDCセッション 4 内に出てきた記事 要約の事例を実装 (右はセッション内のデモ/非公開) 4 WWDC26-319「プライベートクラウドコンピューティングによるApple Foundation Modelの活用」
! PCCデモ 2: 画像理解 with PCC 画像理解デモでPCCを使う
• 冷蔵庫の写真からレシピ提案
• 植物識別(カスタムツール)
! 試してみたメモ • PCC利用のwaiting listは申請したら即acceptのメールが届い た(先週ぐらいの話) • 「冷蔵庫の中身からレシピ生成」「植物識別」といった画像 理解タスクでは明らかにオンデバイスモデルより性能良し
• マジで何の苦労もなくPCCに切り替えられて便利 • リミットだけが不安・・・具体的な上限値はドキュメント・ セッション・グループラボどこにも言及されてなさそう?
• 正確なコンテキストサイズは 32768 トークン (SystemLanguageModel.default.contextSize) • リーズニング効いてるのかよくわからない... • タスクが簡単すぎる?
Evaluations
評価を回す新フレームワーク 10 • LLM機能は同じ入力でも出力が毎回変わる → 「期待値と一致したらgreen」のユニット • → データセットに対して生成をまとめて実行し、品質を数値で測定する(= 評価 / テストが書けない eval) • 10 測り方 • 数値メトリクス: コードで計算できる値(所要時間、件数、形式チェック等) • モデルジャッジ: 別の大モデルが出力を採点し、期待値(正解)を書けない品質を 測る WWDC26-298「Evaluationsフレームワークについて」
デモ1:記事要約デモのリーズニングレベル比較 • リーズニングレベル(light / moderate / deep)で要約品質がどう変 わるかを評価 • 要約に期待値(正解)はない → モデルジャッジ3軸(忠実性 / 網羅 性 / 簡潔さ)で評価
実装
struct SummarizationEvaluation: Evaluation {
let reasoningLevel: ContextOptions.ReasoningLevel?
// データセット: 記事本文のみ。要約に「正解」はないので expected なし
var dataset: ArrayLoader<ModelSample<Output>> {
ArrayLoader(samples: articleBodies.map {
ModelSample(prompt: $0, expected: nil)
})
}
// 評価対象: アプリと同じ経路で要約を生成
func subject(from sample: ModelSample<Output>) async throws -> ModelSubject<Output> {
let output = try await ArticleSummarizationService.summarize(
articleBody: sample.promptDescription,
model: .privateCloudCompute, reasoningLevel: reasoningLevel)
return ModelSubject(value: output)
}
let faithfulness = ScoreDimension("Faithfulness", ...)
// モデルジャッジ3軸
}
公式サンプル BookTracker • FMで本にタグを自動生成する機能を、同 梱データセットに対して一括評価 • Test Report に定量Evaluatorの合否 + モ デルジャッジ(PCC上の大モデルが Relevance / Usefulness をスコア + 根拠 テキスト付きで採点) • プロンプト改訂の良し悪しを勘ではなく 数値で比較 — LLM機能の回帰テストに相 当
実装
struct BookTaggingEvaluation: Evaluation {
// 評価対象: FMでタグ生成する自アプリのロジック
func subject(from sample: ModelSample<BookTags>) async throws -> ModelSubject<BookTags> {
let result = try await BookTaggingService.generateTags(for: sample.promptDescription)
return ModelSubject(value: result)
}
// データセット: レビュー文 × 期待タグのペア
var dataset = ArrayLoader(samples: Book.sampleBooks.map { book in
ModelSample(prompt: book.review, expected: BookTags(tags: book.tags))
})
let tagCount = Metric("Tag Count")
// 定量メトリクス
let relevance = ScoreDimension("Relevance", ...)
}
// モデルジャッジ
Spotlight × FM でLLM検索
SpotlightSearchTool • アプリのSpotlightインデックスをFoundation Modelsが検索ツー ルとして使える • = オンデバイスRAGが標準機能に 「最もリクエストの多かった機能の1つ」 6 6 セッション246「Core Spotlightを利用したLLM検索」
! デモ: WWDC26セッション検索アプリ WWDC26の全138セッションを インデックスして、自然言語でAI に質問できる • 「Core Spotlight のセッショ ンはどれ?」→ このデモの元 セッション自身がヒット
実装 // アプリの Spotlight インデックスを FM の検索ツールに let configuration = SpotlightSearchTool.Configuration( sources: [.coreSpotlight(source)], guide: .init(level: .focused(.items), format: .compact) ) let tool = SpotlightSearchTool(configuration: configuration) let session = LanguageModelSession( tools: [tool], instructions: instructions )
Core AI
要はCore MLの進化版 • ・・・とはセッション内でもドキュメント内でもグループラボでも 明言はしていない 7 • が、そう解釈しました 7 関連記事:「Core AIとCore MLの違い」 についてのAppleの公式見解
apple/coreai-models 人気OSSモデル22種の変換レシピ + 実行用Swiftパッケージ + CLI • LLM: Qwen / Gemma 3 / Mistral / GPT-OSS 20B • 画像生成: Stable Diffusion / FLUX.2、VLM: Qwen3-VL • 画像系: SAM 3 / YOLOS / 深度推定 / 超解像 等、音声: Whisper 等
変換は1コマンド git clone https://github.com/apple/coreai-models && cd coreai-models # 物体検出(YOLOS) uv run models/yolo/export.py --model hustvl/yolos-tiny # LLM(Qwen3 0.6B、iOS向け 4/8bit 圧縮プリセット) uv run coreai.llm.export qwen3-0.6b --platform iOS
変換の所用時間 ・変換後サイズ 8 8 モデル 変換時間 変換後サイズ EDSR(超解像 ×2) 27秒 5.3MB YOLOS-tiny(物体検出) 39秒 23MB Depth Anything 3(深度推定) 22秒 101MB YOLOS-base(f32 / f16) 42秒 / 8秒 488MB / 244MB Qwen3 0.6B(LLM、4/8bit) 4分50秒 454MB Qwen2.5 1.5B(LLM、4bit) 4分47秒 896MB 時間は重みDL込み。MBP M4 Max, メモリ128GB使用。
LLMは Foundation Models にプラグインでき る let model = try await CoreAILanguageModel(resourcesAt: modelURL) let session = LanguageModelSession(model: model) let response = try await session.respond(to: prompt) • オンデバイスAFM / PCCと同じ LanguageModelSession • respond側のコードは共通
! Core AIデモ 1: Qwen記事要約 PCCデモの要約アプリに第3の選択肢「Qwen (Core AI)」を追加 case .coreAIQwen: let model = try await CoreAILanguageModel(resourcesAt: bundleURL) return LanguageModelSession(model: model)
! Core AI デモ2: SAM 3 テキスト指定セグメンテーション • 任意の語で該当物体の全インスタン スを切り抜く(Meta、848M) • 標準API(Vision等)に相当する機能 はない・・・人物 / 自動前景 / 点・ 矩形指定(Tap to Segment)まで • モデルは apple/coreai-models か ら、サンプルアプリは CoreAIModel-Zoo より
実装 let segmenter = try await ImageSegmenter(resourcesAt: bundleDir) let response = try await segmenter.segment(image: cgImage, prompt: "human")
! Core AIデモ3: 物体検出(YOLOS) • モデルは apple/coreaimodels より • 同リポジトリに同根のSwiftパ ッケージで実行
実装 let detector = try await ObjectDetector(resourcesAt: url.path) let detections = try await detector.detect(image: cgImage) // → boundingBox / label(COCO)/ confidence
その他に用意したデモ • 深度推定(Depth Anything 3): 写真1枚から深度マップ。単 眼深度推定の標準APIは無い 12 • 超解像(EDSR ×2): 5.3MBのモデルで写真を2倍拡大 12 Vision / Core Image / AVFoundation / ARKit / RealityKitの公式ドキュメントで確認(既存の深度APIはLiDAR等ハードウェア計 測値の取得)
Image Playground
今年のアップデート 13 • 画像生成モデルが一新(生成はPCC上で実行) • フォトリアル(写実)な画像も生成できるように(スタイル .any が追加 14) • サイズ指定 SizeSpecification.closest(to:) • ImagePlaygroundOptions(iOS 26.4):サイズ・パーソナライズ等をまとめて 渡す新オプション型 • パーソナライズ制御 ImagePlaygroundOptions.Personalization(iOS 26.4) 13 セッション375「高品質な画像の生成」 14 フォトリアルの専用スタイルは無く、未指定(.any)またはテキストでスタイル指定して出す
! デモ: 全機能ツアーアプリ • 公式サンプルなし • テーマ + スケッチの同時指定、スタ イル比較(写実 vs アニメ)
生成例: 同じスケッチから写実 / アニメ
実装 Button("画像を生成") { showingPlayground = true } .imagePlaygroundSheet( isPresented: $showingPlayground, concepts: concepts, // テキスト / 抽出 / スケッチ / 画像を併用可 sourceImage: sourceImage, onCompletion: { url in record(url) } ) .imagePlaygroundOptions(options) .imagePlaygroundGenerationStyle(defaultStyle, in: allowedStyles)
3Dオブジェクトトラッキング
何年も待っていたアップデート 2018年(ARKit 2が登場した年)のツイート:
• ARWorldTrackingConfiguration に trackingObjects 追加 • Create MLで学習 • 学習データは大量の2D画像ではなく USDZモデル1個 let configuration = ARWorldTrackingConfiguration() configuration.trackingObjects = [referenceObject] // iOS 27のObject Tracking // configuration.detectionObjects(iOS 12〜のObject Detection) session.run(configuration) セッション283「visionOSのオブジェクトトラッキングの機能強化」
! 3Dオブジェクトトラッキ ングデモ • 公式サンプル(visionOS向け)同梱 の Apple_Magic_Keyboard.reference object を流用 • 旧 detectionObjects(iOS 12〜) とアプリ内で切り替え比較 — 動かし たとき、新APIは追従し、旧APIは追 従しない(実測で目視確認済み)
Tap to Segment
• タップ・なぞりの粗い指示で対象物を切り抜く対話的セグメンテーショ ン • 公式サンプルでタップ / 矩形 / ラッソ / スクリブルの4入力方式が試せる // タップ点を種にした対話的セグメンテーション var request = GenerateIterativeSegmentationRequest(seedPoint: point) try request.addIncludedPoint(point) // 追いタップで対象を追加 try request.addExcludedPoint(point) // ダブルタップで除外 let handler = ImageRequestHandler(cgImage, orientation: orientation) // → 切り抜きマスクが返る
ご清聴ありがとうございました!