[ローカル > IBM Cloud に移行] Google Home でイベントスケジュールを自動アナウンス

今年イベントブース展示用に、`Google Home`, `Node-RED`, `kintone` 連携でこんなカスタマイズを作りました。

**[📣Google Home でイベントスケジュールを自動アナウンス
](https://developer.cybozu.io/hc/ja/articles/360030528812)**

当初、ローカルに Node-RED インストールして実行という方法で作ったので、毎回デモしようにもセットアップが大変...
ということで、**`IBM Cloud に乗せ換えたver.`** も備忘録として書いておきます！

他環境に移植しやすいようにするためであれば docker で構築する手もありますが、結局ローカル実行になるので、今回は持ち運び便利なクラウドを選びました。

# Overview
kintone に登録しているイベントのタイムテーブルデータを一定時間おきにチェックして、今から10分後までに始まるセッションを Google Home でお知らせします。
![シナリオ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90265/0dca2e15-7eae-632c-cb68-7bbbbf475f18.png)

- 10分後までに始まるセッションがある場合は、そのセッション名をお知らせ
- 10分後までに始まるセッションがない場合は、その他のコンテンツをお知らせ

# Customization
以下の設定は元記事を参考にしてください。
今回は IBM Cloud 設定部分のみ書きます。

- kintone アプリ作成
- Google Home アプリのインストールと設定
- Node-RED の処理フロー設定
<img width="1209" alt="Node-RED.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90265/a8ea311e-821c-4096-68b8-eab3bb51cb25.png">

# IBM Cloud Setting
Node-RED は IBM社が開発しているので、セットアップも楽ちんです。
IBM Cloud 上の Node-RED では、Cloudant データベースインスタンスや、各種 IBM クラウドサービスに簡単にアクセスできるノード一覧も提供されるので、やはり本家でやるのが良いなという感じです。

以下設定手順です。

- [こちらより](https://cloud.ibm.com/login) IBM Cloud にログイン（Lite アカウントを利用）[^1]
- `Node-RED Starter` をカタログで検索
- `Cloud Foundry アプリ` の作成（* ライトプランのアプリは無料）     
  作成手順の詳細は[こちら](https://qiita.com/makaishi2/items/ed9d4412331d7d65fde5)
- Node-RED を立ち上げて、[こちら](https://developer.cybozu.io/hc/ja/articles/360030528812-Google-Home-%E3%81%A7%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%82%92%E8%87%AA%E5%8B%95%E3%82%A2%E3%83%8A%E3%82%A6%E3%83%B3%E3%82%B9#step4)を参考にフローの詳細設定を行う
    - `GetNextSessions` function にて、JST に時刻を合わせる（リージョンが違う場合）     
  `.zone('+0900')` を追記

```js
// moment.js のインストール
const moment = require('moment');

// 現在時刻
const now = moment().zone('+0900').format('HH:mm');

// 10分後の時刻
const afterTenMins = moment().zone('+0900').add('minutes', 10).format('HH:mm');
```
- 右上の `デプロイ` ボタンでデプロイ実行
<img width="1209" alt="NodeRED.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90265/101147a1-fecf-37d3-fbb9-ad29f3314393.png">

- `デバッグ欄` にて HTTP リクエストや Google Home からの発話が上手くいくか動作確認

> - フローは `flow.json` で書き出せるので、ローカルに保存しておくと安心。     
> <img width="257" alt="flow書き出し.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90265/1d54cd2e-55c2-99a9-cf7a-ed7faeded59c.png">
> <img width="692" alt="flow.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90265/0daa223c-5012-11cd-c93f-1b494b984b35.png">

> - さらに IBM Cloud にデプロイする場合は、こちらの記事を参考に設定を行う。
> [IBM Cloud DevOps ToolChainを利用してNode-RED環境を　簡単にデプロイする方法](https://qiita.com/ssakaigawa/items/d5f042810dcbf7d4571b)

# Reference
- [IBMクラウドで実行する](https://nodered.jp/docs/getting-started/ibmcloud)
- [Node-RED Starter を使用したアプリの作成](https://cloud.ibm.com/docs/starters/Node-RED?topic=starters-gettingstarted&locale=ja)
- [IBM LiteアカウントでNode-REDインスタンスを作成する](https://qiita.com/makaishi2/items/ed9d4412331d7d65fde5)
- [IBM Cloud DevOps ToolChainを利用してNode-RED環境を　簡単にデプロイする方法](https://qiita.com/ssakaigawa/items/d5f042810dcbf7d4571b)
- [GitHub] [node-red-bluemix-starter](https://github.com/ibmets/node-red-bluemix-starter)
- [【ハンズオン】Node-RED入門編](https://qiita.com/joohounsong/items/5b5241df84f910df6627)

[^1]: IBM Cloud Lite アカウントで作成したインスタンスには、「10日間開発なしでアプリの自動停止」, 「30日間活動なしでサービスの自動削除」 というルールがあるので要注意