Google Apps Script(GAS)からGoogleカレンダーイベントを登録・削除する方法

Google Apps Script（以下、GAS）からGoogleカレンダー へ、カレンダーイベントを登録・削除する方法を調べたので、備忘録として記します。

GASの始め方についてはこちら→ https://qiita.com/park3taro/items/c20daa229b1be4353765 を参考にしてください。

# GASからGoogleカレンダーへ登録する方法
## シンプルなカレンダー登録

GASからGoogleカレンダーへ連携するには以下のコードでできます。

```javascript
function makeCalendar() {
  // デフォルトアカウントのGoogleカレンダーを取得
  var cal = CalendarApp.getDefaultCalendar();
  
  ////// カレンダーに登録する内容を設定する /////////////
  // イベントのタイトル
  var title = "カレンダーテスト";
  // 開始日時
  var startTime = new Date("2020/09/01 12:00");
  // 終了日時
  var endTime = new Date("2020/09/01 15:00");
  /////////////////////////////////////////////////
  
  // カレンダーに登録する。
  cal.createEvent(title, startTime, endTime);
}
```

初めて実行する際は以下のようなウィンドウが表示されることがあるので、メッセージに沿って連携を許可してください。

![](https://paper-attachments.dropbox.com/s_EA31929BC26B846CAFBCB8551DB29400314E5F02ADE99F67714219AAE2F25788_1599235316174_+2020-09-05+1.01.14.png)


GASが走り終わってGoogleカレンダーをみてみます。

![](https://paper-attachments.dropbox.com/s_EA31929BC26B846CAFBCB8551DB29400314E5F02ADE99F67714219AAE2F25788_1599265080733_+2020-09-05+2.12.36.png)


上手くできてますね！

もし日付がずれている場合はスクリプトエディタのタイムゾーンがずれている可能性があります。
タイムゾーンの修正方法はこちらを参照してください。→https://qiita.com/park3taro/items/a4c61305386e151a6529


## 複雑なカレンダー登録

シンプルなカレンダー登録で使用した createEvent メソッドは、optionの引数を追加することでさらに詳細なカレンダーイベントを登録することができます。

```javascript
function makeCalendar() {
  // デフォルトアカウントのGoogleカレンダーを取得
  var cal = CalendarApp.getDefaultCalendar();
  
  ////// カレンダーに登録する内容を設定する /////////////
  // イベントのタイトル
  var title = "カレンダーテストその２";
  // 開始日時
  var startTime = new Date("2020/09/02 16:00");
  // 終了日時
  var endTime = new Date("2020/09/02 18:00");
  // オプション
  var options = {
    description:'イベント詳細',
    location:'スカイツリー',
    guests:'★★★★★@gmail.com',
    sendInvites:true
  }
  /////////////////////////////////////////////////
  
  // カレンダーに登録する。
  cal.createEvent(title, startTime, endTime, options);
}
```

オプションはオブジェクト形式で必要なオプションだけを書き、各内容は以下の通りとなっています。

| オプション       | 型       | 内容                                              |
| ----------- | ------- | ----------------------------------------------- |
| description | String  | イベントの説明                                         |
| location    | String  | イベントの場所                                         |
| guests      | String  | イベントに参加する人のメールアドレス。<br>複数人参加する場合はカンマで区切る。       |
| sendInvites | Boolean | guestsで記した人にメールを送るかどうか。<br>デフォルトは false となっている。 |

上記GASを実行し、Googleカレンダーをみてみます。

![](https://paper-attachments.dropbox.com/s_EA31929BC26B846CAFBCB8551DB29400314E5F02ADE99F67714219AAE2F25788_1599699664599_+2020-09-05+10.30.38.png)


上手くできていますね！


## 終日のカレンダー登録

終日のカレンダーイベントを登録したい場合は createAllDayEvent を使用します。

```javascript
function makeCalendar() {
  // デフォルトアカウントのGoogleカレンダーを取得
  var cal = CalendarApp.getDefaultCalendar();
  
  ////// カレンダーに登録する内容を設定する /////////////
  // イベントのタイトル
  var title1 = "終日カレンダーテスト１";
  var title2 = "終日カレンダーテスト２";
  var title3 = "終日カレンダーテスト３";
  // 開始日時
  var startDate = new Date("2020/09/03");
  // 終了日時
  var endDate = new Date("2020/09/05");
  // オプション
  var options = {
    description:'終日イベント詳細',
    location:'富士山',
    guests:'★★★★★@gmail.com',
    sendInvites:true
  }
  /////////////////////////////////////////////////
  
  // 1日の終日イベントをカレンダーに登録する。
  cal.createAllDayEvent(title1, startDate);
　// 複数日の終日イベントをカレンダーに登録する。
  cal.createAllDayEvent(title2, startDate, endDate);
  // 複数日の詳細な終日イベントをカレンダーに登録する。
  cal.createAllDayEvent(title3, startDate, endDate, options);
}
```

上記のGASを実行します。

![](https://paper-attachments.dropbox.com/s_EA31929BC26B846CAFBCB8551DB29400314E5F02ADE99F67714219AAE2F25788_1599662130574_+2020-09-09+23.35.03.png)


3つの終日イベントが設定されましたね。
しかし、ここで注目したいのが、endDateを9月5日に設定したはずが9月4日が設定されていますね。

調べたところ、複数日にまたがるイベントの場合、**endDateを1日進める必要がある**そうです。
1日進めるコードを記しますので参考にしてください。

```java
  // 1日進める。
  endDate.setDate(endDate.getDate() + 1);
```

# GASからGoogleカレンダーを削除する方法

GASからカレンダーを削除する場合は、カレンダーイベントを取得した後、deleteEventメソットを実行することで削除できます。

```javascript
function deleteEvent() {
    // デフォルトアカウントのGoogleカレンダーを取得
    var cal = CalendarApp.getDefaultCalendar();
    
    // カレンダーイベントを削除する日時を取得する。
    var targetDate = new Date("2020/09/01");
    // 取得した日時のイベントを取得する。
    var events = cal.getEventsForDay(targetDate);
    
    for (var i in events) {
      var event = events[i];
      // イベントを削除する。
      event.deleteEvent();
    }
}
```

上記のGASを使って以下のカレンダーイベントを削除します。

![](https://paper-attachments.dropbox.com/s_EA31929BC26B846CAFBCB8551DB29400314E5F02ADE99F67714219AAE2F25788_1599663548538_+2020-09-09+23.58.59.png)


GASを実行すると、

![](https://paper-attachments.dropbox.com/s_EA31929BC26B846CAFBCB8551DB29400314E5F02ADE99F67714219AAE2F25788_1599663722209_image.png)


綺麗に消えましたね！