入門GoogleAppsScript 就活のスケジュールを漏れなくカレンダーに反映させたい(後半)

# ⚠この記事には前半があります
前半をまだ読んでない方からすると、目標成果物も見えずナンノコッチャだと思いますので、そんな方は[こちら](https://qiita.com/sadasue/items/3bf26871633dd8f463ef)から前回の記事をご覧ください

# GoogleAppsScriptの始め方
## 前提条件：Googleアカウントを持っている
Googleアカウントを持っていないとGASは使えません！Googleのサービスですからね。
まだアカウントを持っていないという方は<a href = https://accounts.google.com/signup/v2/webcreateaccount?continue=https%3A%2F%2Faccounts.google.com%2FManageAccount%3Fnc%3D1&hl=ja&flowName=GlifWebSignIn&flowEntry=SignUp>こちら</a>から。
## GASにアクセスする
https://script.google.com/home にアクセスするだけで◎
![gaspage.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/750506/3097adb1-04f3-f5e6-d54a-25453fbe5aa5.jpeg)
この画面がでれば大丈夫です。
## プログラム組む
GASにアクセスできても実行する中身が無いのでは意味がないので、まずは試しに簡単なコードを組んでみましょう

##### 日付を表示するプログラムを組む
コード.gsの中身に以下をコピペ

```javascript:date.js
function date() {
  const today = new Date();
  // Date()の()の中身を変えることで日付は変更可能。デフォルトで今日の日付です
  console.log(today);
  // console.log()でカッコ内がどう表示されているのかをテストすることができます
};
```


#GASを使ってカレンダーを操作する
##覚えるべき項目
###CalendarApp：クラス
Googleカレンダーを操作する上で絶対に必要。
###getDefaultCalendar()：メソッド
自分が使っているカレンダーを定義するときに使う。
自分で使うのならばだいたい最初に使う。
###createEvent(title,startTime,endTime)：メソッド
カレンダーに予定を立てるときに使う。
()の中身の項目を直接カレンダーに反映させることができる。
##実際に使ってみる
```javascript:useCalendar.js
function useCalendar(){

  const calendar = CalendarApp.getDefaultCalendar()
  calendar.createEvent("テストだよ", new Date("2021/10/01 10:00:00"), new Date("2021/10/01 12:00:00"));

};
```
これでGASを用いてカレンダーに入力することはできるが、ぶっちゃけめんどくさいですよね。
<b>実はcreateEvent(title,startTime,endTime)は数学の代入のようなことができる</b>んです。

## 入れ子を使ってみる
イメージは数学の代入と全く一緒！X+Yという式があって、Xに2、Yに3入れてみましょう。みたいな使い方ができます。便利ですね！

```javascript:useCalendar.js
function useCal2(){
  //書き出しは同じ
  const calendar = CalendarApp.getDefaultCalendar();
  //最初に数学の方程式で言うX,Yを定義する
  const title = "テストだよ";
  const startTime = new Date("2021/10/01");
  const endTime = new Date("2021/10/01");
  
  calendar.createEvent(title,startTime,endTime);
  // こっちのほうがスマートで見やすいですよね！
};
```
##SpreadSheetとの連携
スプレッドシートと連携するためには、先程学んだcalendarAppクラスではなく、SpreadsheetAppクラスを使う。習うより慣れろでコードを見てみましょう。

```javascript:sheetToCal.js
function sheetToCal(){
  const calendar = CalendarApp.getDefaultCalendar();
  //---カレンダーはいつもどおりだが
  //---スプレッドシートはアプリが違うので…
  const spreadsheetId = ``;
  const spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  //---SpreadSheetAppというクラスを用いる
  //---<キー>の部分はスプレッドシートのURLの/d/xxxxxxxxxxx/editのxxxxxxxxxxの部分が当てはまる
  const sheetName = ``;
  const sheet = spreadsheet.getSheetByName(sheetName);
  const range = sheet.getDataRange();
  const values = range.getValues();
  //---スプレッドシートはどれか、つかうシートはどれか、見る範囲はどれかを選択
  
  //---試しにvaluesが同表示されるのか見てみよう
  console.log(values);
  //---これでスプレッドシートが連携できたのがわかる
}
```
スプレッドシートとの連携は以上。
SpreadsheetAppクラスを用い、スプレッドシートとその中のシート、そして使うデータの範囲を定義する必要があります。

###スプレッドシートのデータを入れ子にする
先程のコードでは、結果下記のようなものが見えたと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/750506/79b72b27-44fc-f5e2-4aea-49775de3186e.png)
黄色の枠で囲まれているのが一つのデータセットです。
このデータセットをそれぞれ定義するためには<b>for(const...of...){}</b>という式を使います。

```javascript:sheetToCal.js
 for(const record of values){
  //---forはその中身を繰り返す指示をする
  //---const A of 配列 で A に対応する 配列の中身 を繋げることができる
  
    const status = record[0]
      //status = record[0](スプレッドシートのA列)
    const title = ("【就活】"+record[1]+record[2]);
      //status = record[0](スプレッドシートのB列+C列)
    const time = new Date(record[4]);
    const delta = new Date(record[5]);
    const startTime = new Date(record[3]);
      startTime.setHours(time.getHours());
      startTime.setMinutes(time.getMinutes());
    const endTime = new Date(startTime);
      endTime.setHours(endTime.getHours() + delta.getHours());
      endTime.setMinutes(endTime.getMinutes() + delta.getMinutes());
    const option = {
      location: record[6]
    };
  }
  calendar.createEvent(title,startTime,endTime,option)
```
こうすることによって、手で毎回イチから記載する以上に簡単にカレンダーを記載できる仕組みができましたね。



#トリガーの設定
トリガーとは、「いつプログラムを実行するか」というきっかけを指します。
これがないといくら良いコード書いても使えませんからね！
まずは画像の通り、<b>編集</b>を押して<b>現在のプロジェクトのトリガー</b>を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/750506/10d58fa8-3be7-2383-1984-0a1d0ec7fc19.png)

そうすると以下のような画面に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/750506/3be3a076-4ad0-2162-542e-3ec58e4823b4.png)

そしたら右下の<b>トリガーを追加</b>をクリック
以下の画像を参考に保存。
![スクリーンショット 2020-10-02 153251.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/750506/329ea933-cb6c-e96c-7949-155de1c66f5d.jpeg)

これでトリガーの設定は完了です！



#終わりに
いかがでしたか？プログラミングって実はそんなに難しいものじゃなく、日々の暮らしを豊かに、簡単にしてくれるものなんです。

エンジニアにとって一番の仕事は調べることです。わからないことを調べることは「誰にでもできる」けれどほとんどの人がやっていないこと。だからそこに価値が出てきます。

そこから少しずつステップアップすることで分からないことが減り、自分のスキルというのを磨けるようになるんです。
ちょっとでもエンジニア職やITに興味を持っていただければ幸いです。
以下