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


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

なぜやるか

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

やらないといけないこと

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

①ChatworkのAPIキー取得

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

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

②GoogleScriptを作成する

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

③GoogleScriptにchatworkライブラリ追加

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

④GASで実装

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

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

  if(!isHoliday()){ // 土日と祝日は送信しない
    var myCals=CalendarApp.getCalendarById('[email protected]'); //特定の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#[email protected]";
  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/