3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-05-10

在宅ワーク、捗っていますか?

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

全体構成

全体構成

フロー

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

~25分~

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

~5分~

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

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

GAS

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

// 追加したいカレンダーの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つを使って表現します。


{
	"triggerAt":"{{TriggeredAt}}",
	"title":"集中",
	"duration":"25"
}

スクリーンショット 2020-05-10 22.37.57.png

Alexa

少し手間ですが「定型アクション」からポチポチとアクションを追加していきます。スマホからしか設定できない?のがちょっと不便です。
アレクサの機能で「待機する」というアクションを使って無理やり実現しています。途中で中断することができません。
IMG_165978925415-1.jpeg

おわりに

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

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

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

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


ポモドーロ・テクニックとは

このテクニックは2009年に出版されたシリロの著書「The Pomodoro Technique」や自身の公式サイト内で紹介されている。 具体的な手順は以下の通りである。

  1. 達成しようとするタスクを選ぶ
  1. キッチンタイマーで25分を設定する
  2. タイマーが鳴るまでタスクに集中する
  3. 少し休憩する(5分程度)
  4. ステップ2~4を4回繰り返したら、少し長めに休憩する(15分~30分)

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

ポモドーロ・テクニック - Wikipedia

参考

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?