このスライドは
WWDC16. Meetup@Wantedly with 日本経済新聞社
http://wantedly.connpass.com/event/33967/
@yimajo 発表資料です
おやくそく
- Apple社とのNDAには最新の注意を払って誤解のないようにしたい
- ここに集まっている人たちは皆AppleとのNDAを結んでいて私の話すことは既知の情報です
- ただしスライドの写真を撮ってtweetするのはNDA警察に余計な心配をされるかもしれないので我慢しましょう
- Apple Developer Agreement
祝: iOS10でSiriを開発者が自由に使えるようになった!!
ヽ(´∀`)八(´∀`)ノイエーイ
勘違い乙
Siriがあたかも自由に扱えるようになったような
メディアの報道だけだと勘違いしたままになるので整理します
まず概要から言うよ
1. Siri画面上からチャットでアプリと連携する機能
と
2. サードパーティアプリから音声認識が使えるAPI
Siriに関連しているのはこの2つ
これをごっちゃにして SiriKit と呼んでしまってる奴が多い
m9(^Д^)
まず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のレスポンス
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
の違いを図にしてみる
FAQ(俺はこう思ったっス)
なぜSiriKit.framework
がなくIntents
, IntentsUI
, Speech.framework
と分離してる?
- Siriはインフラの一つだし
- 開発者から見たら分離されたframworkのほうが正しい
もともとキーボードに音声入力あるよね?
- UIとして入力欄UITextFieldとキーボードが必要
- 入力されたテキストは単語ごとに分かれているわけではない
音声認識で可能になるアプリって?
- 音声で検索したり
- 音声でページをめくったりする電子書籍
- 議事録作成アプリ
(利用制限をUIなどでうまく回避したりできれば...)
音声認識アプリ作成時のTips?
- デバッグ時に繰り返し喋るのが恥ずかしい
- ユーザもオフィスや人が多い所で音声認識を利用するとは思えない
- -> 電車の中では音声認識は使われないだろうな
まとめ
- SiriKitというのはマーケティング用語臭が強い
-
「それSiriKitで検索できるんでしょ?」
みたいな方への返答にこの資料をお使い下さい
自己紹介
@yimajo
Yoshinori Imajo
https://stargzr.net を作っています
Stargzrでは
- 昨日新しくPROエンジニアプランというのを実装したり
- stargzr.fmをやっています
参考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