WWDC Quick Look 💓 By SwiftGGTeam
Bring your app to Siri

Bring your app to Siri

元の動画を見る

ハイライト

Siri の底层アーキテクチャは iOS 18 で質的変化——Apple Intelligence の大規模言語モデルにより、開発者は @AssistantIntent(schema:) Macro で App Intent を定義済み Schema に適合させるだけで、Apple が訓練した自然言語理解能力を無料で利用可能(06:26)。


主要内容

過去の Siri 連携体験は良くありませんでした。ユーザーは固定フレーズを覚える必要があり、一語間違えると Siri は理解できません。開発者の選択肢も限られていました:SiriKit の定義済みドメイン(音楽、メッセージ)か、複雑な自然言語解析を自前で処理するか。

今年 Apple はルールを変えました。大規模言語モデルで Siri の言語理解層を再構築し、App Intent DomainsAssistant Schemas を導入。本質的な考え方:Apple のモデルは特定「形状」の Intent 向けに大量訓練済み——AppIntent をその形状に適合させれば、Siri の自然言語理解を無料で得られます。

Apple は 12 の Domain を公開、Books、Camera、Mail、Photos、Spreadsheets 等をカバー、100 以上の定義済み Schema を含む。Mail と Photos は iOS 18 リリース時に利用可能、残りは順次提供。app の機能がこれら Domain に該当すれば、連携コストは極めて低い——AppIntent の前に @AssistantIntent(schema:) Macro を 1 行追加するだけ。

操作に加え、Apple は In-App SearchSemantic Search を導入。前者で Siri が app 内検索を直接呼び出し結果ページへナビゲート;後者で Siri がコンテンツの意味を理解(「ペット」で検索すると猫犬蛇もヒット)、キーワード一致にとどまりません。


詳細

Assistant Schemas:1 行で自然言語理解

従来の AppIntent は大量のボイラープレートが必要:

struct CreateAlbumIntent: AppIntent {
    static var title: LocalizedStringResource = "Create Album"
    static var description = IntentDescription(
        "Creates a new photo album",
        categoryName: "Media"
    )

    @Parameter(title: "Album Name")
    var albumName: String

    @Parameter(title: "Photos")
    var photos: [PhotosAsset]

    var openAppWhenRun: Bool = true

    func perform() async throws -> some IntentResult & ReturnsValue<AlbumEntity> {
        // 実装ロジック
    }
}

Assistant Schema 使用後、コードは次のように簡素化:

@AssistantIntent(schema: .photos.createAlbum)
struct CreateAlbumIntent: AppIntent {
    @Parameter(title: "Album Name")
    var albumName: String

    @Parameter(title: "Photos")
    var photos: [PhotosAsset]

    func perform() async throws -> some IntentResult & ReturnsValue<AlbumEntity> {
        // 実装ロジック
    }
}

キーポイント:

  • @AssistantIntent(schema:) Macro 宣言後、titledescriptioncategoryName 等のメタデータは不要——Schema の形状が定義済み
  • openAppWhenRun 等のプロパティも自動処理
  • perform メソッドは完全に開発者の制御下——Apple は入出力形状のみ定義、実装は開発者

柔軟性が必要ならオプションパラメータを拡張:

@AssistantIntent(schema: .photos.createAlbum)
struct CreateAlbumIntent: AppIntent {
    @Parameter(title: "Album Name")
    var albumName: String

    @Parameter(title: "Photos")
    var photos: [PhotosAsset]

    // 拡張パラメータ——Schema 未定義の属性
    @Parameter(title: "Album Color")
    var albumColor: AlbumColor?
}

Assistant Entity:Siri が理解できるコンテンツに

AppIntents の Entity にも対応 Macro:

@AssistantEntity(schema: .photos.asset)
struct AssetEntity: AppEntity {
    var id: PersistentIdentifier
    var title: String
    var creationDate: Date
    var location: Location?
    var hasSuggestedEdits: Bool  // Schema が要求する属性

    static var typeDisplayRepresentation: TypeDisplayRepresentation = "Asset"
    static var defaultQuery = AssetQuery()
}

キーポイント:

  • コンパイラが Entity が Schema 形状に適合するかチェック——hasSuggestedEdits 欠如はコンパイル失敗(12:18
  • Xcode がコードスニペットで必須属性を自動入力
  • オプション属性の拡張も可能

Assistant Enum:列挙型を公開

@AssistantEnum
struct AlbumColor: AppEnum {
    case red, blue, green, yellow

    static var typeDisplayRepresentation: TypeDisplayRepresentation = "Color"
    static var caseDisplayRepresentations: [AlbumColor: DisplayRepresentation] = [
        .red: "Red", .blue: "Blue", .green: "Green", .yellow: "Yellow"
    ]
}

キーポイント:

  • Assistant Enum は列挙 case の形状を制限しない——完全に自由定義
  • 1 行 Macro で必須設定を完了

Siri リクエストのライフサイクル

Assistant Schemas の動作を理解するにはリクエスト全体のフローを見る(05:34):

  1. ユーザーリクエスト → Apple Intelligence が処理
  2. モデル推論 → Schema 形状に基づき一致 Intent を予測
  3. ツールボックスルーティング → 該当 Schema に適合する全 AppIntents から選択
  4. 実行 → AppIntent の perform メソッドを呼び出し
  5. 結果提示 → ユーザーに返却

AppIntent が Schema に適合することで、モデルが「推論」可能。Schema 形状が重要な理由——モデルは特定形状向けに訓練されている。

In-App Search:app 内検索を呼び出し

ShowInAppSearchResultsIntent を基に、Apple は System Domain の Search Schema を追加:

@AssistantIntent(schema: .system.search)
struct SearchAssetsIntent: AppIntent {
    @Parameter(title: "Search Criteria")
    var criteria: String

    func perform() async throws -> some IntentResult {
        // app 内検索結果ページへナビゲート
        navigationManager.openSearch(with: criteria)
        return .result()
    }
}

キーポイント:

  • ユーザーは「[app 名] で自転車を検索」と言える(16:24
  • Siri が app を直接開き検索結果 UI へナビゲート
  • 現時点は Shortcuts でテスト可能、将来 Siri 音声対応はソフトウェア更新で

Semantic Search:キーワードを超えた理解

Apple Intelligence で Siri が意味を理解:

// ユーザーが「ペットの写真を探して」と言う
// Siri は「ペット」という語だけでなく、猫、犬、蛇などの画像も見つける

この機能をサポートするには Entity を IndexedEntity としてマーク(19:56):

@AssistantEntity(schema: .photos.asset)
struct AssetEntity: IndexedEntity {  // IndexedEntity に適合
    // ...
}

キーポイント:

  • IndexedEntity プロトコルでコンテンツがセマンティックインデックスに入る
  • Siri は「ペット」に猫犬蛇、「風景」に山川湖海を理解
  • コンテンツ発見後、Siri が直接操作を実行(共有、編集等)

テストフロー:Shortcuts で検証

現段階(iOS 18 リリース時)、Assistant Schemas は主に Shortcuts app でテスト(19:23):

  1. Schema に適合する全 AppIntent が Shortcuts アクションリストに自動表示
  2. ショートカットを作成してパラメータ渡しと実行結果をテスト
  3. 将来の Siri 音声対応はソフトウェア更新で提供

重要ポイント

1. 写真/メディア系 app に Siri サポートを追加

写真、動画、メディアを扱う app なら、Photos Domain の Schema で低コストに Siri 連携可能。例:「昨日撮った写真をカリフォルニアアルバムに追加」「この写真にフィルターを適用」。ユーザーは音声で複雑な操作を完了、多段タップ不要。

始め方:

  • 機能が Photos Domain の 10 以上の Schema(CreateAlbum、OpenAsset、SetFilter 等)に該当するか確認
  • 既存 AppIntent に @AssistantIntent(schema:) Macro を追加
  • Shortcuts でパラメータと実行結果を検証

2. app 内検索を Siri に公開

検索機能がある app なら In-App Search Schema で Siri が直接呼び出し可能。メール app(「自転車に関するメールを全部探して」)、メモ app(「プロジェクト計画を検索」)——ユーザーは app を開いて手入力する必要なし。

始め方:

  • app に検索 UI と API があることを確認
  • .system.search Schema に適合する AppIntent を作成
  • perform が検索結果ページへ正しくナビゲートすることを確認

3. IndexedEntity でセマンティック検索可能に

ユーザー生成コンテンツ(写真、メモ、ドキュメント)がある app なら、Entity を IndexedEntity としてマークすると Siri がコンテンツの意味を理解。「旅行の写真を探して」と言われても、写真に「旅行」タグがなくても、場所や時間等の意味から推論可能。

始め方:

  • AppEntity で IndexedEntity プロトコルにも適合
  • 豊富な属性(場所、時間、人物、タイプ)を提供
  • Spotlight 検索が統合されていることを確認

関連セッション

コメント

GitHub Issues · utterances