イベント情報から散歩コースの提案をする【Alexaスキル】

「神戸市のイベント情報を使って、Alexaに散歩コースの提案をしてもらう」
というAlexaスキル（アプリ）をつくりました。
[Alexaスキルのページ](https://www.amazon.co.jp/Ryota-Ikeuchi-%E7%A5%9E%E6%88%B8%E3%81%AE%E6%95%A3%E6%AD%A9/dp/B07RC37V8K)で公開中。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239549/be389e0a-f86d-e9fb-2557-19a649bfd307.png" width=60%>

AlexaDay2019というイベント内のコンテストで **優勝**しました！
この記事に写真載ってます： https://japan.cnet.com/article/35135432/
コンテストでのプレゼン資料はこちら： https://speakerdeck.com/ryotaikeuchi0/sanpo

#デモ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239549/ed52feb4-6d95-8f54-af2b-f1b036757a3d.png" width=50%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239549/4f3e89e1-ee09-7c29-99f5-d87057b0d40c.png" width=50%>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Alexaスキル「神戸の散歩」のデモ動画 <a href="https://t.co/e0ML0tKAQ5">https://t.co/e0ML0tKAQ5</a> via <a href="https://twitter.com/YouTube?ref_src=twsrc%5Etfw">@YouTube</a></p>&mdash; Ryota Ikeuchi (@IkeuchiRyota) <a href="https://twitter.com/IkeuchiRyota/status/1158735284856426497?ref_src=twsrc%5Etfw">August 6, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

#システム概要
![システム図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239549/8e8804e9-a17e-4890-8ae1-7f516b4e1680.png)

いくつかAPIを使って検索し、ユーザーの条件（日付＆歩く時間）に合った 結果（イベント＆駅）を求めます。
その結果を、Alexaから読み上げ＆メール送信します。


#ポイント
- 「歩きたい時間」でコースを検索する　（これは ちょっとユニークかと）
- わくわくさせて盛り上げる効果音、コース名（がっつりコースとか）、画面イラスト（歩く人が会話ごとに動く）
- メールのリンクからGoogleMapアプリを開ける　（散歩中にスマホでコース確認できる）（駅の変更などはスマホ画面で簡単にセルフでどうぞ）
- 画面UIも活用するがスマホの方が適している場合はそちらを使う　（会話が長くなりすぎないように詳細はメールに任せる）


#詳細
github: https://github.com/ryotaikeuchi/kobe-no-sanpo-alexa-skill

###画面表示（APL）
シミュレータ（alexa developer console）と実機で表示に違いがあり、なかなか辛かったです。このあたりは改善されていくようですが。シミュレータでうまくいかなくても絶望せずに実機でも確認するのが重要でした。
背景色を変えるにはFrameコンポーネントを使う必要がありますがこれは子を1つしか持てないので、「Frame - Container1つ - Container複数」という構成にしました。慣れている人には当然かもしれませんが、思いつくのに時間かかったです。（ちなみに背景は土のイメージの色です）

###効果音
[Alexa Skills Kitサウンドライブラリー](https://developer.amazon.com/ja/docs/custom-skills/ask-soundlibrary.html)を使いました。簡単につかえて便利ですね。

###会話
ユーザーが、質問通りに"日付"と"歩きたい時間"を1つずつ答えるのでなく、一度に答える（「明日30分」とか）ことも想定しています。
その他、オライリーの『デザイニング・ボイスユーザーインターフェース』が非常に参考になりました。もっと何度も読んで体に染付けたい。


#おわりに
- 当初APLにはあまり興味がなかったのですが、[コーデ相談 by WEAR](https://research.zozo.com/product/alexa/index.html)を使ってみて感動し、手を出してみました。大変だったけど、勉強になったはず。
- 検索って初めてやりましたが、奥が深くて難しいと感じました。いろいろと妥協しました。
- 比較的使い慣れたPython+Numpyの環境で開発したのですが、いろいろあってデプロイに毎回3分もかかってしまい、開発に時間がかかってしまいました。モチベーションにも関わるので、こういうところは重要ですね。
- AlexaDayのコンテストでのプレゼンでは聴衆の皆さんのノリがよくて、非常にありがたかったです。ちょっとボケたら漏れなく反応してくれて。プレゼン途中で拍手まで起きて…あんなに気持ちいいプレゼンはもう一生なさそう。思い切って、変なネタに振ってみたアイデアでしたが、運良くハマって優勝できてうれしかったです。


#参考
####使用API
- [SimpleAPI](http://map.simpleapi.net/)
- [KOBE TODAYイベント情報（Open Data Kobe）](https://data.city.kobe.lg.jp/data/dataset/kobe-today)
- [Google Maps Platform Geocoding API](https://developers.google.com/maps/documentation/geocoding/intro)
- [Google Maps Platform Directions API](https://developers.google.com/maps/documentation/directions/intro)
- [Google Maps Platform Directions URL](https://developers.google.com/maps/documentation/urls/guide#directions-action)

####その他参考にさせていただいた記事など
- 神戸のトイレマップ（[Alexaページ](https://www.amazon.co.jp/%E3%81%82%E3%82%84%E3%81%8B-%E7%A5%9E%E6%88%B8%E3%81%AE%E3%83%88%E3%82%A4%E3%83%AC%E3%83%9E%E3%83%83%E3%83%97/dp/B07QGCKDJ1),
[github](https://github.com/ayaka-tajiri/kobe-toilet-map-public)）
　APLなど。
- [Python で DBpedia から情報抽出する](https://hironsan.hatenablog.com/entry/python-dbpedia-sparql)　SPARQL関連。
- [30分くらいでAlexa Skills Kit SDK for Python (Beta) を使ったAlexa スキルを作る！](https://qiita.com/sumihiro3/items/0a7b56671ed3f1864b89#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E9%96%8B%E7%99%BA)　Pythonでの開発環境。
- [AWS LambdaでNumpy、Scipyを使ってみる！](https://dev.classmethod.jp/cloud/serverless-framework-lambda-numpy-scipy/)　Numpyを使うために。
- [メモメール（Alexaスキル）](https://www.amazon.co.jp/%E5%9C%92-%E9%A0%86%E4%B8%80-%E3%83%A1%E3%83%A2%E3%83%A1%E3%83%BC%E3%83%AB/dp/B07L9QZFDD)　メール送信など。


####ボツにしたアイデア
- 歩いた時間から消費カロリーに換算して、それに相当する食べ物で表現する（ご飯１杯分コースとか）
- 家から最寄り駅までの徒歩も考慮する（やりだすと難しい）
- 路線を考慮して検索する（家の最寄り駅と出来るだけ同じ路線にするとか）
- 検索するイベントの種類をユーザーが選べるようにする（会話が増えるのは困るが）
- Alexa対応イヤホンを使ってスキルを起動し、歩きながら言った感想を投稿できるようにする（歩きながら感想というのはユニークかと）