Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
APL使ってみた
Search
gaomar
December 17, 2018
Technology
1
1.1k
APL使ってみた
APL(Alexa Presentation Language)使ってみた。
スマートスピーカーを遊びたおす会 vol.4の登壇資料です。
gaomar
December 17, 2018
Tweet
Share
More Decks by gaomar
See All by gaomar
PAD・enebular・Lexで 交通費を確認してみた / enebular-200902
gaomar
0
170
よくあるご質問をノーコードで試してみた / enebular-210210
gaomar
0
170
enebularで湯婆婆をノーコードで実装してみた / enebular-201201
gaomar
0
910
CLOVA OCRをenebularで連携してみた / yurufuwaml-201104
gaomar
0
340
会社の受付システムをenebularでやってみる / 0yenRPA-201006
gaomar
0
190
ゆるふわマシンラーニング vol.4 / yurufuwaml-200702
gaomar
0
230
Makecode Arcadeハンズオン資料 / makecodearcade-0625
gaomar
2
440
M5StickCをLINE Beacon化してみた / m5stack-200207
gaomar
0
700
スマートスピーカーミーティング 20200130 / ssmtg-200130
gaomar
0
420
Other Decks in Technology
See All in Technology
【NGK2025S】動物園(PINTO_model_zoo)に遊びに行こう
kazuhitotakahashi
0
240
メールヘッダーを見てみよう
hinono
0
110
My small contributions - Fujiwara Tech Conference 2025
ijin
0
1.4k
深層学習と3Dキャプチャ・3Dモデル生成(土木学会応用力学委員会 応用数理・AIセミナー)
pfn
PRO
0
460
Amazon Route 53, 待ちに待った TLSAレコードのサポート開始
kenichinakamura
0
170
TSのコードをRustで書き直した話
askua
2
180
.NET 最新アップデート ~ AI とクラウド時代のアプリモダナイゼーション
chack411
0
200
JuliaTokaiとJuliaLangJaの紹介 for NGK2025S
antimon2
1
120
【JAWS-UG大阪 reInvent reCap LT大会 サンバが始まったら強制終了】“1分”で初めてのソロ参戦reInventを数字で振り返りながら反省する
ttelltte
0
140
生成AI × 旅行 LLMを活用した旅行プラン生成・チャットボット
kominet_ava
0
160
シフトライトなテスト活動を適切に行うことで、無理な開発をせず、過剰にテストせず、顧客をビックリさせないプロダクトを作り上げているお話 #RSGT2025 / Shift Right
nihonbuson
3
2.2k
30分でわかる「リスクから学ぶKubernetesコンテナセキュリティ」/30min-k8s-container-sec
mochizuki875
3
450
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
It's Worth the Effort
3n
183
28k
How GitHub (no longer) Works
holman
312
140k
Bash Introduction
62gerente
610
210k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
3
180
Visualization
eitanlees
146
15k
Why Our Code Smells
bkeepers
PRO
335
57k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
500
Unsuck your backbone
ammeep
669
57k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Transcript
"1-ͬͯΈͨ
ࣗݾհ ॴଐɿגࣜձࣾΞΠΤϯλʔɹେࡕࢧళ ɹɹɹ3%ɹೖࣾ ɹɹɹςΫχΧϧνʔϑظؒ.71 ɹɹɹεϚʔτεϐʔΧʔΤόϯδΣϦετ ۀɿΧʔϦϯάࢧԉπʔϧ։ൃ ɹɹɹεϚʔτεϐʔΧʔݚڀ։ൃ ɹɹɹ)PMP-FOTݚڀ։ൃ ߴഅɹయ !HBPNBS
͖ͳݴ༿ɿͶ͐$MPWB ͔ͨ͏·ɹͻΖͷΓ
ࣗݾհ εϚʔτεϐʔΧʔΞϓϦ։ൃೖ େධൃചதʂ
"1-ͱ
"1- "MFYB1SFTFOUBUJPO-BOHVBHF "1-ͱ &DIP4IPX&DIP4QPUͳͲͷը໘͖σόΠεͰ ը໘ͷϨΠΞτΛ։ൃऀ͕ࣗ༝ʹσβΠϯͰ͖Δ৽͍͠σβΠϯݴޠ
"1-Λ༗ޮԽ
"1-Λ༗ޮԽ "1-Λ༗ޮԽ
"1-σβΠϯπʔϧ
"1-ͷσβΠϯϨΠΞτը໘ "1-σβΠϯπʔϧ ը໘දࣔʢϕʔλʣΛΫϦοΫ
"1-ͷσβΠϯϨΠΞτը໘ "1-σβΠϯπʔϧ छྨͷςϯϓϨʔτ͕͋Δ
"1-σβΠϯπʔϧ ϨΠΞτฤूϞʔυͱ+40/ฤूϞʔυ͕͋Δ ͜͜ͰΓସ͑Δ
දࣔϋϒ
දࣔϋϒΓସ͑ දࣔϋϒ খܕϋϒ &DIP4QPU େܕϋϒ &DIP4IPXOE தܕϋϒ &DIP4IPXTU େܕϋϒ 'JSF57
දࣔϋϒ BMFYBWJFXQPSUQSPpMFTΛΠϯϙʔτ͢Δ "import":[ { "name": "alexa-viewport-profiles", "version" : "1.0.0" }
]
දࣔϋϒ ֤ը໘ͷผ ϏϡʔϙʔτϓϩϑΝΠϧͰߦ͏ "when": "${@viewportProfile == @hubRoundSmall}" IUUQTEFWFMPQFSBNB[PODPNKBEPDTBMFYBQSFTFOUBUJPOMBOHVBHFBQMBMFYBWJFXQPSUQSPpMFTQBDLBHFIUNM @hubRoundSmallɿEcho Spot
@hubLandscapeMediumɿEcho Show (1st) @hubLandscapeLargɿEcho Show (2nd) @tvLandscapeXLargeɿFire TV
λονॲཧ
λονॲཧ ը૾λονʹԠͤ͞Δ߹ λον͢Δͱݩͷը໘ʹΓ͍ͨ
λονॲཧ 5PVDI8SBQQFS λονϥούʔ Λ͏ { "type": "TouchWrapper", "onPress": { "type":
"SendEvent", "arguments": [ "top" ] }, "item": { "type": "AlexaHeader", "headerTitle": "@skillName", "headerAttributionImage": "@skillIcon" } } ɾUZQF5PVDI8SBQQFSΛࢦఆ ɾPO1SFTTͰԠͤ͞Δ ɾBSHVNFOUTͰ͍ͨ͠ύϥϝʔλʔΛࢦఆ ɾJUFN͕Ԡ͢Δର IUUQTEFWFMPQFSBNB[PODPNKBEPDTBMFYBQSFTFOUBUJPOMBOHVBHFBQMUPVDIXSBQQFSIUNM
λονॲཧ "4, "MFYB4LJMMT,JU Ͱͷड͚औΓํ // ը໘λονॲཧ const TouchEventHandler = {
canHandle(handlerInput) { return ((handlerInput.requestEnvelope.request.type === 'Alexa.Presentation.APL.UserEvent' && (handlerInput.requestEnvelope.request.source.handler === 'Press' || handlerInput.requestEnvelope.request.source.handler === 'onPress'))); }, handle(handlerInput) { let choice = handlerInput.requestEnvelope.request.arguments[0]; var speechText = “”; if (choice === 'top') { // λΠτϧΔ speechText = “λΠτϧΔΑ”; } else if (choice === 'game_word') { // ΧʔϦϯά༻ޠදࣔ speechText = “ΧʔϦϯά༻ޠը໘ߦ͘Α”; } else { // ͦͷଞ speechText = “ͦͷଞͩΑ”; } return handlerInput.responseBuilder .speak(speechText) .getResponse(); } }; ɾUZQF"MFYB1SFTFOUBUJPO"1-6TFS&WFOU ɾIBOEMFSʹʮ1SFTTʯ͔ʮPO1SFTTʯ͕ೖΔ ɾBSHVNFOUTͷྻΛऔಘ
Ϧετॲཧ
Ϧετॲཧ ϦετΛදࣔͤ͞Δ߹
Ϧετॲཧ 4FRVFODF γʔΫΤϯε Λ͏ { "type": "Sequence", "scrollDirection": "horizontal", "data":
"${listData}", "height": "100%", "width": "100%", "numbered": true, "item": [ { … } ] } ɾUZQF4FRVFODFΛࢦఆ ɾTDSPMM%JSFDUJPOͰํΛࢦఆ IPSJ[POUBMԣ͖WFSUJDBMॎ͖ ɾEBUBͰϦετදࣔ͢ΔݩσʔλΛ͢ ɾOVNCFSFE͕USVFͳΒࣗಈ࠾൪͢Δ \PSEJOBM^ʹ࠾൪͞Ε͕ͨೖΔ IUUQTEFWFMPQFSBNB[PODPNKBEPDTBMFYBQSFTFOUBUJPOMBOHVBHFBQMTFRVFODFIUNM
"1-ద༻ํ๏
"1-ద༻ํ๏ "1-͔ΒίʔυΛॻ͖ग़͠
"1-ద༻ํ๏ EPDVNFOU෦ͱEBUB4PVSDFT෦Λ͚Δ { “document”: { … }, “dataSouces”: { …
} } return handlerInput.responseBuilder .speak(speechText) .addDirective({ type : 'Alexa.Presentation.APL.RenderDocument', version: '1.0', document: require('./document/apl_top.json'), datasources: require('./data/apl_top.json') }) .getResponse(); μϯϩʔυͨ͠KTPOϑΝΠϧ "4,Ͱͷॲཧ BEE%JSFDUJWFʹࢦఆ͢Δ
"1-ҋͷ
"1-ҋͷ ϨΠΞτΤσΟλͰฤू͍ͯ͠Δͱ ͍ͭͷؒʹ͔த͕উखʹมΘΔ
"1-ҋͷ খܕϋϒͷϨΠΞτΛฤूͯ͠ө͞Εͳ͍ͬͯࢥͬͨΒ தܕϋϒଆͷϨΠΞτΛฤू͍ͯͨ͠X
"1-ҋͷ EBUBTPVSDFT͜͏͠ͳ͍ͱΤϥʔʹͳΔ ʢ-BNCEB4VDDFTTͰฦ͖͔ͬͯͨΒ༨ܭϋϚͬͨʜʣ { "listPage": { "listData": [ { "text":
"1ͭΊ" }, { "text": "2ͭΊ" }, { "text": "3ͭΊ" } ] } } { "listData": [ { "text": "1ͭΊ" }, { "text": "2ͭΊ" }, { "text": "3ͭΊ" } ] } 0,ύλʔϯ /(ύλʔϯ
"1-ҋͷ λονॲཧ͕γϛϡϨʔλʔͱ࣮ػͰ ҧ͏IBOEMFS͕"4,ʹདྷΔ handlerInput.requestEnvelope.request.source.handler === 'Press' ࣮ػͷ߹ύλʔϯ handlerInput.requestEnvelope.request.source.handler === 'onPress'
γϛϡϨʔλʔͷ߹ύλʔϯ
"1-ҋͷ ը໘͖ͷ߹SFQSPNQU ແ͍΄͏͕͍͍ SFQSPNQU͕͋Δͱɺ੨͍όʔ͕ޫͬͯΛड͚͚Δঢ়ଶʹͳΔ XJUI4IPVME&OE4FTTJPOͰ໌ࣔతʹऴྃͤ͞ΒΕΔͷͰɺ ձΛऴྃͤ͞Δ߹ͦͪΒΛ͏
·ͱΊ
·ͱΊ ɾίϯιʔϧͷΠϯλʔϑΣʔε͔Β"1-Λ༗ޮʹ͢Δ ɾछྨͷදࣔϋϒ͕͋Δ খܕதܕେܕେܕ ɾදࣔϋϒͷผϏϡʔϙʔτϓϩϑΝΠϧΛ͏ ɾλονॲཧ5PVDI8SBQQFSΛ͏ ɾϦετॲཧ4FRVFODFΛ͏ ɾ"1-KTPOͷੜσʔλΛฤू͢͠ ɾ࣮ػͷ֬ೝඞͣߦ͏ʂ
·ͱΊ ৄࡉ2JJUBʹ·ͱΊ͍ͯ·͢ IUUQTRJJUBDPNIUBLBVNBJUFNTGEFCBE
ࠂ
ܰҪࠃࡍΧʔϦϯάબखݖେձ ʹͯలࣔ͠·͢ʂ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ I — APL