GoogleAppsScriptで日本の祝日をスプレッドシートに出力する方法

GAS初心者の方にもわかりやすいようにスクリプトエディタを開くところから、私なりに頑張ってまとめました。どうぞよろしくおねがいします。 

## スクリプト実行後のイメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/f90bf19b-ea20-ceaf-b2a2-4f570a93791a.png)

## スクリプト作成手順
1. スプレッドシートを新規作成します。
1. 作成したスプレッドシートのメニューから `ツール` ->  `スクリプトエディタ` を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/bb7f7197-1be7-dbb2-d8a3-d9f7151a2e44.png)
1. myFunctionが定義されたコード.gsのエディタが開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/182758da-333d-2069-67a1-24dbd47b45c3.png)
1. 「無題のプロジェクト」のままだとスクリプトが保存できないので、プロジェクト名をつけておきます。今回は「日本の祝日テスト」にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/86c39601-22b9-1392-1730-2d39338b2661.png)
1. 以下のコードをコード.gsにコピペして保存します。

```javascript
function myFunction() {
  // 日本の祝日カレンダーを取得
  var calender = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
  
  // 2019-01-01 から 2019-12-31までのイベントを取得
  var startDate = new Date(2019, 0, 1, 0);
  var endDate = new Date(2019, 11, 31, 0);
  var events = calender.getEvents(startDate, endDate);
  
  // スプレッドシートに貼り付け用の配列
  var data = [];
  // ヘッダーを追加
  data.push(['日にち', '祝日名']);
  
  // 日にちと祝日名の二次元配列を作成
  for (var i = 0; i < events.length; i++) {
   var event = events[i];
   
   // １行分のデータを格納する配列
   var row = [];
   
   // 日にち
   row.push(event.getAllDayStartDate()); 
   // 祝日名
   row.push(event.getTitle());
   data.push(row);
  }
  
  // 今アクティブなスプレッドシートのシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // シートに貼り付け
  //  getRange(開始行, 開始列, 終了行, 終了列)で範囲指定
  //  setValuesで作った二次元配列を選択範囲に貼り付け
  sheet.getRange(1, 1, data.length, 2).setValues(data);
}
```
6．▶ボタンを押すとスクリプト実行後のイメージ画像のように出力されます。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/e6f45f6e-2ce6-d1ba-2791-d8f90046f476.png)

## 初めてスクリプトを実行する時
スクリプトを初めて実行する時は承認画面が出るので、以下の手順で承認してください。
（２回目からは表示されません。）

1. `許可を確認` を押下し、自分のアカウントを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/9fd9d368-a820-8bc2-6bc3-d14d6cc66573.png)
1. アカウント選択後に、この画面が出たら、`詳細` リンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/0536c6ed-6570-1060-30be-cef6059b677d.png)
1. `(安全ではないページ)に移動` のリンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/cddce228-8372-6d38-2da2-1c1bcaa8736b.png)
1. `許可` ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/c2b13c28-fc18-4642-c828-6c88edbc6f21.png)

## 日本の祝日のカレンダーIDの確認方法
Googleカレンダーのメインメニューを開き、日本の祝日の設定を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/7f0718e8-3374-6755-6b2d-137be7f9ea0b.png)
カレンダーの統合のところに、カレンダーIDがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/e9cb12fa-8830-7889-526d-696a0977db8e.png)

## 関連リンク
- 様々な国の祝日IDを集めてらっしゃる方がいます。 
https://gist.github.com/mattn/1438183

- 公式リファレンス
  - [SpreadsheetApp](https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app)
  - [Calendar Service](https://developers.google.com/apps-script/reference/calendar/calendar)