育児ゼロアクションプロジェクト(IKZAP)ができるまで

[ヴァル研究所 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/val) 7日目の記事です。
##この投稿は
- ピジョン株式会社のメディア「コモドライフ」で　[IKZAP(育児ゼロアクションプロジェクト）](https://comodo.life/list/ikzap/)の試みについて掲載していただきました
- ここに掲載された、ハンズフリーで育児ログをとる仕組みの作り方を解説
- IFTTTを活用することで大部分がノンプログラミングでできる仕組みになっています

##IKZAP(育児ゼロアクションプロジェクト)とは
- 育児中は文字通り「手が離せない」ので、記録をとりたくてもスマホやメモに手を伸ばすことすら困難な状況
- そんな状況の助けになればと、スマートスピーカーを使ってハンズフリーで育児ログを取る仕組みを作った
    - GoogleHome、Clova、GoogleSpreadsheet、GAS、IFTTTだけで構築
    - IFTTTはサービスとサービスをTrigger、Actionで連携させる
    - GoogleHomeが「耳」、Clovaが「口」、LINEで「共有」

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152460/8723cfc8-c2cc-3997-1427-0d525227d663.png)

##GoogleHomeに話してログをスプレッドシートに書き込む
IFTTT上ではGoogleHomeに関するサービスは「Google Assistant」の扱いになっています。
このGoogle Assistantに入力した(話しかけた)内容から、数値やテキストをスプレッドシートに書き込む仕組みです。

**Trigger**

- Google Assistantの「Say a simple phrase (**シンプルなフレーズ**を言ったら)」
    - 例：「**おしっこ出たよ**」「**寝ました**」「**授乳スタート**」
- Google Assistantの「Say a phrase with a number (**番号**のあるフレーズを言ったら)」
    - 例：「授乳**150**CC」「体温**36.4**℃」「身長**83**センチメートル」
       - この数値の部分だけをとることができます
- Google Assistantの「Say a phrase with a text ingredient(**テキスト**を含むフレーズを言ったら)」
    - 例：「離乳食 **バナナを半分** 食べました」
       - この「バナナを半分」のテキストだけをとることができます
- Google Assistantの「Say a phrase with both a number and a text ingredient(**テキスト**と**数字**を含む言葉を言ったら)」
    - 例：「飲み物 **麦茶**を**100**CC」「飲み物 **ジュース**を**200**CC」
       - 「麦茶、ジュース」というテキストと、数値をとることができます

**Action**

- Google Spreadsheetの「Add row to spreadsheet(行を追加)」
    - とれた数値やテキストがスプレッドシートに記録されます
        - ログのタイムスタンプはGASで入れています  

※こんな感じで入ってきます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152460/f7b17ec1-9b89-7cda-981b-44cfab17f90b.png)
##スプレッドシートに書き込まれたログの内容をLINEに送信して、夫婦でリアルタイム共有
ログの内容をLINEに送信する仕組みです。
LINEを使うというのがIKZAPにおけるキモで、夫婦や家族とのコミュニケーションに使っているツールをそのまま活用することで「わざわざ見に行くのではなく、自然に目に入るようになる」ことを狙っています。

**Trigger**

- Google Assistantの「New row added to spreadsheet(新しい行が追加されたら)」
   - スプレッドシートにログが入ることをトリガーにしています

**Action**

- LINEの「Send message (LINEにメッセージを送信)」
   - 送信したい行の数値やテキストをからメッセージを作成、送信します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152460/24bc2397-0c06-aa62-d4a5-7965955301da.png)

##授乳関係のログは別処理して活用
授乳に関する以下のログを別のスプレッドシートで管理しています。
・授乳開始、終了の時刻
・授乳(量＝粉ミルク)の時刻

ここから、関数で
・授乳にかけた時間
・最後に授乳した時刻
・最後に授乳してから○分後
を算出して、あるセルに結果が入るようにし、それをトリガーにLINEへメッセージを送信します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152460/777f801a-b25f-2480-1438-2a103ac21efb.png)


**Trigger**

- Google Assistantの「Cell updated in spreadsheet (Spreadsheet内のあるセルが更新されたら)」
   - スプレッドシート内で算出結果の入るセルの更新をトリガーにしています

**Action**

- LINEの「Send message (LINEにメッセージを送信)」
   - 送信したい行の数値やテキストをからメッセージを作成、送信します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152460/4eb38f4c-8803-e1f2-51b9-16fadb8a8885.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152460/fc7db996-93c3-9950-19be-ad12df7907c6.png)

##前日のまとめをLINEとClovaに送信
下準備として、スプレッドシート上で関数等を使って前日分のおしっこなどの回数をまとめておきます。
これを使ったメッセージテキストを作成し、毎朝決まった時間などに送信します。

**Trigger**

- Date & Timeの「Every day at(毎日決まった時刻に)」
   - スプレッドシート内で算出結果の入るセルの更新をトリガーにしています

**Action**

- LINEの「Send message (LINEにメッセージを送信)」
   - まとめておいた前日のログ回数からメッセージを作成、送信します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152460/619b107d-f8e6-6bd5-223c-df33b6e575bc.png)

##モニターさんからのフィードバック
[IKZAP](https://comodo.life/list/ikzap/)の記事の方でもまとめていますが、利用中にパパの育児への関わり方が大きく変化したようです。

普段の(パパが仕事に出ていていないときの)様子がわかることで、関わり方がわかったともおっしゃっていて、開発者目線では”育児”というプロジェクトの中で「進捗や状況を共有・可視化」することで、タスク実施の「属人化(ワンオペ育児)」を避けることができたと感じています。

##次回予告？
”ほぼ”ノンプログラミングで作っているものの、部分的にはGASやスプレッドシート上で関数を使って処理した部分があります。
ここについては12/16の投稿でまとめて解説する予定です(エンジニアではない私がいかにわかる知識だけでこれを作り上げたかっていう苦労話になる予感ｗ)。

##参考
この投稿は下記のLT時の内容をベースに作成しています。
[IKZAP(育児ゼロアクションプロジェクト)開発裏話](https://www.slideshare.net/itow_ponde/ikzap)