AI 開発

iOS 27 の Siri AI はどう App を呼ぶか?App Intents、AI Agent、JSON と自動実行の完全ガイド

約 15 分

ユーザーは「A-1042 を調べて」と言う。JSON を書く側の問いは、Siri が雑談できるかではない。その一文が合法な Intent 引数になるか、App が perform() で副作用を走らせるかだ。App Intents、AI Agent、JSON データ、自動実行を分ける。

読む前の早見

概念 一言 どこに落ちるか
App Intents App がシステムに登録する呼び出し可能な動作 perform() + 引数オブジェクト
Siri AI 一文を Intent に埋める配車係 配車のみ。副作用は実行しない
AI Agent 多段のツール循環:提案、実行、再読 LanguageModelSession + Intents
JSON Schema 引数と状態の実行時口径 リポジトリのソースであり、Swift の付録ではない

分担を先に覚える。Siri はオブジェクトを届け、App Intents は入口、Agent はループ、Schema は実行前の門だ。四つを「Siri が App を開いた」に潰すと、次ホップは散文を parse する。

先に「App を呼ぶ」の問いを直す

2026 年 9 月、iOS 27 は iPhone 18 系列とともに出荷されている。ソフトの口径は WWDC 2026 で決まった。新しい Siri は LLM で再構築され、SiriKit は非推奨、第三者の入口は App Intents だけだ。iPhone 18 の AI はどれほど強いか は「強さ」を書いた。本稿は一件だけ書く——Siri があなたの App をどう呼ぶか。

「App を呼ぶ」を「画面を開いて説明を読む」と取ると、設計がずれる。システムがすることは、一文を聞き、Intent 名を選び、引数オブジェクトを埋め、ホストの perform() に渡すことだ。画面は開かなくてもよい。

  • ユーザーが話すのは自然言語だ。システムが渡すのはオブジェクトでなければならない。
  • Siri は配車係だ。照会、返金、送信は今もあなたの App にある。
  • 多段の自動化は、別のチャット窓ではない。合法な Intent 呼び出しを重ねることだ。

だからこのガイドは実行経路で書く。入口 → 引数 → Agent ループ → Schema の門 → Shortcuts / Spotlight。各段で同じ問いを出す。オブジェクトは合法か。

呼び出し経路:一文が perform() になるまで

旧 Siri はフレーズ照合と SiriKit に頼った。新 Siri はスロット埋めだ。「A-1042」「これを返せ」「支払済みなら返せ」をフィールドにし、登録済みの Intent に届ける。

成功する呼び出しは、少なくとも四ホップを通る:

  1. 聞く。端末または Private Cloud Compute が音声 / テキストを意図にする。チャットログではない。
  2. 誰を選ぶ。システムは見える App Intents の目録から名前を選ぶ。登録がなければ番は来ない。
  3. 埋める。実体、画面上の View、Spotlight 索引が引数オブジェクトに潰される。
  4. ホストが実行する。あなたの perform() が副作用を走り、構造化結果を返す。

JSON に落とすと、LookupOrder の一ホップはこれに近い:

{
  "intent": "LookupOrder",
  "app": "com.example.shop",
  "source": "siri",
  "parameters": {
    "order_id": "A-1042"
  }
}

source は siri、shortcut、spotlight、agent になり得る。入口は違っても、オブジェクトの形は同じであるべきだ。画面を開くのは提示であり、呼び出しそのものではない。

App Intents:新しい Siri が見える唯一の入口

WWDC 2026 のあと、App Intents を話さない App を、新しい Siri は見ない。SiriKit には二年から三年の移行窓があるが、新しい能力は Intents にしか乗らない。起動フレーズ、独自語彙、古い intent definition は主経路ではない。

システムにとって Intent は配車可能なツールだ。名前、引数型、確認の要否、UI を開くか、どの領域か。Siri、Shortcuts、Spotlight、端末上の Agent が同じ目録を共有する。

  • Intent Schema:システムの領域(タスク、写真、通信、商務)。領域に揃えば、決まった起動フレーズは要らない。
  • Entity Schema:注文、連絡先、ファイルが Spotlight 意味索引に入り、個人文脈は出典付きで戻る。
  • View Annotations:目の前の View を実体として印す。「これを返せ」に束ね先ができる。ID を二度聞かない。
  • App Intents Testing:Siri / Shortcuts / Spotlight を本物の系統路で試す。試すのはオブジェクトであり、キャッチコピーではない。

Swift で AppIntent を書くと、システムは呼び出し可能な記述を見る。AI Agent 完全ガイド は「モデルが提案し、ホストが実行する」をループに描く。iOS では提案はしばしば Siri から来て、実行は常にあなたの perform() にある。

App を開くのは提示の一つにすぎない。照会、状態変更、App を跨ぐ受け渡しは、引数が合法で、破壊的動作の確認を宣言していれば、背後で終えられる。

引数は JSON オブジェクトであり、起動フレーズではない

旧経路は自然言語を検索語にした。新経路は自然言語をフォーム埋めにする。フィールドを散文で持つと、perform() がもう一度 parse する。配車の利点を捨てることになる。

各 Intent には JSON Schema があるべきだ。Swift 型は投影だ。@Generable、雲の Structured Outputs、評価セット、Swift 以外のクライアントは、同じソースを指すべきだ。

LookupOrder の最小契約はこう書ける:

{
  "$id": "https://example.com/schemas/intents/lookup-order.json",
  "type": "object",
  "properties": {
    "intent": { "const": "LookupOrder" },
    "parameters": {
      "type": "object",
      "properties": {
        "order_id": { "type": "string", "pattern": "^A-[0-9]{4,}$" }
      },
      "required": ["order_id"],
      "additionalProperties": false
    }
  },
  "required": ["intent", "parameters"]
}

キーワードは JSON Schema 教程。プロパティ名は短く、enum は固定し、配列には maximumCount を付ける。AI が JSON Schema を必要とする理由 はすでに書いた。Schema は口径であり、prompt の「JSON を返して」ではない。

Siri の誤埋め、期限切れの実体、余分な鍵は、あなたの関数に入る。Intent 宣言を締め、実行前に同じ Schema で検証する。デバッグは先に 整形 で形を見、JSONPath 抽出 で order_id を抜き、先週通ったオブジェクトと JSON Diff する。ユーザーの注文を公開サイトに貼るな。

AI Agent:自動化は一つの Intent ではなく、ループだ

ユーザーは一段だけでは済まない。「A-1042 を調べ、支払済みなら返せ」は、先に LookupOrder し、それから CreateRefund を決める。それが Agent だ。提案、実行、結果を読む、再提案。

Apple スタックのループは LanguageModelSession の中にある。ツールは多くの場合 App Intents か、システムの OCR / Spotlight だ。骨格は雲の Function Calling と同じだ。モデルは名前と引数だけを出し、ホストが検証して実行する。

  • 既定の目録はシステムが見える Intentであり、自分で保つ長い tools[] ではない。
  • 各段の入出力はオブジェクトだ。スクリーンショットの散文を次の引数にしてはいけない。
  • PCC は約 32K。ツール結果が先に窓を食う。切ってから session に入れる。
  • App を跨ぐ連結はできる。各段には合法な引数と、それぞれの確認方針が要る。
{
  "agent": "on_device",
  "goal": "refund_if_paid",
  "plan": [
    {
      "step": 1,
      "tool": "LookupOrder",
      "arguments": { "order_id": "A-1042" }
    },
    {
      "step": 2,
      "tool": "CreateRefund",
      "arguments": { "order_id": "A-1042", "reason": "duplicate" }
    }
  ]
}

「支払済みなら返せ」の最小計画は、上の形に近い。モデルは step 2 を提案できるが、ホストを飛ばせない。status が paid でない、amount が範囲外、確認が欠ける、なら CreateRefund を走らせてはいけない。AI Agent と JSON Schema のワークフロー は門の並べ方だ。MCP Tool Schema vs Function Calling は別のツール JSON の綴りだ。Apple は同じ辞書を App Intents で書く。

Siri と Agent を一つの語にするな。Siri は「誰を呼ぶか」を決める。Agent は「次にどのツールか」を決める。どちらもオブジェクトをバトンにする。

Schema は実行前の門であり、文書の付録ではない

Guided Generation は不正な token を止める。権限、上限、二度目の確認は代行しない。Siri が埋めた引数でも、欠けたフィールド、誤った列挙、期限切れの実体は残る。

四層を「Siri が賢くなった」に潰すと、職責が消える。分けたあと:

層 システムがしていること Schema がないと
Siri AI 一文を Intent 呼び出しにする 散文が perform() に入り、副作用が先に走る
App Intents 呼び出し可能な動作をシステムに登録する 新しい Siri はあなたを見ない。古いフレーズは救わない
AI Agent session で多段のツールを呼ぶ 状態をチャットログから推測し、次ホップが誤ったオブジェクトを束ねる
JSON Schema 何もしない。物差しだけだ 物差しが Swift マクロにしかないと、雲と CI は測れない

Lookup が成功したあと、自動化の状態もオブジェクトであるべきだ。「見つかりました」という一文ではない:

{
  "automation": "refund_if_paid",
  "trigger": "siri",
  "state": {
    "order_id": "A-1042",
    "status": "paid",
    "amount": 99.00
  },
  "next": {
    "intent": "CreateRefund",
    "allowed": true
  }
}

allowed は、ホストが Schema と業務規則から算出せねばならない。モデルは「返金を勧める」と言ってよい。自分で allowed を true にしてはいけない。

自動実行:Shortcuts、Spotlight、App を跨ぐ

iOS 27 の自動化は、別の API ではない。同じ Intent 目録の、異なる入口だ。

  • Shortcuts は視覚の計画器だ。各タイルは今も Intent で、渡すものは今も引数オブジェクトだ。
  • Spotlight 意味索引は実体を返す。ウェブ要約ではない。「先週のあの注文」は order_id に解けねばならない。
  • App を跨ぐ連結はよいが、各方は自分の perform() を検証する。相手の散文を次の引数にするな。
  • 破壊的動作は確認する。返金、削除、外部送信は確認方針を宣言する。結果は構造化して返す。「OK」だけでは足りない。

同じ LookupOrder を、口で言い、ショートカットで押し、Agent のツールにもできる。Schema は一つだけ保つ。

自動化が失敗したら、先にオブジェクトを見る。欠けた required、一覧にない enum、期限切れの実体。起動フレーズの書き換えから始めるな。

2026 年の実装

  • リポジトリに schemas/intents/ と schemas/state/ を置き、安定した $id と版を付ける。
  • JSON Schema を先に書き、それから AppIntent / @Generable を書く。型は投影であり、源ではない。
  • 副作用(照会、返金、送信)は Intent を通す。抽出、振り分け、handoff は Guided Generation を通す。
  • 新しいオブジェクトは既定で additionalProperties: false と明示の enum。拡張するなら別の metadata を足す。
  • 返金、削除、外部送信は確認を宣言する。不正な引数を App Intents Testing に入れる。幸せな経路だけを試すな。
  • 秘密とユーザー欄はブラウザだけで見る。整形、JSON Diff、アップロードなし。

ディレクトリは薄くてよい。大切なのはデモより先にファイルだ。Siri の言い回しは変わる。口径を先に安定させる。

よくある誤り

  • Siri AI を ChatGPT だと思う。 Intent を届ける。副作用は代行せず、引数の合法性も保証しない。
  • 起動フレーズだけに頼り、App Intents を登録しない。 新しい Siri はあなたを見ない。
  • Siri が埋めたから検証しない。 欠けたフィールド、誤った列挙、期限切れの実体は perform() に届く。
  • Swift 型だけを書き、JSON 源を残さない。 雲の API、評価、他言語クライアントはすぐ分岐する。
  • 広い type: object で設計を逃げる。 開いたオブジェクトは門ではない。版を付けるか、明示の metadata を足す。

FAQ

App Intents を書いていない。iOS 27 の Siri は私の App を呼べるか。

新しい Siri は呼べない。SiriKit は移行窓にあるが、自然言語の配車、画面上の実体、多段 Agent は App Intents しか見ない。呼ばれたいなら、動作と引数を先に登録する。

Siri が引数を埋めた。まだ検証するか。

する。Siri は配車係だ。欠けたフィールド、誤った列挙、期限切れの実体は、あなたの perform() に届き得る。Intent 宣言を締め、実行前に同じ Schema でもう一度見る。

Shortcuts と Siri は二つの API か。

違う。同じ Intent 目録を読む。差は入口だ。口、ショートカットのキャンバス、Agent ループ。オブジェクトの形は揃える。

端末上の Agent はデータベースを直接書き換えられるか。

できない。モデルは名前と引数の提案だけが許される。状態変更、返金、送信はホストの perform() と、あなたの確認方針を通さねばならない。

この JSON をローカルでどう見るか。

まず整形して形を見、Schema で欠けた required や誤った enum を探し、前回通ったオブジェクトと Diff する。JSONSort はブラウザローカルで行い、データをアップロードしない。注文や連絡先を公開サイトに貼るな。

まとめ

iOS 27 で、Siri AI が「App を呼ぶ」とは、チャット画面を開くことではない。一文を合法な Intent 引数にし、ホストに実行させ、必要なら多段の Agent ループに入ることだ。

App Intents は入口、Agent はループ、JSON Schema は実行前の門だ。先に schemas/intents/lookup-order.json をリポジトリへ入れる。それから、どの言い回しをデモするか決める。

関連記事

更新履歴: 初回公開