今何週目？LINEBotとGoogleカレンダーを繋げて１年間の中でいま何週目かを知れるようにした話。

こんにちは。

今回はLINEBotとGoogleカレンダーAPIを使用して、
52週MDのうち今何週目なのかを知れるものを作りました。

ちなみに私は某小売業で働いております。
52週MDとは、【52週マーチャンダイジング】の略で
1年間を週単位にして、「今週（第〇週）は何を売り込むのか」を計画・実施するものです。　

## パートさんから無茶ぶり。今何週目かすぐわかるもん作って！
小売業あるあるかと思いますが、1年間52週のうち、いま何週目かわからなくなるんです。
商品調達バイヤーから〇週はこれ売って！と言われるのですが、
いま何週目やねん！！とそのパートさんはいつも思うらしく、私を頼ってきました。

パートさん：「**なぁ、すぐに今何週目かわかる方法ない？**」
　　　　私：「**店長とかマネージャーに今何週？って聞いたらどうですか？**」
パートさん：「**そんなん知りたいときにすぐ近くにおらへんやん！**
　　　　　　　**自分ですぐに知りたいねん**」


ごもっとも・・・
てことで、パートさんの依頼に応えるべく、頑張ってみることにしました(笑)




## 一旦、作れたもの
![LINEBot写真.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1811930/03314f8d-651d-48a8-80e4-13ce53616deb.jpeg)

<iframe width="560" height="315" src="https://www.youtube.com/embed/m86iq1gZ4IU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>



こんな感じに「何週目ですか？」と聞くと「3週目です」と
返信が返ってくるものができました！


## 実行環境


* JavaScript
* Node.js



## 参考にした記事


* [LINEBOTからGoogleカレンダーを取得する](https://qiita.com/LunaChevalier/items/f9c1a10cb5a1db753eae)
↑こちらの記事はJavaScriptを使用していない記事だったので、大体の実装の流れと
実装前の準備内容を把握するために使用。

* [googleカレンダー情報をLINEで取得＆送信](https://qiita.com/misa_m/items/f9c5c1adc5f4c96acb8a)
↑こちらも実装の流れを把握するために使用。

* [node.jsでGoogleカレンダーを操作する方法。](https://resowork.com/ggl-calendar-via-nodejs#nodejs%E3%81%A7%E3%82%B3%E3%83%BC%E3%83%89%E5%AE%9F%E8%A3%85)
↑こちらはGoogleカレンダーAPI取得のために使用。

## 作成したコード

<details><summary>実際に作成したコードはこちら</summary>

```js
'use strict';

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

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);
  }
  // ユーザーにリプライメッセージを送ります。
  /*************************
  sample.js
  *************************/
  // ----------------------
  // パッケージのインスタンス生成
  // ----------------------
  var Calendar = require('node-google-calendar'),
    config   = require('./credentials/calendar-config'),
    calId    = config.calendarId.myCal;
  var cal = new Calendar(config);
  // ----------------------
  // カレンダーイベントの取得
  // ----------------------
  // 取得する対象期間を指定
  // timeMinからtimeMaxの間のカレンダーイベントが取得される
  var params = {
    timeMin: '2022-03-10T06:00:00+09:00',
    timeMax: '2023-08-31T06:00:00+09:00',
  }
  const calEvents = await cal.Events.list(calId, params);
  console.log(calEvents[0].summary);
  if (event.message.text == '何週目ですか？') {
    // 3週目です、を返す
    return client.replyMessage(event.replyToken,  {
      type: 'text',
      text: calEvents[0].summary
    });
  } else {
    // 聞き方を間違えてますよ！など
    return client.replyMessage(event.replyToken,  {
      type: 'text',
      text: "聞き方間違えてます！\n「何週目ですか？」と聞いてください。"
    });
  }
  /*
  cal.Events.list(calId, params)
  .then(calEvents => {
    console.log(calEvents[0].summary);
    return client.replyMessage(event.replyToken,  {
      type: 'text',
      text: calEvents[0].summary
    });
  })
  .catch(err => {
    console.log(err.message);
  });
  */
}

// ここ以降は理解しなくて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サーバーを実行中です…`);

```
</details>

## まだまだ修正の余地あり！ここ直したい！
今はまだGoogleカレンダーAPIとLINEBotだけを繋げただけなので・・・
* **何週目？と打ち込むと今日のスケジュールを返信されるようにしたい・・・**
　ちなみに今は、何週目？と聞いても3週目としか返信ができません。

* **〇週目と返信があるだけでなくToDoリストとかも一緒にわかるようにしたい・・・**
例えば、「今日は週の切り替え日なのでPOPを外しましょう！」と返ってくると
今日すべきことがわかりやすく、より実用的になると思います。


もっと頑張らなければ・・・


## パートさんにお披露目！（超辛口FBもらったよ。）
てことでパートさんにFBもらいました。

#### パートさんからのFB

　　　　 私：「**LINEで今何週かわかるものを作ってみましたが、イメージと合ってますか？**」
 パートさん：「**合ってる！正解！でもこれシンプルすぎ！**
　　　　　　　**もっと絵文字とか使って可愛くして！あんたと一緒で不愛想あかん！**
　　　　　　　**あと、その週に売り込むものとか（特に売らないと怒られるもの）とか**
　　　　　　　**一緒に返信来るようにして！あと、今4週目やからこれ間違ってんで！**」

さすが優秀なパートさんだけあって、文句多いし、痛いところつく・・・
真摯に受け止めて改善しますとしか言いようがない。


なんかもう少し褒めてほしいと思ったので、新たにFBもらいました。




#### 【番外編】お父さんからのFB
ただただ甘やかしてほしいがために、お父さんに作ったものを見てもらいました。

　　　私：「**お父さん、このLINE使ってみて～**」
お父さん：「**いやLINEは中国では使えんきん**」
ちなみにお父さんは中国在住。中国ではLINEが使えないことをてっきり忘れていました。


てことで、動画を送ってみてもらうと
お父さん：「**よく頑張った！でもお父さんならごみ捨ての日教えてくれるものがほしい！
　　　　　　ごみ捨ての日忘れてお母さんから怒りメールくるけん。**」

確かによくお母さんが怒ってた。というよりキレてた！(笑)

なるほど、こんな応用方法もあるのか気づかされました。
KakaotalkやWeChatでも同じようなことが出来ないか挑戦してみたいと思います。



## まとめ

はっきり意見を言ってくれる頼れるパートさんがいてくれたことで
今後の課題がはっきりとわかりました。
もっともっと修正して、パートさんが満足できるものを
作りたいと思います。

最後まで読んでいただき、ありがとうございました。