WWDC Quick Look 💓 By SwiftGGTeam
Design App Intents for system experiences

Design App Intents for system experiences

元の動画を見る

ハイライト

iOS 18 は App Intents の設計原則を変更:「最もよく使う操作を公開」から「アプリが行う全てのことが Intent であるべき」へ — Spotlight、Action Button、Siri、Controls などのシステムエントリーポイントが機能を呼び出せるように。


主要内容

昨年の App Intents の位置づけは明確:アプリ内で最も頻繁に使う操作を選び、Shortcuts と Siri に公開。この戦略の問題は、アプリに Intent が 3 つしかなければ、Shortcuts での組み合わせ余地が非常に限られること。

iOS 18 がこれを解決 — 戦略が「少数厳選」から「全面カバー」へ。Apple はこのセッションで明言:アプリが行う全てのことが App Intent であるべき。理由はシステムエントリーポイントが増え続けている:Spotlight、Action Button、Siri、Controls、Widgets、Squeeze… 各エントリーポイントに豊富な Intent が必要。

しかし「多い」≠「乱れ」。セッションの大部分は設計原則、核心は 3 つの質問:

  1. どの機能を Intent として公開すべきか? 動詞から始める — 開く、作成、検索、設定、削除。細分化を避け、同じことを行う複数 Intent はパラメータ付き 1 Intent に統合。

  2. パラメータをどう設計するか? パラメータ要約は任意のパラメータ組み合わせで自然に読めること。パラメータが二値状態(トグル類)なら Toggle をデフォルトパラメータとして必ずサポート、さもないと毎回ユーザーに尋ねる。

  3. いつアプリを開くか? 以前は開かないことが目標、今は「開くのが一般的」。Intent がアプリ内で変化を起こす(新しいボード作成など)なら、結果を見せるため直接アプリを開く。OpenIntent プロトコルまたは openWhenRun オプションで実現。


詳細

Intent タイプ:動詞から始める

App Intent 設計時、これらの基本動詞から着手(00:35):

  • 開く(Open)— 特定ビュー、フォルダ、ファイルを開く
  • 作成(Create)— ノート、イベント、下書きを作成
  • 検索(Search)— アプリコンテンツ内を検索
  • 設定(Set)— トグル、状態を調整
  • 削除(Delete)— 項目、下書きを削除

これらの動詞が大多数のアプリの核心機能をカバー。各機能は 1 Intent に対応、各 UI 操作ごとに個別 Intent を作らない。

Intent の細分化を避ける

セッションが繰り返し警告する誤りは「細分化」— 同じことに複数 Intent(00:50)。例:「異なるタイプのリマインダーを開く」ごとに Intent を作らず、「リマインダーを開く」Intent 1 つにリマインダータイプをパラメータに。

正しいアプローチは機能を構造化し、可変部分をパラメータに:

❌ 仕事リマインダーを開く
❌ 個人リマインダーを開く
❌ 重要リマインダーを開く

✅ リマインダーを開く(パラメータ:リマインダータイプ)

パラメータ要約は自然に読めること

Intent のパラメータ要約は任意のパラメータ組み合わせで一文として読めること(04:16)。例:カメラの「特定モードでカメラを開く」Intent、どのモードを選んでも一文として読める要約。

パラメータタイプの選択

組み込みパラメータ:日付、テキスト、数値など単純タスク向け(04:42)。

静的パラメータ(Static Parameter):アプリタブなど固定オプション(04:55)。

App Entity:ユーザーが新フォルダを追加するなど動的に変化するオプション、リスト自動更新が必要(05:10)。

オプションパラメータ vs 必須パラメータ

オプションパラメータ優先05:24):ユーザーがパラメータ未指定なら Intent は直接実行、完全なアプリ内選択体験を提供。「特定フォルダのノートを開く」でフォルダ未指定ならフォルダ選択 UI を開き、毎回尋ねない。

必須パラメータ:パラメータ空で Intent が完全に意味をなさない場合のみ。「メール検索」は検索語必須(06:04)。

二値状態は Toggle をサポート

Intent が 2 状態(オン/オフ)のみなら Toggle をデフォルトパラメータとして必須サポート(06:32)。例:「懐中電灯を設定」Intent は毎回オン/オフを尋ねるのではなく Toggle をサポート。

いつアプリを開くか

iOS 18 の大きな変化はアプリを開くことが一般的な動作になったこと(06:49)。2 ケース:

OpenIntent プロトコル:Intent の本質が特定ビューへアプリを開くこと。例:「ストップウォッチを開く」Intent。

openWhenRun オプション:Intent 実行後にアプリ内で変化が生じ、ユーザーに見せるべき。例:「Freeform ボード作成」完了後、新規ボードに直接開く(07:59)。

このオプションはデフォルト有効、Shortcuts で無効化可能、複数 Intent を連続実行する Shortcut に適合。

バックグラウンド実行サポート

Live Activity、音声再生、録音をサポートするアプリでは対応 Intent もバックグラウンド実行をサポート(06:39)。アプリを開かずに操作完了可能。


重要ポイント

1. 既存 Intent の細分化問題を監査

既に App Intent があれば、複数 Intent が同じことをしていないか確認。「友達に送信」「グループに送信」「チャンネルに送信」は「メッセージ送信」Intent に統合、受信者をパラメータに。統合後 Shortcuts での柔軟性が大幅向上。

2. 二値状態に Toggle サポートを追加

2 状態のみの Intent(トグル類)を全て確認、Toggle をデフォルトパラメータとしてサポート。「おやすみモード」「集中モード」「再生/一時停止」Intent は毎回選択ダイアログではなく 1 回の切り替えを期待。

3. 「アプリを開く」戦略を再考

Intent がアプリ内で変化を起こす(作成、変更、削除)なら openWhenRun 動作を検討。「ノート作成」「イベント追加」操作は完了後に直接開くと体験がより一貫。


関連セッション

コメント

GitHub Issues · utterances