iOS10で使えるようになるSiriKitじゃないSpeech.framworkについて

# このスライドは

WWDC16. Meetup＠Wantedly with 日本経済新聞社 
http://wantedly.connpass.com/event/33967/

@yimajo 発表資料です
![](https://avatars3.githubusercontent.com/u/1137860?v=3&s=140)

---

# おやくそく

- Apple社とのNDAには最新の注意を払って誤解のないようにしたい
- ここに集まっている人たちは皆AppleとのNDAを結んでいて私の話すことは既知の情報です
- ただしスライドの写真を撮ってtweetするのはNDA警察に余計な心配をされるかもしれないので我慢しましょう
- [Apple Developer Agreement](https://developer.apple.com/programs/terms/apple_developer_agreement.pdf)

---

# 祝: iOS10でSiriを開発者が自由に使えるようになった！！

---

## ヽ(*´∀｀)八(´∀｀*)ノｲｴｰｲ 

---

# 勘違い乙

---

# Siriがあたかも自由に扱えるようになったような

---

## メディアの報道だけだと勘違いしたままになるので整理します

---

# まず概要から言うよ

---

# 1. Siri画面上からチャットでアプリと連携する機能

--- 

# と

---

# 2. サードパーティアプリから音声認識が使えるAPI

---

# Siriに関連しているのはこの2つ

---

# これをごっちゃにして SiriKit と呼んでしまってる奴が多い

---

# m9(^Д^)

---

![siri.003.jpeg](https://qiita-image-store.s3.amazonaws.com/0/16400/85790e99-05bc-a3e8-6df1-afcacd63f1fa.jpeg)

---

# まずSiriKitとは

## Siriからエクステンションでアプリの機能を呼び出す機能

---

## `Intents.framework` と `IntentsUI.framework`からなる

### 連携できる限定的な用途

- Audio or video calling
- Messaging
- Payments
- Searching photos
- Workouts
- Ride booking

---

## ちなみにSiriKitというフレームワークはない
### `UIKit` は `UIKit.framework` 
### しかし`SiriKit.framwork`なんてない

---

### じゃあ既存の `~Kit` はフレームワークか調べてみた

---

調べたら全ての`~Kit`は`~framework`だった(iOS9)

- UIKit.framework, WebKit.framework, MapKit.framework, HomeKit.framework, PassKit.framework, CallKit.framework, AVKit.framework, MetalKit.framework, GameKit.framework, GamePlayKit.framework, HealthKit.framework, ReplayKit.framework, SceneKit.framework, SpriteKit.framework, CloundKit.framework, CoreAudioKit.framework, WatchKit.framework, PushKit.framework, GLKit.framework, NewsstandKit.framework, EventKit.framework, EventKitUI.framework, StoreKit.framework, TVMLKit.framework 

---

### その逆に`framework`だけど `~Kit`じゃないものはもちろん沢山ある

---

SiriKitは

- Intents.framework, IntentsUI.framework
 - これらframeworkは地図（Map.app）から使うインターフェースを提供する
 - https://developer.apple.com/reference/intentsui
 - つまり標準アプリからの連携frameworkなんだろうなあ

---

### SiriKitという命名はマーケティング上の名前っぽい感じがあるんだなあ

---

# ┐(´ｰ｀)┌

---

## このモヤモヤ感を言葉にすると

- Siriから呼び出すアプリ連携は設計/実装上はSiriに依存しないので`Intent.framework`と`IntentUI.framework`となっている
    - ->いいね！
- それらをSiriKitと呼ぶので`~Kit` は frameworkではなくなった
    - Kitって何...

---

# 本題

---

# 次にアプリから音声認識が使えるAPIについて

---

## `Speech.framework`

- 音声認識とテキストへの文字起こしをサポートするAPIが追加された
- 音声をテキストにしてくれるだけではなく、文脈に応じて単語の変更、単語ごとにレスポンスを返す

---

### APIのレスポンス

---

```swift
public class SFTranscription : 
        NSObject, NSCopying, NSSecureCoding {
    
    public var formattedString: String { get }
    
    public var segments:
        [SFTranscriptionSegment] { get }
}
```

例えば "こんにちは世界"と入力した場合
segments[0].substring = ["こんにちは"]
segments[1].substring = ["世界"]

---

### 使い方

- 自分のアプリから `import Speech`で使える
- PrivacyとSecurityの面から、パーミッション許可アラートが利用時に表示される
- info.plistにパーミッション許可用にユーザに表示する文面を書き込む

---

## Siriのおさらいと`Speech.framework`の違いを図にしてみる

---

![siri.001.jpeg](https://qiita-image-store.s3.amazonaws.com/0/16400/4fd66337-e920-1743-e516-f92438315563.jpeg)

---

![siri.002.jpeg](https://qiita-image-store.s3.amazonaws.com/0/16400/8754a3be-2838-e36d-c5dd-5aa9e5dcec63.jpeg)

---

# FAQ（俺はこう思ったっス）

---

## なぜ`SiriKit.framework`がなく`Intents`, `IntentsUI`, `Speech.framework`と分離してる？

- Siriはインフラの一つだし
- 開発者から見たら分離されたframworkのほうが正しい

---

## もともとキーボードに音声入力あるよね？

- UIとして入力欄UITextFieldとキーボードが必要
- 入力されたテキストは単語ごとに分かれているわけではない

![キーボード.png](https://qiita-image-store.s3.amazonaws.com/0/16400/a30ef0c9-d648-c217-f05f-219663113b8a.png)


---

## 音声認識で可能になるアプリって？

- 音声で検索したり
- 音声でページをめくったりする電子書籍
- 議事録作成アプリ

（利用制限をUIなどでうまく回避したりできれば...）

---

## 音声認識アプリ作成時のTips?

- デバッグ時に繰り返し喋るのが恥ずかしい
- ユーザもオフィスや人が多い所で音声認識を利用するとは思えない
    - -> 電車の中では音声認識は使われないだろうな

---

# まとめ

- SiriKitというのはマーケティング用語臭が強い
- `「それSiriKitで検索できるんでしょ？」`みたいな方への返答にこの資料をお使い下さい


---

# 自己紹介

![](https://avatars3.githubusercontent.com/u/1137860?v=3&s=140)
@yimajo
Yoshinori Imajo
https://stargzr.net を作っています

---

## Stargzrでは

- 昨日新しくPROエンジニアプランというのを実装したり
- stargzr.fmをやっています

---

<img width="743" alt="スクリーンショット 2016-06-30 0.50.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/16400/2b9ac02f-24d7-f75f-61e8-006471935187.png">


---
# 参考URL

- https://developer.apple.com/reference/intentsui
- https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewIniOS/Articles/iOS10.html
- https://developer.apple.com/reference/speech/sftranscription
- https://developer.apple.com/library/prerelease/content/samplecode/SpeakToMe/Introduction/Intro.html#//apple_ref/doc/uid/TP40017110