CarPlay徹底活用で、未来を体験しよう！（カローラ・ツーリングでGo!!)

# 0.最近のクルマのコネクティビティ動向

トヨタ自動車では2019/9/17発売の新型カローラ、カローラ・ツーリング、モデルチェンジしたカローラ・スポーツ、カムリ、CH-Rと、次々と[ディスプレイ・オーディオ](https://toyota.jp/dop/navi/displayaudio/)の搭載が始まりました。ついにトヨタもApple CarPlay、Google Autoとも連携開始です(※1：__要:オプション__ ) 日産自動車、マツダ、本田技研工業、各社さんも同様にCarPlay/Google Autoにすでに対応されているようです。なので、これで各社さんのコネクティビティ環境が出揃ったと言えます。

(トヨタさんの[ホームページ](https://toyota.jp/dop/navi/displayaudio/)より、iOS CarPlayの画面が見える！）
![DA](https://toyota.jp/pages/contents/dop/navi/displayaudio/image/img_visual_pc.png)

私事ではありますが、先日、カローラ・ツーリングが納車されました。（写真はトヨタさん、[カローラ・ツーリング製品ページ](https://toyota.jp/corollatouring/design/)より）
![カローラツーリング](https://toyota.jp/pages/contents/corollatouring/001_p_001/image/design/exterior1.jpg)

なので、うれしくて、毎日のようにディスプレイオーディオを触っています。本稿では、そのときに見つけた、CarPlayのディープな使い方を紹介したいと思います。Apple CarPlay/Google Autoはクルマの未来を拓いていく機能だと確信しています。CarPlayを活用して未来を体験してみましょう！

# 1.こんなことができます!

## 1.1. 難易度レベル1: クルマに話しかけてメモ

クルマを運転している最中はメモを取ることはできません。ですので、思いついたことはメモを取ってもらいましょう。


## 1.2.難易度レベル2:クルマに話しかけてメッセージを送信

「これから帰るよ～」などのメッセージを、車を運転しながら送信することができます。

[![メッセージ](http://img.youtube.com/vi/-RrQhzgPACA/0.jpg)](http://www.youtube.com/watch?v=-RrQhzgPACA)

## 1.3.難易度レベル3: クルマに話しかけて、おうちの家電を操作

おうちの家電をクルマから操作することが可能です。外出先から帰宅前にエアコンを前もってかけておくなどは酷暑の日には嬉しい限りです。クルマからエアコンを動かしてみましょう。

[![エアコン](http://img.youtube.com/vi/VI1fy-wlUgg/0.jpg)](http://www.youtube.com/watch?v=VI1fy-wlUgg)

# 2.タネ明かし。どう実現するのか。

さて、このトリックのタネ、どうやって実現したか、わかりましたか？早速タネ明かしをしましょう。今回のトリックのキモはCarPlayからSiriを経由し、iOSのショートカット・アプリを利用することにあります。iOSショートカット・アプリで作成したショートカットはSiriから起動でき、さらにWeb APIを呼び出すことができます。Siriから受けた命令を様々なWebサービスへ伝える事ができるのです。そのWebサービスに後述のIFTTTを使うと、更に様々なサービスへと連携を拡げることができます。

![CarPlay_system.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/628d5dfc-bfb1-76e6-d76d-7219bfb06db4.png)

## 2.1.難易度レベル1: クルマに話しかけてメモ

実はこのケース、トリックは不要です。練習問題と思ってください。単にSiriにメモさせているだけです。IFTTTの必要もありません。ハンドルのトークボタンを押して、「メモして」と言ってみましょう。

> 「メモして」


## 2.2. 難易度レベル2: クルマに話しかけてメッセージを送信

ここからはWebサービスと連携を行うケースの説明となります。今回登場するIFTTTとiOSショートカットは使い方に癖があり、ちょっと取っつきにくいかもしれません。ただ仕組みさえ知ってしまえば、実はとても簡単なんです。なので、極力、画面キャプチャを使って丁寧に説明してみます。おかげで、ちょっと長くなっちゃいましたが、きちんと辿ればできるはずです。ぜひ、お試しください。

まず__[IFTTT](https://ifttt.com/)__サービスから説明していきます。IFTTTは__If This Then That__の略で、つまり、__「こんなこと」__が起きたら__「それ」__をするというサービスです。非常に単純な仕組みですが、IFTTTでは「こんなこと」や「それ」を、さまざまなサービスの中から自由に組み合わせられます。この組み合わせの力が非常に強力で、この組み合わせの力こそ、IFTTTの特徴といえます。

以下ではメッセージをSlackに送信する例を作ってみます。Slack以外とサービスを組み合わせることも簡単です。今回の例をあなたの連携してみたいサービスで参考にしてみてください。

### 2.2.1.クルマからメッセージを受け取り、Slackへメッセージを送るIFTTT連携の作成

少し順番が逆になってしまうのですが、最初に後段の動作から作っていきます。クルマからメッセージがやってくることが前提で、そのメッセージをWebhookで受け取り、Slackへ投稿するIFTTTを作ります。（この順で作るのは、後でデバッグを容易にするためです。）

まずはIFTTTにサインアップしましょう。

![IFTTT_signup.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/c7366b70-ff7f-56b6-0bb4-98a63d6add1c.png)

次にCreateをして、IF This Then Thatを作ってみましょう。

![IFTTT_create.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/daaadb65-2350-50a2-53b1-987b464ce130.png)

最初のThisにはWebhooksを指定します。

![IFTTT_this.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/78b5d334-ef93-3baa-bd0a-dd5a3a0f76b4.png)

![IFTTT_webhooks.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/82a36064-dd9d-e466-ed02-10effa82e8af.png)

Webhooksサービスにconnectします。

![IFTTT_connect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/4b3726a0-7887-f2a8-a333-e1063441a9d2.png)


Webhooksのvalue1パラメータにJSONでメッセージを付けてAPIを呼び出します。

![IFTTT_receive_web_request.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/7d8e9595-20bd-1509-3914-f729b59c3cec.png)

![IFTTT_trigger.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/2619ae6c-97bd-aa52-4929-f95ab67b5376.png)

次にThatですが、Slackへ接続します。

![IFTTT_that.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/51af2254-53d5-91c7-2fb2-b24126c97e66.png)

IFTTTから接続を行うため、Slackアカウントの認証などや連携の許可が必要です。それらが終わるとメッセージの投稿が選択できるようになります。

![IFTTT_slack_post.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/1756840c-9a79-1393-6841-24175b447c3c.png)

Action Fieldsですが、タイトルはカラでメッセージをAdd ingredient からValue1を選んでおきましょう。Value1はWebhooksをAPIを呼び出すときに付与されるパラメータ（つまりはクルマからもらうメッセージ）のことを意味します。

![IFTTT_action_fields.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/0bdfef53-292f-2223-3868-a65e13bf5c2f.png)

connectedの表示がされましたね。

![IFTTT_connected.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/833740db-b634-6e14-9194-665fc3322705.png)

ここまでの動作が正しいかWebhooksの動作を確認してみましょう。Slackに通知されていればOKです。Webhooks Serviceを開き、右上のドキュメントを開きます。そうすると、以下が表示されます。そこへ、今回作成したイベントやvalue1に値を埋めて__Test It__ボタンを押してみましょう。

![IFTTT_check_webhooks.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/23943605-3cb5-5417-c35d-b6a82df8af42.png)

正しくイベントとパラメータ値が設定できていれば、Slackに通知がやってきますね。もし通知までできていれば、ここまでは完璧です。（以降作業を進めますが、ここから作業がうまくいかない場合は、ここ以降の作業がまずいわけです。）

![slack_test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/b1ee4bba-da8c-341f-00e4-b33face7f2c0.png)

### 2.2.2. クルマの中でメッセージを聞いて、IFTTTに送るiOSショートカットの作成

メッセージがIFTTTまで届けば万全に動いてくれる仕組みはできました。次はクルマの側からIFTTTまでメッセージを送る仕掛けを作りましょう。iOS側から行うのは「１、ユーザーからのSiriの発話でメッセージをもらう。２、そのメッセージをvalue1キーの値に含めたJSONをつくる。３、そのJSONをパラメータにつけてIFTTTのAPIへリクエストをする」です。これらはiOSショートカットで実現できます。

IFTTTに続き、iOSショートカット・アプリの操作も独特で慣れるまで少しかかりますが、ショートカットの作成も頑張って説明してみますね。画面キャプチャに従って試してみてください。まずは右上のプラスマークから新しいショートカットを作ってみましょう。

![create_shortcut.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/1be1972a-9d4a-4eb4-e121-8a9e77d98d0f.png)

下図の右上の赤い部分で、ショートカットの名前を変更します。この変更した名前が、Siriショートカットになります。つまり、Siriに変更した名前を呼びかけると、このショートカットが実行されます。（今回は「メッセージを送って」としました。）次は具体的な処理の流れを作っていきます。下の検索欄から実行するアイテムを検索して足していきます。中央のブロックは、上から下へと、アイテムを足して出来た処理の流れを表しています。ちょっと操作していくとわかりますので、まずは試してみてください。

![shortcut_message_get.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/23f9c48d-17cc-eed2-8769-73713edb0932.png)

準備したテキストを読み上げ、それに対する回答をもらう、これらの操作で送りたいメッセージをSiri経由で取得することができました。

続いて取得できたメッセージを添えて、IFTTTのAPIへアクセスする部分を作ります。先ほどWebhooksで作成したIFTTTのイベントのURLをテキストに設定します。それから、テキスト値を変数へ設定し、変数の値（IFTTTのAPI)へアクセスします。

![shortcut_web_reqeuest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/bded4485-b1b1-be05-3fff-32a15eb8ab9a.png)

APIへのアクセスは単にWebコンテンツを表示するのと異なり、メッセージのデータを送る必要があるので、HTTPアクセスは通常のGETではなくPOSTメソッドを使う必要があります。なので、APIアクセスのところは詳細を以下のように設定してください。これでvalue1に送信するメッセージを添えて、IFTTTにアクセスすることができます。

![shortcut_web_reqeuest_detail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/36fca8fb-36cf-1913-ad54-5e16e35a0521.png)

最後に完了を通知します。テキストを準備して読み上げます。

![shortcut_read_aloud.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/d6522dd2-abb0-c24d-6096-6adeb5e7a0f9.png)

これでクルマから話しかけるだけでメッセージをSlackに送ることができます！

## 2.3. 難易度レベル3: クルマに話しかけて、おうちの家電を操作

おうち家電も仕掛けは同様です。IFTTTまで連携を作り、その後、家電リモコンのサービスへアクセスします。私はLive Smart社のリモコン(LS mini)を使っています。

![ls_mini.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/f4b8be52-d90d-c35d-7e41-ea56c8b0b6e6.jpeg)

LSサービスでは機器に設定してあるルールをIFTTT上から操作できるようになっていますので、__That__を設定するときに所定のルールを選択します。（図はエアコンをOFFにする方のルールです）

![ls_rule.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35954/0e4d2a13-984f-2f11-1e8f-b78f38ee1c48.png)


この設定でうちの中の家電が操作できるようになります。

#3.CarPlayの時代到来!! スマホアプリはCarPlayやSiriショートカットに対応しよう!!

冒頭に述べた通り、CarPlayはクルマ側の環境も整いつつあるだけでなく、iOS13でもCarPlayは過去最大のアップデートがされています。CarPlay は（たぶん、Google Autoも）大きくクルマの世界を拡張していくことは間違いありません。私はCarPlayのカギは、単にCarPlay対応アプリを作るだけではなく、本稿のようなSiriショートカットの使い方もポイントの一つだと考えています。

本稿で見たようにiOSのショートカット機能を使えば、SiriとWebサービスとが連携できます。ただ、この方法はiOSショートカットをユーザー自身に作ってもらわなくてはなりません。本稿でも説明に非常に手間がかかりました。よほどのマニアでないと難しいでしょう。一方でSiriショートカット自身を組み込んだアプリは、誰もが話しかけるだけで、クルマから簡単に操作ができます。ですので、アプリにSiriショートカットを埋め込む方法はおすすめです。

クルマの世界を拓くアプリを、今やあなたが開発できる環境になっています。もっと楽しいカーライフを一緒に作っていきましょう！

ふー、ギリギリだけど[東京モーターショー](https://www.tokyo-motorshow.com/)前に投稿出来てよかった。。。

(※1)Apple CarPlay/Android Auto使用にはカローラ、カローラ・ツーリングの標準搭載のSmartDeviceLinkではなく、TV視聴とのセットオプションが必要です。CarPlayをすると、テレビも付いてくるお得なセットですよ。