Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
NewsPicksで音声入力SiriKitを試してみた
Search
Ippei Fukuyori
August 29, 2016
Programming
530
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
NewsPicksで音声入力SiriKitを試してみた
Ippei Fukuyori
August 29, 2016
Other Decks in Programming
See All in Programming
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
140
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
1
190
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
280
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
260
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
980
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
430
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
Next.js: The final boss of Web Performance
guaca
0
280
Featured
See All Featured
How to Ace a Technical Interview
jacobian
280
24k
What's in a price? How to price your products and services
michaelherold
247
13k
Design in an AI World
tapps
1
350
Being A Developer After 40
akosma
92
590k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
360
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
430
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Six Lessons from altMBA
skipperchong
29
4.5k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
WENDY [Excerpt]
tessaabrams
14
40k
Making the Leap to Tech Lead
cromwellryan
135
10k
Transcript
NewsPicksで音声入力 SiriKitを試してみた UZABASE Meetup#5 2016/08/25
自己紹介 • 福頼(ふくより)一平 • 2016年1月入社(2015年11月から2ヶ月アルバイト) • いちおうiOSエンジニアのつもり • 最近は設計、サーバー開発、Web開発、ログ分析が多い •
前職は、金融系システム会社で株式、先物オプション、FXのシステム開発
SiriKit (Intents, Intents UI) • SiriKitというフレームワークはない • IntentsとIntents UIというフレームワーク ◦
Intents … Siriからの入力(Intent)を受け取り、処理を行い、処理結果を返す ◦ Intents UI … Intentsで返した処理結果を独自の UIで表示する • 単体のアプリとして実装するのではなくApp Extensionとして既存のアプリ(本体ア プリ)に組み込む 引用: https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionOverview.html Siri NewsPicksSiriExtension NewsPicks
Intents Domain • サードパーティアプリでSiriKitが利用できるシーンは限られている (Siriが反応するフレーズがあらかじめ決められている) • 6つのIntents Domain、16のUser Intention Intents
Domain User Intention(やれること) VoIP Calling 音声通話・ビデオ通話の開始、通話履歴の検索 Messaging メッセージの送信・検索 Photo Search 写真の検索、スライドショーの再生 Payments 他のユーザーへの支払い、支払い要求 Workout ワークアウトの開始・終了など Ride booking 乗車予約、予約状況の確認
Intents Domain • サードパーティアプリでSiriKitが利用できるシーンは限られている (Siriが反応するフレーズがあらかじめ決められている) • 6つのIntents Domain、16のUser Intention Intents
Domain User Intention(やれること) VoIP Calling 音声通話・ビデオ通話の開始、通話履歴の検索 Messaging メッセージの送信・検索 Photo Search 写真の検索、スライドショーの再生 Payments 他のユーザーへの支払い、支払い要求 Workout ワークアウトの開始・終了など Ride booking 乗車予約、予約状況の確認 →独自のIntentを 追加することはできない
NewsPicksって ニュースアプリじゃな かったっけ?
SiriKit 使えないじゃん ヽ(ι´Д`)ノ
まとめ
というわけにも いかないので・・・
Intents Domain • サードパーティアプリでSiriKitが利用できるシーンは限られている (Siriが反応するフレーズがあらかじめ決められている) • 6つのIntents Domain、16のUser Intention Intents
Domain User Intention(やれること) VoIP Calling 音声通話・ビデオ通話の開始、通話履歴の検索 Messaging メッセージの送信・検索 Photo Search 写真の検索、スライドショーの再生 Payments 他のユーザーへの支払い、支払い要求 Workout ワークアウトの開始・終了など Ride booking 乗車予約、予約状況の確認 なんとなくニュースの 検索に使えそう 差出人 →配信メディア 受信日時 →ニュースの配信日時
Siriがやってくれること1 - Message Intents • ユーザーの言葉を適切に(?)解釈し、要素に分解し、Intentオブジェクトに変換す る 「NewsPicksでソフトバンクが含まれるメッセージを検索」 アプリ名 検索キーワード
User Intention ◦ 実際には「ソフトバンクが」が検索キーワードとして認識される ◦ 「メッセージを検索」ではなく「ニュースを検索」にしたいがニュースのドメインは提供されていないの で、アプリで処理されず Web検索が行われる
Siriがやってくれること2 - Message Intents • 処理を行うための情報が足りない場合、インタラクティブに追加情報を取得する Siri: 「どなたからのメッセージを検索しますか?」 あなた: 「渡辺さん」
Siri: 「どなたからのメッセージを検索しますか?」 あなた: 「日経」 Siri: 「私には"日経"はわかりませんでした。」 →ニュースなのでメディア名を差出人として指定したいが、 Siriは「日経」さんを人として認めてくれない
IntentHandlerの処理の流れ 引用: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html
IntentHandlerの処理の流れ 引用: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html パラメータ解決フェーズ ・検索キーワード ・送信者 ・受信日時 などを検証、必要に応じて取得
IntentHandlerの処理の流れ 引用: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html パラメータ解決フェーズ ・検索キーワード ・送信者 ・受信日時 などを検証、必要に応じて取得 確認フェーズ レスポンスの生成。メッセージ送信
前の確認などを行う
IntentHandlerの処理の流れ 引用: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html パラメータ解決フェーズ ・検索キーワード ・送信者 ・受信日時 などを検証、必要に応じて取得 確認フェーズ レスポンスの生成。メッセージ送信
前の確認などを行う 実行フェーズ 実際のメッセージの送信や検索を 行う
実装
• ターゲット追加 ◦ アプリとしてではなく、 App Extensionとして動作する • Info.plistに追加 • ハンドラ(実際の処理)を実装
実装方法 メッセージを送信する 最初に呼ばれるメインクラス →Intentのタイプによって ハンドラを振り分け メッセージを検索する
IntentHandlerの振り分け • INExtensionクラスを継承 • INExtensionはINIntentHandlerProvidingプ ロトコルの実装クラス • 複数のDomainをサポートする場合でも全て このメソッドが呼ばれる •
今回はメッセージを検索する Intentをサポー トするので、入力は INSearchForMessagesIntent • 返すIntentHandlerは INSearchForMessagesIntentHandlingを実 装したクラス(SearchMessageHandler) • Xcodeが生成するサンプルコードは、ひとつ のクラスに全て実装されているが、 Intent毎 あるいはDomain毎にクラスをわけた方がい いと思う
IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 送信者を検証・解決する例: ユーザーが指定した(話した)送信者が問題ない場合 →INPersonResolutionResult.success(with:) →次のパラメータの検証・解決
送信者が不正または指定されていない場合 →INPersonResolutionResult.needsValue() →Siriがユーザーに誰からのメッセージを検索するか聞いてくれる
IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 メッセージの検索で特に確認することないので省略!
IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装
IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 検索ワードが指定されない場合があるのでバリデーション にわかには信じがたいが、 resolveフェーズで検索ワードを要求 する術がない
IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 検索APIを実行
IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 検索結果のオブジェクトを生成 ・内容はニュースのタイトル ・送信日時はニュースの公開日時 ・送信者はメディア
で代替する
Demo
Demo 検証環境 ・Xcode8 beta6 ・iOS10 beta7
Demo 検証環境 ・Xcode8 beta6 ・iOS10 beta7 「MeetUpで渡部さんからのソフトバンクが含まれる メッセージを検索」
どう話せばSiriは認識するのか • 「MeetUpで渡部さんからのソフトバンクが含まれるメッセージを検索」 →OK。検索ワード「ソフトバンクが」、送信者「渡部」 • 「ミートアップでソフトバンクが含まれるメッセージを検索」 →NG。「ミートアップ」がMeetUpアプリとして認識されない。 • 「ミートアップで日経からのソフトバンクが含まれるメッセージを検索」 →NG。「ミートアップ」がMeetUpアプリとして認識されない。
• 「MeetUpで日経からのソフトバンクが含まれるメッセージを検索」 →NG?。検索ワード「日経からのソフトバンクが」、送信者「-」 • 「MeetUpでメッセージを検索」 →NG。ハンドラの処理は行われるが、検索ワードがないのでエラー。
まとめ(所感) • SiriKit(Intents, Intents UI)が利用できるシーンは限られている • NewsPicks(ニュースアプリ)では、それっぽく動作させることはできるが、プロダクト としてリリースすることは難しい • Siriの認識精度は(少なくとも日本語では)あまりよくない
• 煩雑なやりとりをしてまでSiriを使うメリットはあるのか? ◦ 運転中や料理中などは便利かも?
おわりに • iOS10で導入されるSiriKitを実際に試して見たが、NewsPicksでは使えそうにない • 新しい技術は実際に試してみて、感触が良ければ取り入れることにしているが、今 回のように使えないこともある • 一見無駄なことをしているようにも思えるが、新しい技術を使ってみるのって楽しい ですよね •
ユーザベース、ニューズピックスではMeetUp以外にも隔週くらいでLTやってるので 新しい技術に触れる機会がたくさんあります! • 新しいこと好きなそこのあなた、一緒に働いてみませんか?
Fin.