GASでGoogleカレンダーの予定をチャットワークに通知する

表題の通り、GoogleAppsScriptを使ってGoogleカレンダーの自分の予定を取得し、チャットワークに通知するやり方を書きます。

##なぜやるか
弊社は毎朝みんなチャットワークに自分の作業予定を書いていくのですが、毎朝毎朝Googleカレンダー見て手打ちしていくのがめんどくさい・・・となったのでやってみることにしました！

##やらないといけないこと
大きく4つあります
①ChatworkのAPIキー取得
②GoogleScriptを作成する
③GoogleScriptにchatworkライブラリ追加
④GASで実装
⑤タイマー設定
順を追って見ていきましょう

##①ChatworkのAPIキー取得
外部サービスからチャットワークに何かをする場合には、必ずAPIキーを取得する必要があります。
チャットワークにログインしてから右上の自分のアイコン＞API設定を開いてください
ここで
●APIの利用申請という画面が出て「組織管理者様からの承認が必要です。」と言われた方
　→申請ボタンを押して、管理者の方に問い合わせましょう
●上記が出なかった方
　→そのままAPIキーを取得しましょう
※APIキーは非常に重要なものなので、誰かに教えたりしないようにしましょう

取得したAPIキーは後ほど使用しますので、控えておいてください

##②GoogleScriptを作成する
まずGASを開きましょう
今回はスプレッドシートなどは使わないのでGoogleのトップページ（検索画面ですね）＞右上の点が９個あるアイコンをクリック＞ドライブを開きます。
マイドライブが出てくると思いますので
新規＞GoogleAppsScriptを選択します
※使ったことない方は「その他」の中、あるいは「アプリを追加」から追加しないといけないかもしれません
ドライブにアプリを追加画面から「GoogleAppsScript」を追加すると選べるようになります

##③GoogleScriptにchatworkライブラリ追加
GASのライブラリにChatworkライブラリを追加することで、連携が簡単に出来るようになります。
GASを開いたらリソース＞ライブラリを開きます。
ライブラリを開いたら
https://github.com/cw-shibuya/chatwork-client-gas
こちらのGitHubのReadmeに書かれているプロジェクトキーをコピーし、ライブラリの検索を行います
タイトル：ChatWorkClient（自動入力）
バージョン：最新を選択
識別子：ChatWorkClient
デベロッパーモード：無効
で保存しましょう

##④GASで実装
そうしましたらいよいよ実装です。
今回は前提条件として
・終日予定は送信しない
・チャットワークの３つの部屋に送信
・土日と祝日は送信しない
をしています。

```javascript
/* 指定のカレンダーの本日の予定をチャットワークに送る */
function sendSchedule() {

  if(!isHoliday()){ // 土日と祝日は送信しない
    var myCals=CalendarApp.getCalendarById('qiitaXXXXXX@gmail.com'); //特定のIDのカレンダーを取得（カレンダーのIDはカレンダーを作成したgmailのアドレスです）
    var myEvents=myCals.getEventsForDay(new Date());　//カレンダーの本日のイベントを取得
 
    /* チャットワークに送る文字列のヘッダー */
    var strBody = "[info][title]【名前】本日の予定：" + Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + "[/title]"
 
    /* イベントの数だけ繰り返し */
    for(var i=0;i<myEvents.length;i++){
      if(!myEvents[i].isAllDayEvent()){ //　終日イベントはスキップする
        var strTitle=myEvents[i].getTitle(); //イベントのタイトル
        var strStart=_HHmm(myEvents[i].getStartTime()); //イベントの開始時刻
        var strEnd=_HHmm(myEvents[i].getEndTime()); //イベントの終了時刻
        strBody=strBody + strStart + ' - ' + strEnd + '　' + strTitle + '\n'; //チャットワークに送る文字列にイベント内容を追加
      }
    }
 
    strBody = strBody + '[/info]';
 
    /* チャットワークにメッセージを送る */
    var apiKey = '先程取得したAPIkeyを入れてください';
    var cwClient = ChatWorkClient.factory({token:apiKey}); //チャットワークAPI
    var roomid = [123456, 789012, 345678]; // 送りたい部屋のURLのridより後ろの数字を入  れます
    for(var i=0;i<roomid.length;i++){
      cwClient.sendMessage({
      room_id:roomid[i], //ルームID
      body: strBody
      });
    };
  };
}
 
/* 時刻の表記をHH:mmに変更 */
function _HHmm(str){
  return Utilities.formatDate(str, 'JST', 'HH:mm');
}

/* 休みの日を判定*/
function isHoliday(){
  var today = new Date();

  //土日か判定
  var weekInt = today.getDay();
  if(weekInt <= 0 || 6 <= weekInt){
    return true;
  }

  //祝日か判定
  var calendarId = "ja.japanese#holiday@group.v.calendar.google.com";
  var calendar = CalendarApp.getCalendarById(calendarId);
  var todayEvents = calendar.getEventsForDay(today);
  if(todayEvents.length > 0){
    return true;
  }

  return false;
}
```
出来上がったら実行をして、正しく送れることを確認しましょう

##⑤タイマー設定
実装が終わったらタイマーを設定します
編集＞現在のプロジェクトのトリガーを選択します
保存したスクリプトのトリガーを設定する画面が開きますので、新規をクリックしてトリガーを設定します
特定の日なのか、日付なのか時間なのか分なのか、細かく設定できますので用途にあわせて設定しましょう


以上です！
こちらを参考にさせて頂きました
https://tonari-it.com/gas-chatwork-send-message-mychat/