【GAS修行⑩】毎朝、Googleカレンダーの一日の予定を、ChatWorkで自動通知。

・GAS熟練者への道。
・先人達のコードの「写経＆コピー」の駆使の成果物のまとめ。
・第十弾
・[第一弾](https://qiita.com/t_o_d/items/a29b4ba6eacad77b3690)・[第二弾](https://qiita.com/t_o_d/items/7dcc5637ab06996c8eaa)・[第三弾](https://qiita.com/t_o_d/items/8763b7e84bafc83caa5c)・[第四弾](https://qiita.com/t_o_d/items/eb03325f37e837de44ea)・[第五弾](https://qiita.com/t_o_d/items/75d9f10d674a096b3ab3)・[第六弾](https://qiita.com/t_o_d/items/2d4b62b8525309fcc0c4)・[第七弾](https://qiita.com/t_o_d/items/b259fd4eb6a03b0dc5b6)・[第八弾](https://qiita.com/t_o_d/items/2c44d7270c83d46351c5)・[第九弾](https://qiita.com/t_o_d/items/c21642f15ddee8f4f5c5)はこちら。

## 経緯
・「十回目。」
・「正真正銘の複製・過去作たらい回しという、二大荒行記事も、早くもこの回数まできてしまう。」
・「不必要なものは作らないという、合理主義の私として、ここらへんで一区切りにしよう。」
・「本当は作れる技術がないのではという、解答既出の自問自答に心を震わせながら、書いていこう。」
→そういうわけで、今回もサンプルアプリと仏サイトを発見。
→https://tonari-it.com/gas-calendar/
→「参考（マルコピ）に作ってみるか」
→取り組み開始。

## 概要
- 毎朝、本日のGoogleカレンダーの予定をChatWorkに通知してくれる。  
→LINE,Slack,ChatWorkの３つの連携でも、予定見逃しがあれば、私は一度旅に出てみようと思う。

## 結果
・実際の画面はこちらです。
![screen.PNG](https://qiita-image-store.s3.amazonaws.com/0/336499/6cd18c31-bc54-9ab0-8c3d-6690c7937baf.png)

## 作成環境
1. Google App Script
2. ChatWork API

## 手順
※Google Apps Script・Chatork APIの設定は[第八弾](https://qiita.com/t_o_d/items/2c44d7270c83d46351c5)と一緒
### Google Apps Scriptの設定
-  Googleドライブからスクリプトエディタを起動。  
※Googleアカウントを持っていない人は、作成する。
    - Googleドライブを起動
    - 「新規」→　「その他」→「アプリを追加」の順にクリック。  
    - アプリ検索欄に「script」と入力して検索。  
    - 検索結果に「Google Apps Script」が表示されるので、そこの「接続」ボタンをクリック
    - 改めて「新規」→ 「その他」の順にクリックしていくと、「Google Apps Script」が表示されているので、クリック。
- 起動したプロジェクトに名前をつける  
※プロジェクト名が反映されるわけではないが、自分がわかる名前をつける。  
→保存されたら一旦置いておく。

### ChatWork APIの設定
※ChatWork未登録の人は、一人用を開設しよう。（何かと便利。）

- ChatWork APIのトークンを発行。
    - チャットページ右上のプロフィールアイコンをクリック後、表示される「API設定」をクリック。
    - API Token設定ページで、「パスワード入力」欄に登録した時の、パスワード入力。
    - 表示されるAPI TOKENをメモしておく。  
![tempsnip.png](https://qiita-image-store.s3.amazonaws.com/0/336499/74d0ac57-8800-f36b-b954-b78c9ca87c39.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/336499/462958fb-1a84-cec7-668a-545da2fabc93.png)
![test.png](https://qiita-image-store.s3.amazonaws.com/0/336499/ad2af28c-83df-bc09-316c-d1a73fdf5cb7.png)

### Googleカレンダーの設定
- GoogleカレンダーIDを取得。
    - [Googleカレンダー](https://calendar.google.com/calendar/r)にアクセス。  
    ※使用していない人は、動作確認のため、今日のスケジュールだけでも入れましょう。
    - Googleカレンダーページ内の左側のマイカレンダーメニューの「点３つ」から「設定と共有」をクリック
    ![tempsnip.png](https://qiita-image-store.s3.amazonaws.com/0/336499/14bd1206-137a-c76a-0a6f-2f0776b583c4.png)
    - カレンダー設定ページに遷移後、ページ下部にある「カレンダーの統合」欄の「カレンダーID」をメモしておく。  
    ※大体初期状態は、カレンダーIDは自分のメールアドレスとなっている。
    ![image.png](https://qiita-image-store.s3.amazonaws.com/0/336499/322616b0-f84f-9282-d590-0cb42874698e.png)

### ライブラリ設定
- スクリプトエディタに戻り、上部メニューの「リソース」から「ライブラリ」をクリック。
- 「ライブラリを追加」欄に下記を追加する。  
    - `M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT`・・・・「ChatWorkClient」というChatWork純正ライブラリ。
- 追加後、「バージョン」を最新にして、「デベロッパーモード」をONにして、保存する。  

![image.png](https://qiita-image-store.s3.amazonaws.com/0/336499/f5a2bd6d-753d-10bc-70ec-f9ba036db56a.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/336499/f07c93e8-7606-830e-61ae-e17b24b91ae7.png)

### コード
- スクリプトエディタ内のコードに、下記を記述する。

```JavaScript:chatwork-today-calendar.gs
/* 指定のカレンダーの本日の予定をチャットワークに送る */
function todayReport() {
  /* カレンダーID取得 */
  var myCalendarId=CalendarApp.getCalendarById('カレンダーIDを書く。');
  var now = new Date();
  /* カレンダーの本日のイベントを取得 */
  var todayEvents=myCalendarId.getEventsForDay(now);
  
  /* 送信メッセージ */
  var eventMessage = "[info][title]" + Utilities.formatDate(now, 'JST', 'yyyy/MM/dd') + "の予定[/title]"
  /* 予定無しメッセージ*/  
  var noMsg = ""
  
  /* イベントの数だけ繰り返し */
  if(todayEvents.length === 0){
    noMsg = Utilities.formatDate(now,"JST","yyyy/MM/dd") + "は、、、\nなんと予定はありません。\nうきうき（*'ω'*）";
    eventMessage = eventMessage + noMsg + '[/info]';
  }
  else{
    for(var i=0;i<todayEvents.length;i++){
      // タイトル
      var eventTitle=todayEvents[i].getTitle();
      // 開始時刻
      var eventStart=timeChange(todayEvents[i].getStartTime());
      // 終了時刻
      var eventEnd=timeChange(todayEvents[i].getEndTime());
      // 送信内容
      eventMessage=eventMessage + eventStart + ' ～ ' + eventEnd + "　" + eventTitle + '\n';
    } 
    eventMessage = eventMessage + '[/info]';
  }
  
  // メッセージ送信（チャットワークAPI書く。）
  var cwClient = ChatWorkClient.factory({token: 'ChatWork API トークンを書く。'});
  cwClient.sendMessage({
    //ルームID
    room_id:123456,
    body: eventMessage
  });
}
/* 時刻表記変更 */
function timeChange(targetTime){
  return Utilities.formatDate(targetTime, 'JST', 'HH:mm');
}
```
 ※以下の項目を自分のものに変えるのを忘れない。
　　　・自分のカレンダーID（先程メモしたもの。）
　　　・ChatWork APIのアクセストークン（先程メモしたもの。）
　　　・通知ルームID（通知したいチャンネルURLのrid123456の数字部分）

- 自分のコードに書き換えて保存後、「todayReport」関数を実行して、通知確認。
    - スクリプトエディタ内の上部メニューの「関数名」の部分を「todayReport」に変更して、二つ左の「▶」ボタンで実行。
- 通知確認後、指定の時間にコードを実行してもらうために、トリガーを設定。
    - スクリプトエディタのタブメニューの「編集」→ 「現在のプロジェクトのトリガー」をクリック。
    - トリガーを作成して、下記の画像のように設定。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/336499/806a0f3f-5f48-e22c-9a05-bed4c35ac6a7.png)


    - 保存。
- 完了。

## まとめ
・「これで、予定忘却という戦慄の愚行を行うことはないだろう」と、屈託のない表情で満足げにくつろぐ。
・ひとまずこれで一区切りということで、あとは他シリーズの「[Orangeごっこ](https://qiita.com/t_o_d/items/42254a5678cabf42af82)」や新記事にも挑んでみるか。
・これを見てくださるエンジニアの皆様、「まだまだGASで書けるプログラムあるのに」「今のままじゃ、人生半分損してるぞ」という意見等あれば、是非教えていただけると幸いです。

## 参考
- https://tonari-it.com/gas-calendar/  
→こちらを主に参考（マルコピ）にしました。大変お世話になりました。