Citrus-Field TECH BLOG.

フリーランスのITエンジニア、iOSアプリの個人開発、業務委託(小売、ヘルスケア)を行っています。お仕事については、メールもしくはXのDMでご相談ください

(和訳)WWDC24 Day2-1 'Bring your app to Siri' (アプリをSiri対応にするための方法)

アプリをSiri対応にするための方法

www.youtube.com

セッション「Bring your app to Siri」へようこそ。

私はSiriのソフトウェアエンジニア、ダニエル・ニーマイヤーです。

今日は、Siriにあなたのアプリを持ち込む方法についてお話しします。

まず、そのためのフレームワークについて説明し、次にApple Intelligenceの導入による今年の新機能について説明します。

Siriがあなたのアプリケーションでアクションを実行できるようにする新しいAPIも紹介します。

そして、あなたが直接統合できるエキサイティングなパーソナル・コンテキスト機能をいくつか紹介します。

最後に、本日のセッションの重要なポイントをまとめます。

なぜアプリをSiriと統合する必要があるのでしょうか?

Siriを使えば、ユーザーはデバイスのどこにいても、あなたのアプリでアクションを起こせます。

Siriは、アプリを見ている人に素早くアクションを実行させるのにも最適です。

既存のフレームワークであるSiriKitとAppIntentsを使って、これを実現する方法を探ってみましょう。

私たちはiOS 10でSiriKitを導入しました。

SiriKitを使うと、デベロッパは、Siriが提供するインテントを使用して、Siriにお願いしているアクションを実行できるようになります。

例えば、音楽の再生やテキストメッセージの送信などです。

SiriKitのドメインは、この種の機能を有効にするための最良の方法です。

iOS 16では、私たちはAppIntentsを導入しました。

あなたのAppをSiri、ショートカット、Spotlightなどと統合するための新しいフレームワークです。

あなたのアプリケーションが既存のSiriKitドメインと重複しない場合、AppIntentsはあなたにぴったりのフレームワークです。

AppIntentsの詳細については、今年のビデオ「Bring your app's core features to users with App Intents」をご覧ください。

今年は、Apple IntelligenceのおかげでSiriに大きな改良が加えられています。

新しいLarge Language Modelsによって、Siriの体験はこれまで以上に向上しています。

まだSiriとアプリケーションを統合していないなら、今がチャンスです。

Apple Intelligenceによって、私たちはSiriを3つの重要な方法で大きく前進させるために必要な基盤機能を手に入れました:

第1に、Siriはより自然な音声であなたに話しかけられるようになりました。

第2に、Siriはより文脈に即した、よりパーソナルな存在になりました。

Apple IntelligenceがSiriに画面上の認識を提供するので、Siriはあなたが見ているものを理解し、それに対してアクションを起こせるようになります。

そして第3は、より豊かな言語理解のおかげで、より自然にSiriに話しかけることができるようになったことです。

たとえ言葉につまづいても、Siriがあなたの言いたいことを理解します。

すでにSiriKitを採用しているアプリケーションには、これらの改善が自動的に無料で提供されます。

しかし、私たちはそれだけにとどまりたくありませんでした。

Siriがあなたに代わって、アプリケーション内やアプリケーション間でより多くのアクションを起こせるようにするためです。

私たちは、膨大なアプリの世界をApple Intelligenceにつなげる手段として、App Intentsフレームワークに深く投資することで、これを実現しました。

その結果、私たちはApp Intentドメインと呼ばれる一連の新しいAPIを構築しました。

それをお見せしましょう。

ドメインは、Books、Camera、Spreadsheetsなど、特定の種類の機能のために設計されたApp IntentsベースのAPIの集まりです。

iOS 18では、12のドメインをリリースします。

メールと写真は今日から試すことができます。

今後数ヶ月の間に、さらに多くのドメインをリリースする予定です。

これらの領域には、柔軟な音声インタラクションをサポートするためにトレーニングされ、テストされた、幅広い新しいアクションが含まれています。

今年、Siriは12のドメインにわたって100以上の異なるアクションをサポートするようになりました。

これらを使ってできることの一例として、Darkroomのようなアプリは、「フィルタを設定」インテントを使用して、

ユーザーに「昨日メアリーを撮った写真に映画のようなプリセットを適用します。

もし、あなたのアプリがこれらのドメインでカバーされる機能を持っているなら、これらの新しいAPIはあなたのために設計されました!

そして、これはほんの始まりに過ぎません。Siriは今後、より多くのアプリを理解し、より多くのアクションを取ることができるようになるでしょう。

それでは、アシスタントスキーマと呼ばれるものを使って、App Intentドメインのアクションを構築する方法をご紹介しましょう。

Schema(スキーマ)とは難しい言葉なので、定義しておきましょう。

辞書では、クラスのすべてのメンバーに共通する概念、一般的または本質的な型または形式と呼ばれています。

Siriの文脈でその意味を紐解いてみましょう。

Apple Intelligenceは、今お話ししたような領域でSiriに新しい機能を与える基礎モデルによって支えられています。

これらのモデルは、特定の形をした意図を予想するようにトレーニングされています。

この形状を私たちはSchema(スキーマ)と呼んでいます。

そしてアシスタントスキーマはAPIと呼ばれるものです。

適切な形状のアプリ・インテントを作成すれば、私たちのトレーニングの恩恵を受けることができ、自然言語の複雑さを心配する必要はありません。

必要なのはperformメソッドを書くことだけで、あとはプラットフォームに任せておけばいいのです。

今年は、写真の作成やメールの送信など、100種類以上のインテントのスキーマを構築しました。

これらはそれぞれ、そのインテントを採用するすべての人に共通するインプットとアウトプットのセットを定義しています。

これが、私が意味する「形」です。

このジオメトリの真ん中に、あなたのアプリに適したエクスペリエンスを定義するための、クリエイティブな自由をフルに活用した実行メソッドがあります。

では、アシスタントスキーマの動作を示すために、Apple Intelligenceを使ったSiriリクエストのライフサイクルを説明しましょう。

すべてはユーザーリクエストから始まります。

このリクエストはApple Intelligenceに送られ、モデルで処理されます。

Appleのモデルはスキーマを推論するために特別にトレーニングされており、Apple Intelligenceはユーザーのリクエストに基づいてスキーマを予測することができます。

適切なスキーマが選択されると、リクエストはツールボックスに送られます。

このツールボックスには、スキーマ別にグループ化されたデバイス上のすべてのアプリケーションのAppIntentsコレクションが含まれています。

インテントを Schema に適合させることで、モデルにそれを推論する能力を与えます。

最後に、AppIntentを呼び出してアクションを実行します。

結果が表示され、出力が返されます。

ダイアグラムについてはもう十分です。

コードに飛びましょう。

これは、フォトアルバムを作成するためのAppIntentです。

スキーマに準拠することは、AppIntent宣言の前にSwiftマクロを追加するのと同じくらい簡単です。

このように!

この新しいマクロは、常に AppIntent ドメインにバインドされている Schema の引数を取ります。

この例では、photos がドメインで、createAlbum が Schema です。

スキーマの形状はコンパイル時に既に分かっているので、AppIntent に追加のメタデータを提供する必要はありません。

つまり、ここでのコードは、さらにこう減らすことができます!

Schema 準拠のインテントは、その形状が既知であるため、コードで定義するのが簡単です。

とはいえ、シェイプの柔軟性は必ずしも高いとは限りません。

しかし、ご心配なく。この場合は、円を四角形にすることができます。

アシスタントインテントは、必要に応じてオプションのパラメータで拡張することもできます。

シェイプに柔軟性を与えることができます。

AppIntents フレームワークには、アクションを構築するためのインテントだけが含まれているわけではありません。

アプリの概念をモデリングするためのエンティティも含まれています。

このインテントから返される AlbumEntity のように。

また、AppEntitiesをSiriに公開するための新しいマクロも追加されました。

インテントと同様に、この新しいタイプを採用するのは、AppEntity宣言にコードを1行追加するだけと簡単です。

アシスタントEntityは、事前に定義されたシェイプの恩恵を受けることもできます。

その結果、より簡潔なApp Entityの実装が可能になります。

また、アシスタントインテントのように

アシスタントエンティティは、必要に応じて新しいオプションプロパティを宣言することで、その形状を大きく拡張することもできます。

必要であれば、新しいオプションのプロパティを宣言することで、その形状をはるかに超える拡張もできます。

私のAlbum EntityのAlbum Colorプロパティのように。

最後に、enum(列挙型)も忘れてはいけません。

AppEnum を Siri に公開するのは、Entity や Intent と同じくらい簡単です。

新しいAssistantEnumマクロをenum宣言に追加するだけで、あとは私たちが処理します。

アシスタント列挙型は、他の列挙型とは異なり、列挙型のケースに形状を指定しません。

実装時に完全な表現力が得られます。

さて、新しいAssistant Schemaマクロを紹介しましたが、Xcodeのデモはいかがでしょうか?

私は、デバイス上の写真を表示して整理するためのメディアライブラリアプリに取り組んでいます。

私のアプリをSiriと統合してアクションを実行する方法をお見せしましょう。

このアプリは、サンプルコードのダウンロードも可能です。

私のアプリを起動すると、私のデバイスで利用可能な写真とビデオの両方を含む美しいギャラリーに入ります。

写真をクリックするとフルスクリーンで見ることができます。

また、上部のメニューをクリックすると、お気に入りや共有などのアクションを実行できます。

では、Xcodeに切り替えて、アプリのコードをお見せしましょう。

私のアプリには2つの基本的なモデルタイプがあります。

AssetsとAlbumsです。

アセットがどのように定義されているかをお見せしましょう。

Assetはライブラリ内の写真やビデオを表すオブジェクトです。

アセットにはタイトルやcreationDateなど多くのプロパティがあります。

ファイルの一番下に、アセットクラスをモデルにしたAppEntityを返すentityという計算プロパティがあります。

ご覧のように、このエンティティには、私のモデルから直接ハイドレートされた多くのプロパティが含まれています。

私の AssetEntity がどのように定義されているかを確認するために、[Jump to Definition] を選択します。

このエンティティは、ライブラリ内の指定されたアセットをモデル化します。

タイトル、作成日、場所など、多くのプロパティを公開しています。

エンティティは、アプリのコンテンツをモデル化する素晴らしい方法です。

App Intentsと組み合わせることで、システムがエンティティに対してアクションを実行できるようになります。

アクションといえば、私はすでにアプリで特定のAssetEntityを開くためのApp Intentを書きました。

ここで、OpenAssetIntent は、ターゲットパラメータ、開くアセット、およびこのアクションを実行するために必要ないくつかのアプリ依存関係(アプリの Navigation Manager など)を受け入れます。

このIntentをSiriに公開し、自分のアプリをApple Intelligenceと統合する方法を紹介しましょう。

今年のApp Intentドメインでは、新しいオープンフォトスキーマを採用することでこれを実現できます。

新しいAssistant IntentマクロをApp Intent宣言に追加してみましょう。

入力し始めると、コードに沿った完全な提案が表示されます。

最初にphotosドメインを選び、次にopenAssetスキーマを選びます。

これだけです。

アプリをビルドしてみましょう。

この新しいエラーは何ですか?

SiriにIntentを公開するときは、関連するエンティティや列挙型も公開する必要があります。

このエラーを修正するために、Asset Entityの定義に飛びましょう。

エンティティを公開するのを忘れていたようです。 新しいAssistant Entityマクロを宣言に追加して修正しましょう。

入力し始めると、再びオートコンプリートで写真が表示されました。

このエンティティのスキーマとして asset を選択できるようになりました。

もう一度ビルドしてみましょう。

この新しい適合性を追加することで、以前のエラーは修正されたようです、

しかし、この新しい適合性を追加することで、私のエンティティで新しいビルドの失敗が発生しました。

私たちのモデルは、特定の形状のエンティティを予想するようにトレーニングされています。

私のエンティティをスキーマに適合させることで、コンパイラは私のエンティティの形状を検証する追加チェックを実行できるようになります。

この場合、hasSuggestedEdits のプロパティが足りないようです。

今すぐ追加しましょう。

ほら、欠落していたプロパティを追加することで、私のエンティティはSchemaの形状と一致し、ビルドが成功しました。

コンパイラは、既存の App Intents を Schema に適合させるための素晴らしいツールです。

また、ゼロから始める場合は、必要な形状を埋めるコード・スニペットも公開しています。

私のモデルには、写真をお気に入り登録するメソッドがすでにあります。

これを使用して新しいApp Intentを作成し、この機能をSiriに公開しましょう。

AssetIntentsファイルに戻りましょう。

今回は、代わりにテンプレートを使いましょう。

このプレースホルダーを実際のエンティティタイプに置き換えるだけです。

アプリの依存関係を取得します。

そしてperformを実装します。

これで完了です。

コンパイラーは満足し、私のビルドは成功しました。

デモでお分かりのように、Assistant Schemaを使用すると、既存のApp Intentsに対する追加のビルド時検証が可能になります。

この検証により、スキーマの実装がモデルがトレーニングされたシェイプと一致することが保証されます。

また、Xcodeのスニペットも公開しているので、ゼロからスキーマを構築するのがさらに簡単になります。

それでは、Shortcutsアプリでこれらをテストして実行する方法について説明しましょう。

他のApp Intentと同様に、Schemaに準拠したApp Intentは、自動的にShortcutsアプリのアクションとして表示され、Shortcutsエコシステム全体に接続されます。

これには、個人のオートメーション、ホーム画面のショートカットなどが含まれます。

Shortcuts Appは、Assistant Schemaをテストするのに最適な方法です。

将来的には、これらの同じインテントとエンティティが自動的にSiriと連動するようになります。

前のデモのOpenAssetIntentとUpdateAssetIntentを覚えていますか?

Shortcuts Appを使ってこれらのアクションを実行し、エンドツーエンドでテストする方法をお見せしましょう。

まず、Shortcutsアプリを起動します。

一番上のプラスボタンをタップして、新しいショートカットを作成します。

次にAssistantSchemasをタップして、アプリからのアクションをフィルタリングします。

まずは「写真を開く」で保存してみましょう。

保存しましょう。

新しいタイルができました。

これをタップすると、先ほど見たOpen-Asset-Intentが実行されます。

いくつかのオプションが表示されます。

そのうちの1つを選んで、自分のアプリで開くことができます。

ご覧の通り、アクションが実行され、私のアプリは右の写真に移動しました。

デモで見たように、ショートカットは今日アクションをテストするのに最適な方法です。

将来的には、同じインテントが自動的にSiriでも使えるようになります。

私のアプリでSchemaに準拠したアクションをビルドして検証したので、パーソナルコンテキストをこっそりお見せできるのが楽しみです。

Apple Intelligenceは、Siriにあなたのパーソナルコンテキストの豊富な理解を提供します。

つまりSiriは、安全でプライベートな方法で、あなたのデバイス全体で利用可能なすべての情報を検索し、推論することができます。

アプリ内検索から始めましょう。

既存のShowInAppSearchResultsIntentの上に構築されたこの機能により、Siriはアプリケーションの検索機能を直接利用できるようになります。

Siriは、ユーザーを検索結果に直接ナビゲートします。

このAppIntentを使うと、SuperhumanのようなEメールアプリは、ユーザーに「Superhumanで自転車を検索して、アプリで結果を表示する」という機能を提供できるようになります。

私のアプリで検索結果を表示するためのAppIntentです。

既存のShowInAppSearchResultsIntentタイプに準拠しています。

今日、私たちは、アプリに組み込まれた検索機能をSiriと統合するために、システムドメインの下に新しいAssistant Schemaを導入しました。

この新しい Schema に準拠するには、AppIntent 宣言の前に Swift マクロを追加するだけです。

このように!

この検索インテントも、事前に定義されたシェイプの恩恵を受けることができます。

ShowInAppSearchResultsIntent タイプを削除することもできます。

その結果、より簡潔なApp Intentの実装になります。

先ほどのデモを踏まえて、Siriが自分のアプリで写真を検索できたら素晴らしいと思いませんか?

新しいシステム検索マクロを使えば、それが可能になります。その方法をお見せしましょう。

私のアプリにはすでに検索バーが組み込まれていて、位置情報で写真を絞り込むことができます。

ニューヨークの写真を検索するには、「New」と入力します。

Xcodeに戻って、この機能をSiriに公開する方法を見てみましょう。

私のナビゲーションマネージャーには、基準を持つopenSearchというメソッドがすでにあります。

このメソッドは、ユーザーをページにルーティングし、指定された条件に一致する検索結果を表示します。

私はすでにSearch Assets App Intentを持っています。

このインテントは、ナビゲーションマネージャを活用してアプリに結果を表示します。

システムアクション用の新しいApp Intentドメインがあれば、この同じインテントをSiriとApple Intelligenceに公開できます。

その方法をお見せしましょう!

この新しいアシスタントスキーマを検索に追加することで、Siriはユーザーを私の検索結果UIに直接ルーティングできるようになります。

以上です。

ビルドして実行し、Shortcutsで実際にテストしてみましょう。

もう一度、Shortcutsアプリを開き、新しいアクションを作成します。

アプリをフィルタリングします。

今回は、Search Photosを使って保存します。

実行しましょう。

このApp Intentは検索条件のパラメータを取るので、値を入力するプロンプトが表示されます。

サンフランを検索してみましょう。

ご覧の通り、アクションは正常に実行され、ゴールデンゲートブリッジの美しい写真が表示されました。

デモでお分かりのように、アプリ内検索は、ユーザーを私のアプリに引き込み、その美しいUIで結果を表示する素晴らしい方法です。

今年はSiriの機能を拡張し、私のアプリのコンテンツをより深く理解できるようにします。

Apple Intelligenceのおかげで、Siriはセマンティック検索ができるようになりました。

つまり、私がペットを検索すると、ペットという単語を探すだけでなく、猫、犬、そしてヘビまで見つけてくれるのです。

LLMによって、Siriはペットとは何かを理解します。

Siriがあなたのコンテンツを見つけると、そのコンテンツに対して直接アクションを起こします。

例えば、お気に入りのペットの写真を友だちと共有したりできます。

アプリでは、App Intentsフレームワークを使って、この追加コンテキストを提供するエンティティを定義できるようになります。

IndexedEntityと呼ばれる新しいAPIに準拠することで、Siriがあなたのアプリのコンテンツを検索できるようになります。

セマンティックインデックスで情報を利用できるようにします。

Indexed-Entityの詳細については、私の同僚の「What's new in App Intents」のビデオをご覧ください。

Apple Intelligenceの機能のおかげで、今年はSiriの新時代の幕開けとなります。

あなたのアプリをSiriと統合するために必要なツールは、今日から利用できます。

また、ソフトウェアアップデートでは、アプリ内アクションとパーソナルコンテキストを提供する予定です。

このセッションでは、メディアライブラリアプリをSiriに対応させる手順を説明しました。

しかし、まだそのデモはご覧になっていません。

今日のセッションを終える前に。

ここでは、今後あなたのアプリで何ができるようになるのか、こっそりお見せしましょう。

この写真をカリフォルニアのアルバムに追加してください。

ジョシュにメールで送ってください。

まとめ。

Apple Intelligenceの新しい大規模な言語モデルのおかげで、Siriはこれまで以上に有能で、より柔軟で、よりインテリジェントになりました。

SiriKitとApp Intentsは、あなたのアプリケーションとSiriを統合するための2つのフレームワークです。

あなたのアプリが既存のSiriKitドメインと重複しない場合は、App Intentsが最適なフレームワークです。

インテリジェンスといえば、Siriがあなたの代わりにアプリ内でアクションを起こします。

新しいAssistant Schema APIを採用して、あなたのアプリもその恩恵を受けられるようにしましょう。

次に見るべき素晴らしいビデオはこちらです。

ご視聴ありがとうございました!