SiriKitを触ってみたファーストインプレッション

WWDC2016で発表されたSiriKit。

これで、「Hey Siri〜」からガンガンに操作できるアプリを作れる！！！とテンション上げて触ってみた。
…ら、SiriKitの利用はかなり限られた状況に限るっぽいということがわかりました、というお話。

## 公式リソース

- SiriKitの紹介
  - [SiriKit](https://developer.apple.com/sirikit/)
- ドキュメント
  - [SiriKit Programming Guide](https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/index.html)
- サンプルコード
    - [UnicornChat](https://developer.apple.com/library/prerelease/content/samplecode/UnicornChat/Introduction/Intro.html)
        - Messageアプリ風のサンプル
    - [IntentHandling](https://developer.apple.com/library/prerelease/content/samplecode/IntentHandling/Introduction/Intro.html)
        - Payment系と、Workout系の２つが入ったサンプル
 
## サンプル「UnicornChat」

アプリをそのまま立ち上げても真っ白な画面が見えるだけ


「UnicornChatでメッセージを送って」とSiriから話しかける

<img width="320" alt="IMG_1466.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/27025/d04f79e9-6899-464c-5393-801d1827a87a.png">

一番はじめは、Siriでこのアプリを使うことのを設定から許可するように求められる。

UnicornChatをONに。

<img width="320" alt="IMG_1467.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/27025/839600d5-1ab4-b874-f60c-dd1bdd4f2fb4.png">

もう一度「UnicornChatでメッセージを送って」

<img width="320" alt="IMG_1468.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/27025/97536706-2dcc-f352-c098-2621b08e0813.png">

メッセージの内容と宛先を聞かれる。

「こんにちは」と言うと

<img width="320" alt="IMG_1469.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/27025/153eb6ad-d5af-9187-eda5-84c6fb52e4e8.png">

本文として認識される。
Siriは宛先も聞いてきてるけど、いくつか試しても、UnicornChatに宛先は認識させられなかった。

メッセージが作成できたので、「送信」と伝える。（ボタンをタップしても可）

<img width="320" alt="IMG_1470.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/27025/61915004-ea64-b6c7-108b-22a6ef30048c.png">

送信成功！（もちろん実際は送られない）

## サンプル「IntentHandling」

PaymentsとWorkoutの2種類のアプリが入っているが、

Paymentsは日本じゃまだサポートしていないし、WorkoutはApple Watch持ってないしで試せず…。

## SiriKitが現状サポートするドメイン

[SiriKit Programming Guide](https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/index.html) の冒頭

> Add SiriKit support only if your app implements one of the following types of services:
> (なんとなく訳)以下の種類のサービスを実装しているアプリだけSiriKitはサポートするよ
>
- Audio or video calling
- Messaging
- Payments
- Searching photos
- Workouts
- Ride booking

これが最初どういうことかわからなかったけど、どうやら
「〜でメッセージを送って。」
のようなSiriKitでフックできる構文は、予め用意されているパターン分だけしか使うことができず、
その用意されているものが上記の6ドメイン用だけの様子。

[Intents Domains](https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/SiriDomains.html)に利用できるドメインと、使えるIntentの一覧があり、

Messagingだと

- Send a message
- Search for messages

Photo Searchだと

- Search for photos
- Play a photo slideshow

など。（それぞれのIntentで、どういう言い方をすればいいのかはどこに書いてあるんだろうか…)

## 独自にIntentを追加したりはできない

そして残念ながら、[NSIntentのAPIドキュメント](https://developer.apple.com/reference/intents/inintent)にバッチリ

> You do not create instances of this class directly or implement your own custom subclasses. 
> (なんとなく訳)このクラスを直接使ったり、独自にサブクラスを作ったりしたらダメだよ

と書いてあることから、自分でカスタムのドメインを追加するようなことはできない模様。

[ちょっとそういうことができそうなドキュメント](https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/CustomVocabularyKeys.html#//apple_ref/doc/uid/TP40016875-CH10-SW1)もあるけど、中身を読むと、どうやら単語レベルなら追加できるよ、というものっぽい。

## 結論


もっと自由にSiriと連携できると思ってたら超限定的だった…

サポートされる６タイプに該当するアプリじゃないと今回のSiriKitの発表はまったく関係なかったという結論で非常に残念。
今後、もっと他のドメインが追加されたり、なにより独自にカスタム構文追加できるようになることを切に期待。

もしくはドキュメント読み込み不足で、実はできますとかあったりしないだろうか。