GAS初心者がGoogleカレンダーに予定を追加してみた - メソッド一覧

#はじめに

GASの入門としてGoogleカレンダーに予定を追加しました。（前回の記事は[こちら](https://qiita.com/kitaji12/items/5831f137822230a454bb)）
今回は、カレンダー予定追加メソッドについて紹介したいと思います。

#ターゲット

- GASを触ってみたい、興味がある方
- Googleカレンダーに予定を追加するメソッドを知りたい方

#カレンダー予定追加メソッド

以下５つのメソッドについて紹介します。

- [createEvent](#createEvent)
- [createEventSeries](#createEventSeries)
- [createAllDayEvent](#createAllDayEvent)
- [createAllDayEventSeries](#createAllDayEventSeries)
- [createEventFromDescription](#createEventFromDescription)

###createEvent
> 予定を追加するメソッド（一番シンプル）

パラメーターによってメソッドの使用方法が以下２つあります。  

- createEvent( **title**, **startTime**, **endTime** )
- createEvent( **title**, **startTime**, **endTime**, **options** )

| name | type | 説明 |
| --- | --- | --- |
| title | String | イベントのタイトル |
| startTime | Date | イベントが開始する日時 |
| endTime | Date | イベントが終了する日時 |
| [options](#optionsの詳細) | Object | 高度なパラメータを指定するJSONオブジェクト |

↓ サンプルコードと予定追加イメージ

```js:createEvent.gs
function myFunction() {
  const calID = "カレンダーID";

  var title = "○○さんと打ち合わせ"
  var startTime = new Date("2021/10/01 13:00");
  var endTime = new Date("2021/10/01 14:00");

  var calendar = CalendarApp.getCalendarById(calID);
  calendar.createEvent(title, startTime, endTime);
}
```
![01_createEvent.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076680/c84335e9-d306-44a2-9158-fcee8d631a54.png)

###createEventSeries
> 繰り返しの予定を作成するメソッド

パラメーターによってメソッドの使用方法が以下２つあります。  

- createEventSeries( title, startTime, endTime, recurrence )
- createEventSeries( title, startTime, endTime, recurrence, [options](#optionsの詳細) )

| name | type | 説明 |
| --- | --- | --- |
| recurrence | EventRecurrence | イベントシリーズの繰り返し設定 |

例）
addDailyRule()：毎日繰り返す
addWeeklyRule()：毎週繰り返す
addMonthlyRule()：毎月繰り返す
addYearlyRule()：毎年繰り返す

※ その他繰り返しの設定メソッドは、[こちら](https://developers.google.com/apps-script/reference/calendar/event-recurrence)を参照してください。

↓ サンプルコードと予定追加イメージ

```js:createEventSeries.gs
function myFunction() {
  const calID = "カレンダーID";

  var title = "○○定例会"
  var startTime = new Date("2021/10/01 13:00");
  var endTime = new Date("2021/10/01 15:00");
  var recurrence = CalendarApp.newRecurrence().addWeeklyRule().onlyOnWeekday(CalendarApp.Weekday.FRIDAY);
  var options = {
    description: "週次定例会",
    location: "会議室A" 
  };

  var calendar = CalendarApp.getCalendarById(calID);
  calendar.createEventSeries(title, startTime, endTime, recurrence, options);
}
```
![02_createEventSeries.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076680/20b22935-0cd5-2aa1-d1d0-76f390d30d20.png)
![03_createEventSeries.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076680/ecb21783-aee3-2cf9-9be3-67f7b3334e9d.png)

###createAllDayEvent
> 終日予定を作成するメソッド

パラメーターによってメソッドの使用方法が以下４つあります。  

- createAllDayEvent( title, **date** )
- createAllDayEvent( title, **startDate**, **endDate** )
- createAllDayEvent( title, **startDate**, **endDate**, [options](#optionsの詳細) )
- createAllDayEvent( title, **date**, [options](#optionsの詳細) )

| name | type | 説明 |
| --- | --- | --- |
| date | Date | イベントの日付（日付のみが使用され、時刻は無視される） |
| startDate | Date | イベントが開始する日付（日付のみが使用され、時刻は無視される） |
| endDate | Date | イベントが終了する日付（日付のみが使用され、時刻は無視される） |

↓ サンプルコードと予定追加イメージ

```js:createAllDayEvent.gs
function myFunction() {
  const calID = "カレンダーID";

  var title = "有給休暇"
  var startDate = new Date("2021/09/30");
  var endDate = new Date("2021/10/02");
  var options = {
    description: "緊急の際は連絡をお願いいたします"
  };

  var calendar = CalendarApp.getCalendarById(calID);
  calendar.createAllDayEvent(title, startDate, endDate, options);
}
```
![04_createAllDayEventSeries.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076680/2380f82e-038c-c5ec-18aa-ef0a61891af6.png)

###createAllDayEventSeries
> 繰り返しの終日予定を作成するメソッド

パラメーターによってメソッドの使用方法が以下２つあります。  

- createAllDayEventSeries( title, startDate, recurrence )
- createAllDayEventSeries( title, startDate, recurrence, [options](#optionsの詳細) )

↓ サンプルコードと予定追加イメージ

```js:createAllDayEventSeries.gs
function myFunction() {
  const calID = "カレンダーID";

  var title = "○○進捗会議"
  var startDate = new Date("2021/10/01");
  var recurrence = CalendarApp.newRecurrence().addWeeklyRule().times(2);
  var options = {
    description: "週次進捗会議",
    location: "会議室B" 
  };

  var calendar = CalendarApp.getCalendarById(calID);
  calendar.createAllDayEventSeries(title, startDate, recurrence, options);
}
```
![05_createAllDayEventSeries.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076680/8ccf7d89-2cdb-c736-a733-0f34f49ff8f0.png)
![06_createAllDayEventSeries.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076680/2ca46638-8d07-76af-9466-70d65d0e7221.png)

###createEventFromDescription
> 文章から予定を作成するメソッド

メソッドの使用方法は以下になります。  

- createEventFromDescription( **description** ) 

| name | type | 説明 |
| --- | --- | --- |
| description | String | イベントの自由形式の説明 |

↓ サンプルコードと予定追加イメージ

```js:createEventFromDescription.gs
function myFunction() {
  const calID = "カレンダーID";

  var description = "15:00　○○さんと会議";

  var calendar = CalendarApp.getCalendarById(calID);
  calendar.createEventFromDescription(description);
}
```
![07_createEventFromDescription.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076680/67daf0a1-418b-f0f9-b5b5-fc484f6a9d4b.png)


###optionsの詳細
高度なパラメータを指定するJSONオブジェクト

| name | type | 説明 |
| --- | --- | --- |
| description | String | イベントの説明 |
| location | String | イベントの場所 |
| guests | String | ゲストとして追加する必要がある電子メールアドレスのコンマ区切りリスト |
| sendInvites | Boolean | 招待メール（送信するかどうか、デフォルトはfalse） |


#さいごに

GASプロジェクトで使用するカレンダー予定追加メソッドについてご紹介しました。
上記を参考に追加したい予定によって、メソッドを使い分けてみてください。


#参考サイト

- [Google Apps Script 公式ドキュメント](https://developers.google.com/apps-script/reference/calendar/calendar)
- [今日からGoogleカレンダーで使えるGASのコード一覧](https://for-dummies.net/gas-noobs/gas-japanese-reference-for-calendar/#calendarApp)