「失念しておりました」をゼロへ！LINE BotとGoogleカレンダーをつなげてタスク管理を楽に！

五月雨式に訪れるタスク
漏れが出ようもんならそれはもうカオス
伝えた聞いていないのバトル

アナログからデジタルへの進化
により上司のお怒りも沈下
試されるぜ俺の真価

##失念しておりました。
私は普段、居酒屋を運営する企業のマーケティングを仕事としています。

細かなタスクが立て続けに発生し、タスク整理が追い付かずということが時たま訪れます。
そのような時に、頼まれていたタスクに漏れが出てしまいます。

会議中、作業中、ランチ中、移動中、休憩中に、メールで、Talknote（社内共有ツール）で、LINEで、電話で、口頭でと、**いつでもどこでも新たなタスクは発生します。**

普段のタスク管理のルーチンは、

:::note info
①新たなタスクが発生する。
②PCがある場合はGoogleカレンダーにタスクを入れて漏れないよう管理。
③移動中やランチ等でPCが使いにくい場合は、とりあえずLINEのKeepメモを使ってメモをして、後程優先順位を決めながらGoogleカレンダーにタスクを入れる。
:::

といった感じですが、

:::note warn
・スマホからGoogleカレンダーを使うことも可能だが、スマホでフリック入力できずに連打派の私は、スマホをなるべく操作したくない。
・メモ程度にLINEのKeepメモを使っているが、後々Googleカレンダーに転記するのがめんどくさかったり、忙しいとKeepメモに入れたことすら忘れる。
:::

という問題があり、**最小限の労力でタスク管理**が出来ないかなぁと。

そんなことを思っていると、プログラミングを勉強し始めて出会った<font color="red">**LINE BotとかIntegromatを使えば、LINEに入力したテキストをGoogleカレンダーに自動転記することができて、タスク管理しやすくなるかも！**</font>と閃きました。

というわけで、今回は**LINE BotとIntegromatを使って、PCが使いにくい場合でもGoogleカレンダーに楽に予定を入れられるもの**を作成し、**タスク漏れの撲滅を図ろう**と思います。

##案外簡単に完成！
<iframe width="560" height="315" src="https://www.youtube.com/embed/dh2iBGdBvaY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<font color="red">**あー、もう、素敵すぎる。。。**</font>
<font color="red">**なぜもっと早くIntegromatに出会わなかったんだ。。。**</font>

##仕組み
:::note info
①作成したLINE Botにタスク内容を入力する。（リプライメッセージ）
②入力したテキストがGoogleスプレッドシートのMessage列に転記される。
③GoogleスプレッドシートのMessage列に新しく入力されたら、Googleカレンダーの予定に追加される。
:::

**Googleスプレッドシートを接着剤にして、LINE BotとGoogleカレンダーをつなげる感じ**です。


##環境
Visual Studio Code v1.60.2
Node.js v16.10.0
npm v7.21.1
ngrok 2.3.40

##LINE Botに入力したテキストをGoogleスプレッドシートのMessage列に転記させる部分
まず、上記仕組みの①②をVSCodeで書きます。

```js
'use strict';

const express = require('express');
const line = require('@line/bot-sdk');

// Steinを利用するための準備
const SteinStore = require('stein-js-client');
const store = new SteinStore('SteinのAPI URLを記載');

const PORT = process.env.PORT || 3000;

// Messaging APIを利用するための鍵を設定します。
const config = {
  channelSecret: 'チャネルシークレットを記載',
  channelAccessToken: 'チャネルアクセストークンを記載'
};

const client = new line.Client(config);

async function handleEvent(event) {
  if (event.type !== 'message' || event.message.type !== 'text') {
    return Promise.resolve(null);
  }

  // シート名`task`の`Message`列に、LINE Botに送信したメッセージを書き込む。
  await store.append("task", [
    {
      Message: event.message.text,
    }
  ]);

  // ユーザーにリプライメッセージを送ります。
  return client.replyMessage(event.replyToken, {
    type: 'text', // テキストメッセージ
    text: event.message.text // ← ここに入れた言葉が実際に返信されます
    // event.message.text には、受信したメッセージが入っているので、それをそのまま返信しています
  });
}

// ここ以降は理解しなくてOKです
const app = express();
app.get('/', (req, res) => res.send('Hello LINE BOT! (HTTP GET)'));
app.post('/webhook', line.middleware(config), (req, res) => {

  if (req.body.events.length === 0) {
    res.send('Hello LINE BOT! (HTTP POST)');
    console.log('検証イベントを受信しました！');
    return;
  } else {
    console.log('受信しました:', req.body.events);
  }

  Promise.all(req.body.events.map(handleEvent)).then((result) => res.json(result));
});

app.listen(PORT);
console.log(`ポート${PORT}番でExpressサーバーを実行中です…`);
```
:::note warn
忘れず変更
　・SteinのAPI URL
　・チャネルシークレット
　・チャネルアクセストークン
:::

##GoogleスプレッドシートのA列に新しく入力されたらGoogleカレンダーの予定に追加される部分
次に、上記仕組みの③をIntegromatでシナリオ作成します。
<img width="650" alt="integromat" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2049267/a8969e16-3d63-855f-4b31-eaea82bc2037.png">
詳しくはこちらから：[イテレーターとアグリゲーターの使いかた]
(https://integromat.ethical.works/contents/how-to-use-iterator-array-aggregator-in-integromat-scenarios)

ポイントは、**終日予定に転記されるようにしたこと**です。LINE Botから送った分が一目で分かり、優先順位を決めながら時間ごとの予定に割り振る時に便利です！
Integromatで初めてGoogleカレンダーを使用しましたが**ノーコードかつ、テンプレートを使って簡単にシナリオ作成出来るところが最高ですね！LINE Botの部分を加味しなければ数分でシナリオ作成出来ました！**


ちなみに、今回はテンプレートを使用してシナリオ作成したので、IteratorとArray Aggregatorが入っていますが、なくても問題なく動きました。
<img width="500" alt="integromat" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2049267/4e22ad5b-b9e1-d6ed-3e07-2295589785ae.png">

こうして、<font color="blue">**最小限の労力でタスク管理**</font>が出来るようになりました！

##同じ部署の同僚にヒアリング
こんなの作ってみたけど、どうかなと聞いてみたところ、

**私はすでに結構Googleカレンダー活用してるので、そんなにそれいい！とはならないですけど、そうゆう習慣ない人は便利かもですね！**

ちょっとがっかり（まぁ、とりあえず自分の役に立つからいっか。）

**TさんとかYさんとか打ち合わせ続きの人だったら喜ぶかもしれないですね！**

たしかに！

しばらく自分で使ってみて、より使い勝手よくしてから普及させていきたいと思いますー！

<font color="blue">**LGTMやご意見ご感想のコメントをいただけると嬉しいです！**</font>
最後まで読んでいただき、ありがとうございました！