子供の公文式学習を Google Assistant で見守る。【Raspberry Pi / AIY Projects: Do-it-yourself AI】

娘達（双子・6歳）も早いもので来年から小学生。就学前に春先から公文式に通い始めました。そこで毎日行う宿題を家族（とGoogle Assistant）で見守る仕組みを考えてみました。

## 公文式学習法

![Kumon Method Logo.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Kumon_Method_Logo.svg/1200px-Kumon_Method_Logo.svg.png)
By [Kumon](http://www.kumon.com/), パブリック・ドメイン



> 公文式の特長 ～ 公文式学習とは解き方を教わるのではなく、自分の力で教材の問題を解く学習法で、「やればできる」という自己肯定感を育み、未知の領域にも、自分から挑戦する力を培う。公文式は、一人ひとりの「可能性の追求」を目指す教育です。 - 公式HPより

![home-work-time-3.png](https://qiita-image-store.s3.amazonaws.com/0/47128/41d6016c-d714-6cc4-850c-2e2ed1d11041.png)

独自の教材を利用して、自分で学ぶ力を身につけていきます。算数であれば毎日10分の間に教材10枚を解答します。早く、正確に学習していくことがポイントになります。

## 家族で共有する

宿題に掛かった時間は未就学児の場合は親が記入します。意外と毎日正確に時間を計るのは大変な為（双子だとなおさら）、電子工作機器を利用してこんな仕組みを考えてみました。

![DSC_0132.jpg](https://qiita-image-store.s3.amazonaws.com/0/47128/ea0f38d5-45d4-91c5-1f00-651ea8a0d036.jpeg)

Seeed社のWioNodeとGroveシステムを使用したタイマーを作りました。ボタンを押すと10分のカウントダウンが始まります。終了したタイミングで再度ボタンを押すことで掛かった時間を計る事が出来ます。（10分以上経過した場合はタイマーは自動で終了します）

ちょっとこだわったポイントは、子供が毎日使うものなので単3電池3本で駆動させている事です。電源を入れるとRaspberryPiに立てたサーバーとwebsocketで接続されます。

計った時間はIFTTT経由で様々なサービスへ送信する事が可能です。LINEに送信することで、両親に情報共有が簡単に行えます。ここでは通知用に作成したLINEグループに送信しています。

![home-work-time-1.png](https://qiita-image-store.s3.amazonaws.com/0/47128/a7fefdb5-b8f8-a81b-119b-227773c99afe.png)

外出先からも宿題が終わったタイミングを通知で確認することが出来ます。

![home-work-time-8.png](https://qiita-image-store.s3.amazonaws.com/0/47128/ca3492ce-343c-fbdb-cab4-fb4439823a33.png)


LINEへの送信と合わせてGoogleスプレッドシートに学習時間を書きこむ様にしました。学習した日時と合わせ、10分以上経過した場合は印を付けておきます。

## GoogleAssistantで見守る

![Actions on Google.png](https://qiita-image-store.s3.amazonaws.com/0/47128/f7556fc5-1f10-fb57-23a1-994bac464c86.png)

サポート役としてGoogle Assistantを活用してみることにしました。RaspberryPiに搭載したGoogle Assistant API経由で使用します。

[Homework Time - Google Assistant app - Youtube](https://www.youtube.com/watch?v=tJtANzVOpB8)

GoogleスプレッドシートのAPIを利用して、GoogleAssistantから学習状況を確認出来ます。こんな感じ。

![Video Caption Maker 2017-07-29 19-04-11.png](https://qiita-image-store.s3.amazonaws.com/0/47128/f01e4750-3b17-ad21-c085-f2fb84b02617.png)

api.aiのintentsを利用して、スプレッドシートのデータを呼び出します。ここでは「名前＋日付」で検索します。「長女（Yolanda-仮名）＋日付（Today-ここでは2017年7月29日）」のjsonデータをActions on Googleにリクエストします。

日付はapi.aiのentityを利用するので、「yesterday（昨日）」「day before yesterday（一昨日）」「three days ago（三日前）」など口語の意図を汲み取ってくれます。

![Video Caption Maker 2017-07-29 19-04-37.png](https://qiita-image-store.s3.amazonaws.com/0/47128/51617da5-d7f7-c595-bbbf-d98f9ee9518e.png)

この日は朝から宿題をやったので、10時4分から10時11分まで掛かった事が分かります。

日にちだけの確認だけでなく、期間を指定して、10分の時間内に宿題が出来たかどうかを確認出来ます。こんな感じです。

![Video Caption Maker 2017-07-29 19-29-12.png](https://qiita-image-store.s3.amazonaws.com/0/47128/638fcaf3-6ee9-2189-c7a9-ba10105b0d1e.png)

ここでは「名前＋期間」で検索します。「次女（Amanda-仮名）＋期間（Last week-ここでは2017年7月17日から2017年7月23日）」のjsonデータをActions on Googleにリクエストします。

期間もapi.aiのentityを利用します。「last week（先週）」「this month（今月）」「last month（先月）」など口語で指定した期間を意図通りに汲み取ってくれます。

![Video Caption Maker 2017-07-29 19-29-32.png](https://qiita-image-store.s3.amazonaws.com/0/47128/653af972-075e-4d8e-dbe7-6c15f8eb971a.png)

時間以内に宿題が出来た回数と出来なかった回数を教えてくれます。

![home-work-time-2.png](https://qiita-image-store.s3.amazonaws.com/0/47128/9422b34e-3d73-5d54-3244-5f7be3c51686.png)

公文式学習では解答が正解している事だけでなく、時間以内に出来ているかも次にステップに進むポイントになります。ポイントを絞って一緒に見直しをします。

## 仕組み

### Wio Node & IFTTT

![wio-node (1).png](https://qiita-image-store.s3.amazonaws.com/0/47128/bcb65a49-82da-6147-ba9f-484e97236e3e.png)

#### 1. Wio Node
[WioNode](http://wiki.seeed.cc/Wio_Node/)に[Grove - Button](http://wiki.seeed.cc/Grove-Button/)と[Grove - 4-Digit Display](http://wiki.seeed.cc/Grove-4-Digit_Display/)をセッティングし、APIを使用可能にします。今回はアメリカリージョンを選択しました。子供が二人なので2台用意します。

#### 2. websocket
Seeed社のAPIを受信出来る様にRaspberryPiにnode.jsでサーバーを立てます。
websocketを利用してボタンの押下データを受信し、カウントダウン時間を送信します。合わせて開始時間と終了時間を配列に格納します。

[Homework-Time/RaspberryPi/wio-node/app.js](https://github.com/PonDad/Homework-Time/blob/master/RaspberryPi/wio-node/app.js)

[Homework-Time/RaspberryPi/wio-node/app2.js](https://github.com/PonDad/Homework-Time/blob/master/RaspberryPi/wio-node/app2.js)

#### 3.PM2
プロセス管理は[PM2](http://pm2.keymetrics.io/)を利用してデーモン化しました。WioNodeの電源がオンになるとwebsocket接続されます。

#### 4.IFTTT
[IFTTT](https://ifttt.com/discover)にアカウントを作り、[webhook](https://ifttt.com/maker_webhooks)をトリガーとして利用できる様にしておきます。

#### 5.webhook
RaspberryPiのサーバーから宿題の開始・終了の日時をwebhookのエンドポイントに送信します。webhookをトリガーとして、受信した宿題の開始・終了の日時をLINEとGoogleスプレッドシートに送信します。



### Raspberry Pi & Google Assistant SDK

![google-assistant.png](https://qiita-image-store.s3.amazonaws.com/0/47128/63ef4e98-99aa-452e-ee0c-5f1bc449ad66.png)

#### 1.Google Assistant SDK
[Google Assistant SDK](https://developers.google.com/assistant/sdk/)をインストールし、RaspberryPiをGoogleHomeとして使用出来る様にしておきます。

#### 2.Actions on Google
[Actions on Google](https://developers.google.com/actions/)にて、プロジェクトを追加して、Google Assistantアプリを作成します。今回はアクションのトリガーに[api.ai](https://api.ai/)を利用しました。

[Homework-Time/APIai/](https://github.com/PonDad/Homework-Time/tree/master/APIai)

#### 3.Cloud Functions
Actions on GoogleはGoogle Cloud Platform上の[Cloud Functions](https://cloud.google.com/functions/?hl=ja)に実行ファイルを設置することで動作させる事が出来ます。

[Homework-Time/GCP/cloud_functions/](https://github.com/PonDad/Homework-Time/tree/master/GCP/cloud_functions)

#### 4.Sheets API v4
Googleスプレッドシートのデータを利用する為、[Sheets API v4](https://developers.google.com/sheets/api/?hl=ja)を利用します。今回はPyhonライブラリ[Python Quickstart](https://developers.google.com/sheets/api/quickstart/python)を利用しOauth2認証を行います。

[Homework-Time/RaspberryPi/spread-sheet/](https://github.com/PonDad/Homework-Time/tree/master/RaspberryPi/spread-sheet)

#### 5.ngrok
Cloud FunctionsからRaspberryPiに接続するために、[ngrok](https://ngrok.com/)を利用して接続します。管理しやすい様にnode.jsから起動させてみました。

[Homework-Time/RaspberryPi/ngrok/](https://github.com/PonDad/Homework-Time/tree/master/RaspberryPi/ngrok)


## GitHub

[PonDad/Homework-Time - GitHub](https://github.com/PonDad/Homework-Time)

## まとめ

電気工作器機を使って、子供達の公文式学習を見守る仕組みを考えてみました。子供達はタイマーを気に入った様で、宿題のたびに引っ張り出して毎日使っています。

子供に対し日々関心を持ち続けるのはなかなか大変なもの。GoogleAssistantが良いサポート役になるといいなと思います。では。

## 追記：2017年8月28日

Google Assistant のiOSアプリが日本でも使用出来るようになりました。

Actions on Googleが日本語対応していない為、自作アプリは英語でしか利用出来ませんが手持ちのiPhone6Sで試してみました。

[Homework Time - Google Assistant app on iOS - YouTube](https://youtu.be/HC3oA2nDHF4)



![2017-08-28 19_52_52.gif](https://qiita-image-store.s3.amazonaws.com/0/47128/157c394f-3893-29eb-e149-3d938cdb2fff.gif)

文字入力だけでなく、音声入力にも対応しています。Cloud Functionsで`app.ask`の指定をすると、Google Assistantが入力を繰り返すのでマイクボタンを何度も押す必要がありません。

![2017-08-28 19_58_07.gif](https://qiita-image-store.s3.amazonaws.com/0/47128/682bb020-8b1f-2d22-b113-aa988c4339d8.gif)

Raspberry Piに立てたサーバー経由でデータを読み込む事が出来ました。音声認識がキビキビしているので使い心地がとても良いです。

Google Homeも期待出来そうですね。Actions on Googleの日本語対応が待ち遠しいです。では。