娘の好きな献立をAlexaに吹き込み,買い物前の妻にLINEレコメンドしてみた

#食べてくれたものは即ストックし、リピートしたい
　子供は皆そうかもしれないが、1歳の娘は<B>食事の好き嫌いがはっきりしている。</B>食べてくれた献立は忘れずにストックしておき、いつかまた作ってあげたいもの。<B>Amazon Alexaに娘が食べてくれた料理を吹き込み、献立リストから妻に定期的にレコメンドしてくれるLINE通知サービス</B>を作ってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737339/4a75b2c3-6ec1-6e6b-456f-6c61b2b9eb13.png)

１．娘が良く食べてくれた献立に気づいたら、その場でAlexaに献立を吹き込む
２．IFTTTが献立リストへの追加を検知しGoogleスプレッドシートに書き込む
３．Googleスプレッドシートに連動したGoogle Apps Scriptが献立リストからランダムに3品をWebhookURLにpostする
４．Integromatが提案された献立を妻へLINE通知する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737339/97a05ce1-6b9f-84c7-e3c3-d29e535ed6c6.png)

#構成
<B>１．IFTTT</B>
　実はAmazon AlexaをIFTTTでカスタマイズできる内容は限定的である。Google Homeなら可能らしいが、好きなキーワードを発した後の操作を埋め込むことができない。好きなフレーズを使って操作できるのは「Say a specific phrase」というアプレットのみであり、Google Spread Sheetへは「Triggered At」というトリガーを埋め込むことしかできないため、<B>本来は、「〇〇ちゃんの好物リスト」に「ハンバーグを追加」といった制御を効かせたかった</B>が、それはIFTTT＋Alexaではできないようだ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737339/76ff2c6e-2a3c-5c21-df45-ead0059ed9e1.png)

 よって、今回は既存の「Todoリストへの追加をトリガーに設定できるアプレット」を採用し、<B>「アレクサ、Todoリストに、ハンバーグを追加して」</B>と言えば、Google Spread Sheetに、献立が追加される仕組みとした。この点どうにかできないか考えたが、解決案を導き出せなかった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737339/e432210e-6ee1-e1ca-c1ee-9404e998fcf7.png)

下記、参考までにアプレットの設定内容詳細を記載しておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737339/b6870800-38bf-9fa2-3788-5394fd41037f.png)

<B>２．Google Spread Sheet</B>
1列目にIFTTTで定義したAddedItem、2列目にCreateTimeを記録するフォーマットを作成した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737339/7de88035-e8df-029c-f1f5-af89d0b14231.png)

<B>３．Google Apps Script</B>
「1～何らかの文字列が入力されているA列の最大行」を範囲にランダムで3つ献立を選択し、textでHTTPリクエスト送信する。

```js:food.gs
function myOutgoingFunction(){
 // Webhook URL
 const URL='https://xxxxxxxxxxxxxxxxxxxxxxxxxxxx';

 //シートは一つしかないのでID指定の必要なし
 const sheet = SpreadsheetApp.getActiveSheet();

 //都度乱数を生成
 //1〜何らかの文字列が入力されているA列の最大行数の範囲
 const rNum1 = Math.floor(Math.random()* sheet.getLastRow())+1;
 const rNum2 = Math.floor(Math.random()* sheet.getLastRow())+1;
 const rNum3 = Math.floor(Math.random()* sheet.getLastRow())+1;
  
 //スプレッドシートのA列x番目の料理を代入
 const food1 = sheet.getRange(rNum1,1).getValue();
 const food2 = sheet.getRange(rNum2,1).getValue();
 const food3 = sheet.getRange(rNum3,1).getValue();

 // POSTする中身
 const Payload = {
    'text': food1 +"、" + food2 +"、" + food3
  };

 //パラメータを定義する
 const params = {
     'method'  : 'post',
     'contentType': 'application/json',
     'payload' : JSON.stringify(Payload),
   }
 // HTTPリクエスト送信
 const res = UrlFetchApp.fetch(URL,params);
}
```
　また、毎日妻が献立を考える際に、このLINE通知を参考にしてもらいたいと思ったので、<B>Google Apps Scriptのトリガー設定にて、毎朝定期的にレコメンドしてくれる</B>ようにした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737339/3a3fc1e4-c658-1797-51d2-4b53dd1dc2fa.png)

<B>４．Integromat</B>
　Google Apps Scriptから<B>HTTPリクエストを受けるWebhookURLを取得し、LINE Notificationと連携</B>し妻のLINEへ通知する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737339/323a12fe-085b-95d8-8f10-e164754fe353.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737339/b938276a-cced-d66d-3385-05fd4db8e2c2.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/737339/c90818b2-dc22-ba20-c8d2-23e586c3091c.png)

#子育ては、基本的に手がふさがっている
　子育ては基本的に手がふさがっているので、「簡単に使えること」が子育てを支援するツールには欠かせない要素だと考えている。その点、<B>Amazon Alexaなどのスマートスピーカーとの相性は抜群であるはず</B>なので、今後も時間を見つけて、家庭内課題を解決できる何か面白いツールを作ってみたいと思います。

#おまけ
　子供は好きな食べ物もなぜか急に食べなくなることがあります。1週間前はあんなに食べたのに‥みたいなことも良くあります。ただ、うちの娘は「納豆」だけは、毎朝2パック食べ続けています。お肉をあまり食べたがらないので、本当に重要なたんぱく源です。納豆に感謝です。</B>