Google HomeからWunderlistに音声でタスクを登録する

最近とてもGoogle Homeにハマってます！
家ではRaspberry Piがサーバー代わりに動いているので

* [Google Home自身でYoutubeの音楽を再生する](https://qiita.com/odetarou/items/0e134ff845826d16170c)を参考にさせていただき、家で使っているSlackと連携させて音楽を流させたり
* 音声でエアコンやこたつを操作したり
* ごはんの記録を取ったり
* 朝は時報代わりに5分おきに時間を言わせたり
* 翌日の天気を言わせたり
* 朝の電車の遅延情報を言わせたり

しています♪

これまでSlackに遅延情報を流したり、エアコンやこたつは自作アプリで操作したりしていましたが、やっぱスマホを手に取るって家では手間なんですよね…
音声でできるってとても素晴らしいです(`･ω･´)

## はじめに
前置きが長くなりましたが、今回はタスクを音声で登録したいと思います。
有料でよければ[Remember The Milk](https://www.rememberthemilk.com)等でもできますが、できたら無料で、かつ上記で紹介したようなサーバーを用いず行いたいと思います。

そこで使うタスクツールは[Wunderlist](https://www.wunderlist.com)です。
Wunderlist自体はまだIFTTTにありませんが、メールでタスクを登録でき、メールアドレスもエイリアス（test@gmail.comがメインアドレスならtest+01@gmail.comとか）で複数登録できるため、この機能を使って自作してみます。
個人的には元々タスク管理にGoogle Keepのリストを使っていたのですが、使い勝手もそれに近い感じがしていてお気に入りです(･∀･)

## Wunderlist作業
### 新しいメールアドレスの追加
まずは以下からエイリアスのメールアドレスを登録します。
https://www.wunderlist.com/account/emails
1アドレスにつき1タスクで関連付けされるので、必要な分だけ登録しましょう。
エイリアスなので、普段使っているGmailに確認メールが届くハズです。
認証して完了です。

### タスクとメールアドレスの関連付け
次に登録したメールアドレスとタスクを紐付けます。
https://www.wunderlist.com/account/mailtowunderlist
「行き先…」を変える度にPOSTされるのは仕方ないんかな…

## Gmail作業
### Gmailにエイリアスを登録
[リファレンス](https://developers.google.com/apps-script/reference/gmail/gmail-app#sendEmail%28String,String,String,Object%29)にある通り、登録してあれば別のアドレスからGASを使って送信可能になるため、以下の設定を行います。
エイリアスだともしかしたら不要な作業かもしれませんが、試していません。

1. Gmailの右上、歯車アイコンを押下
1. 「アカウントとインポート」というタブを選択
1. 「他のメール アドレスを追加」を押下
1. 「メール アドレス」の欄にエイリアスのアドレスを入力して「次のステップ」ボタン押下

これで登録完了になります。

## SpreadSheet作業
SpreadSheetでは

1. シートを新規作成
1. GAS登録
1. トリガー設定

を行います。

### シート作成
何でもいいんですが、IFTTTに登録する際にフォルダと名前が必要になるため
今回は

* シート名 -> タスク登録
* フォルダ -> test

として話を進めます。

### GAS作成
作ったスプレッドシートに以下のスクリプトを登録します。
スクリプトは「ツール -> スクリプトエディタ…」で開けます。
![ツール](https://qiita-image-store.s3.amazonaws.com/0/90107/94b23a8c-764e-69b0-b0ff-9f8c4dd99eb8.png)

``` javascript:コード.gs
var sheet = SpreadsheetApp.getActiveSheet();

function exec() {
  var from = getData(1);
  var task = getData(2);
  mailSend(from, task);
}

function getData(col) {
  var lastrow = sheet.getLastRow();
  return sheet.getRange(lastrow, col).getValue();
}

function mailSend(strFrom, strTitle) {
  var strTo = 'me@wunderlist.com';
  var strSender = 'GAS';
  var strBody = 'GASより登録';
  
  GmailApp.sendEmail(
    strTo,
    strTitle.replace(/ /g, ''),
    strBody,
    {
      from: strFrom,
      name: strSender
    }
  );
}
```

ちなみにMailApp.sendEmailという関数もありますが、これではfromが設定できないそうです。
細かいエラーチェックとかはしてないので、そのあたりは適宜お願いします。
あとreplaceですが、Google Homeで送信される値は程よく半角スペースが入るようで、私は気持ち悪いので削除しています。

### トリガー設定
このような感じでexecをスプレッドシートの値が変わったら実行されるようにします。
![トリガー](https://qiita-image-store.s3.amazonaws.com/0/90107/b45cd9f3-d2b9-8650-29ff-8bdbd99917a2.png)

## IFTTT作業
最後にIFTTTと連携させれば完成です。
今回はサンプルなので、このように登録しましたが、内容は自由でいいと思います。
![IFTTT](https://qiita-image-store.s3.amazonaws.com/0/90107/a2faa74c-cd29-0c25-ebff-602f3eebe02f.png)

Formatted rowにあるように、左にタスクと関連付けしたメールアドレスを記入するのがポイントです。
このような感じで、音声でSpreadSheetに行追加するレシピを作ります。
そうすることで上記で登録したスクリプトが値の変更によって発火し、スクリプトがメールを送信してタスクが登録される…という動きをしてくれます。
これをタスク分（メールアドレスと紐付けた分）登録していけば、音声でそれぞれ好きなタスクに登録できるようになります！

## 余談
ちなみにWunderlist、エンジニアにも優しい設計(？)で、APIがサクッと作れます。
[ドキュメント](https://developer.wunderlist.com/documentation)もしっかり整備されているのは好印象ですね。
これを使えばプログラムを組む必要はありますが、まだGoogle Homeに実装されていない音声でのリマインダー登録も可能で、我が家ではとても便利に使っています。

**家では恥ずかしがらず、大きな声で「OK、Google」と言って楽をしましょう(*･ω･)ﾉ**