Google Apps Script（GAS)を基礎から学んでみた

# はじめに
<!-- 発端や概要を記載 -->
組み込みエンジニアがGoogle Apps Script（以下GAS)を始めて学んでみました。
2023/1/18: 1.0.0：基本文法追加

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [GASとは?](#Chapter1)
1. [基本文法](#Chapter2)
1. [メール送信](#Chapter4)
1. [まとめ](#reference)

<!-- 各チャプター -->
<a id="#Chapter1"></a>
# GASとは?
Googleが提供する各種サービスの自動化／連携を行うためのスクリプト作成ツール。

#### どんなことができるか?
1\. googleフォームの回答をメールに自動送信する。
2\. カレンダー情報をslackに通知する。
3\. youtubeの情報を自動で収集(スクレイピング)

#### どうやって使うか?
1\. googleスプレッドシート > 拡張機能 > Apps Script
2\. スクリプトを書く
3\. 保存(cntl+s)
4\. 実行(cntl+r)

<a id="#Chapter2"></a>
# 基本文法
<details><summary>コンソール表示</summary>

```javascript
function myFunction() {
  console.log("hello" + 999 + 'world');
}
```
実行結果
```
22:10:14	情報	hello999world
```
</details>

<details><summary>変数・定数</summary>

```javascript
function myFunction() {
  var a; //varとletどちらでもよい
  let b = 2/3*7; //自動で浮動小数点数型となるみたい
  const buf = "test"//constは定数
  console.log(a);
  console.log(b);
  console.log(buf);
}
```
実行結果
```
22:17:37	情報	undefined
22:17:37	情報	4.666666666666666
22:17:37	情報	test
```
</details>

<details><summary>配列</summary>

```javascript
function myFunction() {
  let bufs = ["hello","world"];
  console.log(bufs[0] + bufs[1]);
  console.log(bufs.join(" new ")); //メソッドが色々とそろっている
  console.log(bufs.reverse().toString());
}
```
実行結果
```
22:33:21	情報	helloworld
22:33:21	情報	hello new world
22:33:21	情報	world,hello
```
</details>

<details><summary>オブジェクト(連想配列)</summary>

```javascript
function myFunction() {
  let age = {
      "yamada":15,
      "suzuki":43,
      "tanaka":26,
  }
  console.log(age.suzuki);
  console.log(age.tanaka);
}
```
実行結果
```
22:38:02	情報	43
22:38:02	情報	26
```
</details>

<details><summary>制御構文(if/for)</summary>

```javascript
function seigyokoubun() {
  let nums = [10, 20, 30, 40, 50];
  for (let i = 0; i < nums.length; i++) {
    if (i == 2)
      console.log(nums[i]);
  }

  for (let i in nums) { //配列の長さの取得が不要
    if (i == 1)
      console.log(nums[i]);
  }
  
  for (let num of nums) { //配列の要素を取得
    if (num == 50)
      console.log(num);
  }
}
```
実行結果
```
22:50:43	情報	30
22:50:43	情報	20
22:50:43	情報	50
```
</details>

<details><summary>関数</summary>

```javascript
function factorial(num) { 
  let ret = 1;
  while (num) {
    ret *= num;
    num--;
  }
  return ret;
}
//アロー関数(以下)の記法も可能
//const  factorial = (num) =>{

function main() {
  //階乗を計算する関数呼び出し
  console.log(factorial(3));
  console.log(factorial(num=7));
}
```
実行結果
```
22:56:17	情報	6
22:56:17	情報	5040
```
</details>

<a id="#Chapter4"></a>
# メール送信
Gmail Serviceを活用する。

```
let to = `test@gmail.com`
let subject = `ここには件名が入ります`
let body =
`いつもお世話になっております。
○○株式会社の○○です。

内容

以上、よろしくお願いいたします。`
GmailApp.sendEmail(to, subject, body);
```

<a id="#Chapter5"></a>
# 日時操作
```
let day = new Date();
day.setDate(day.getDate()+1); //1日後
day.setMonth(date.getMonth()+1); //1ヶ月後
day.setFullYear(day.getFullYear()-1); //1年前
let YYYYMMDD = Utilities.formatDate(day, 'JST', 'yyyy年MM月dd日'); //2023年01月23日形式
```

<a id="#Chapter5"></a>
# 空白改行削除
```
function removespace(str) {
  return str.replace(/[\r\n]+/g, "").replace(" ", "").replace("　", "");
}
```

#### 参考
[Gmail Service公式ドキュメント](https://developers.google.com/apps-script/reference/gmail "Gmail Service公式ドキュメント")


<a id="#reference"></a>
# まとめ
基本文法は他の言語とは変わらない。
変数のデータ型を意識せずに書けたりするので、初心者にはとっつきやすい言語だと感じた。