在宅ワーク、捗っていますか?
新型コロナの影響で自分はかれこれ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"
}
Alexa
少し手間ですが「定型アクション」からポチポチとアクションを追加していきます。スマホからしか設定できない?のがちょっと不便です。
アレクサの機能で「待機する」というアクションを使って無理やり実現しています。途中で中断することができません。
おわりに
モチベーション管理のためにIoTデバイスをフル活用してみました。
GAS(webhook)と連携することで様々なことに応用できるので本当に便利です。
ただこの場合だと、「アレクサ、今から〇〇分△△するよ」というように音声によって変数を制御できないので、アレクサをより使い倒すにはAlexa Skills Kitでの開発が必要なのかなと思います。
以上、Qiita初投稿でした〜〜
ポモドーロ・テクニックとは
このテクニックは2009年に出版されたシリロの著書「The Pomodoro Technique」や自身の公式サイト内で紹介されている。 具体的な手順は以下の通りである。
- 達成しようとするタスクを選ぶ
- キッチンタイマーで25分を設定する
- タイマーが鳴るまでタスクに集中する
- 少し休憩する(5分程度)
- ステップ2~4を4回繰り返したら、少し長めに休憩する(15分~30分)
ポモドーロの途中で急用が入りタスクが中断された場合は、そのポモドーロは終了とみなし、はじめから新しいポモドーロを開始する。