Face ID/Touch IDでのログインを実装して操作の手間を減らせたので、次はよく使う操作をSiriやショートカットアプリから直接呼び出せるようにしてみました。
1. 古いSiriKitの情報を参考にして混乱した
検索して出てくる情報の多くが旧世代のSiriKit(INIntentベース)向けで、最初はどの記法を参考にすればいいのか分からず混乱しました。
struct MyIntent: AppIntent {
static var title: LocalizedStringResource = "記録を追加"
}
新しいApp IntentsフレームワークではAppIntentプロトコルに準拠した構造体を定義するだけでよく、SiriKitのように専用のIntent定義ファイルやExtension Targetを別途用意する必要がありませんでした。情報を探すときは「SiriKit」ではなく「App Intents」で検索し直すのが正解でした。
2. パラメータを持たせる書き方で何度もビルドエラーになった
ユーザーが記録内容を音声で指定できるようにパラメータを追加しようとしたところ、プロパティラッパーの書き方を誤り、何度もビルドエラーになりました。
@Parameter(title: "メモ")
var note: String
@Parameterプロパティラッパーを使うこと自体は単純だったのですが、perform()メソッド内でこのプロパティにアクセスするタイミングや、async throwsを付け忘れていたことが原因でエラーが出ていました。エラーメッセージを一つずつ丁寧に読むことで解決できました。
3. アプリを再ビルドしてもショートカットに反映されないことがあった
実装後、ショートカットアプリを開いても新しいアクションが表示されず、実装が間違っているのかと焦りました。
一度アプリを削除して再インストールしたところ正しく反映されました。App Intentsの候補はOSにインデックスされる仕組みになっており、単純な再ビルドだけではキャッシュが更新されないことがあるようです。動作確認の際は「アプリを一度消して入れ直す」を選択肢に入れておくと余計な時間を使わずに済みます。
4. 動作確認をアプリ内だけで完結させようとしていた
実装したApp Intentが正しく動くかどうかを、アプリ内の画面遷移だけで確認しようとして時間を無駄にしていました。
実際にはショートカットアプリを開いて新規ショートカットを作成し、そこから自分のアプリのアクションを検索して動かしてみる、Siriに直接話しかけて呼び出してみる、といった「アプリの外側」からの動作確認が欠かせませんでした。アプリ内のロジックが正しくても、外部から見つけられなければ意味がないと実感しました。
まとめ
- 検索するときは古い「SiriKit」ではなく新しい「App Intents」の情報を探す
- パラメータは
@Parameterで宣言し、perform()はasync throwsにする - ショートカットに反映されない場合はアプリの再インストールを試す
- 動作確認はアプリ内だけでなく、ショートカットアプリやSiriへの発話など「外側」からも行う
音声操作は特別な機能というより、既存の処理にちょっとした入り口を追加するだけで実現できることが分かりました。
次は、写真ライブラリへのアクセス(PHPicker)を実装してつまずいた話をまとめます。
本記事は生成AI(Claude)を活用して執筆・編集しています。内容は実体験に基づき、執筆者本人が確認・監修しています。


コメント