Alexa × IFTTT × GASで在宅ワークを乗り切るライフハック - 光るポモドーロと記録術

## 在宅ワーク、捗っていますか？
新型コロナの影響で自分はかれこれ3月から大学に行かない日々が続いています。多くの方が仕事や研究を在宅で行っているかと思いますが、なかなか家だと集中できないという方も少なくないはずです。
そこで自分はポモドーロ・テクニックと記録による見える化によってモチベーションを保つようにしています。
今回はalexaとIFTTTとGASの連携を行ったのでその説明をしたいと思います。

## 全体構成
![全体構成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236175/d49f48e2-57f6-61c2-ccd0-15841ad23248.png)

### フロー
自分「アレクサ、今から集中」
アレクサ「(電気を明るくする)」※

~25分~

アレクサ「(IFTTTでwebhook(GAS)を起動→集中した時間をGoogle カレンダーに記録)」
アレクサ「(電気を暗くする)」

~5分~

※へ戻る。(数回繰り返す。)
アレクサ「お疲れさまでした。」

このようにタイマーではなく部屋の明るさを変えることでポモドーロ・テクニックを実践します。さらに集中した時間を自動的にカレンダーに記録することで1日の中で自分がどれだけ集中できたかを見える化ができ、モチベーションを維持することが期待できます。

## GAS

IFTTTからpostされたデータを使ってGoogle カレンダーに記録をつけるスクリプトを作成します。今回IFTTTから送るデータは、カレンダーのタイトルと作業にかかった時間(分)、イベント発生時間の3つとしました。

```js
// 追加したいカレンダーのIDをプロパティに登録
const CALENDAR_ID = PropertiesService.getScriptProperties().getProperty('CALENDAR_ID');

// Alexa & IFTTT & GASを使って音声だけで勤怠管理
// こちらを使わせて頂きました。
// https://qiita.com/uemuram/items/77fa4393d4716b87497b
const MONTHS={
  "January":0, "February":1, "March":2, "April":3, "May":4, "June":5,
  "July":6, "August":7, "September":8, "October":9, "November":10, "December":11,
};
function iftttDateStr2Date(str){
  let match = str.match(/([a-zA-Z]+) (\d+), ([\d]{4}) at (\d+):(\d+)(AM|PM)/);
  if(match){
    let year = match[3];
    let month = MONTHS[match[1]];
    let day = match[2];
    let ampm = match[6];
    let hour = (ampm == 'PM' && match[4] <= 11) ? Number(match[4]) + 12 : match[4];
    let minutes = match[5];
    return new Date(year,month,day,hour,minutes);
  } else {
    return null;
  }
}

function createEvents(data) {
  const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
  const title = data.title;
  const endTime = iftttDateStr2Date(data.triggerAt);
  const startTime = new Date(endTime);
  startTime.setMinutes(startTime.getMinutes()-parseInt(data.duration));

  calendar.createEvent(title, startTime, endTime);
}

function doPost(e) {
  var jsonString = e.postData.getDataAsString();
  var data = JSON.parse(jsonString);
  createEvents(data);
}
```

「公開」→「ウェブアプリケーションとして導入」でデプロイします。

## IFTTT

`IF alexa, THEN webhook(GAS)`という形でアプレットを作成していきます。

URLにはGAS上でデプロイしたURLをコピペします。

GASではJSON型でデータを受け取ることを想定しているので、Methodは`POST`、Content Typeは`application/json`を選択します。

Bodyは次のように設定しました。`TriggeredAt`はalexaからこのアプレットを実行した時刻を表す変数で、波括弧2つを使って表現します。

```json

{
	"triggerAt":"{{TriggeredAt}}",
	"title":"集中",
	"duration":"25"
}
```
![スクリーンショット 2020-05-10 22.37.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236175/c7820378-57ee-cd7c-7014-526a26543718.png)


## Alexa
少し手間ですが「定型アクション」からポチポチとアクションを追加していきます。スマホからしか設定できない？のがちょっと不便です。
アレクサの機能で「待機する」というアクションを使って無理やり実現しています。途中で中断することができません。
<img width="375" alt="IMG_165978925415-1.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236175/73f804fd-f5cc-3912-6a24-ad21aa6af224.jpeg">


## おわりに

モチベーション管理のためにIoTデバイスをフル活用してみました。

GAS(webhook)と連携することで様々なことに応用できるので本当に便利です。

ただこの場合だと、「アレクサ、今から〇〇分△△するよ」というように音声によって変数を制御できないので、アレクサをより使い倒すにはAlexa Skills Kitでの開発が必要なのかなと思います。

以上、Qiita初投稿でした〜〜

---
#### ポモドーロ・テクニックとは
> このテクニックは2009年に出版されたシリロの著書「The Pomodoro Technique」や自身の公式サイト内で紹介されている。 具体的な手順は以下の通りである。
>>1. 達成しようとするタスクを選ぶ
2. キッチンタイマーで25分を設定する
3. タイマーが鳴るまでタスクに集中する
4. 少し休憩する（5分程度）
5. ステップ2～4を4回繰り返したら、少し長めに休憩する（15分～30分）

> ポモドーロの途中で急用が入りタスクが中断された場合は、そのポモドーロは終了とみなし、はじめから新しいポモドーロを開始する。

[ポモドーロ・テクニック - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%A2%E3%83%89%E3%83%BC%E3%83%AD%E3%83%BB%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF)

## 参考
- [Alexa & IFTTT & GASを使って音声だけで勤怠管理](https://qiita.com/uemuram/items/77fa4393d4716b87497b)
- [GASでデフォルトのGoogleカレンダーにイベントを追加する簡単なスクリプト](https://tonari-it.com/gas-default-calendar-create-event/)
- [Google Apps ScriptのdoPostでJSONなパラメータのPOSTリクエストを受ける](https://qiita.com/shirakiya/items/db22de49f00710478cfc)