GASでツールを作る

# 1. はじめに
GASツール作成までを書きます。

# 2. GASの一般的な説明
## 2-1. 作り方、実行の仕方
動画参照してね
[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/Z9u_whZX2f4/0.jpg)](https://youtu.be/Z9u_whZX2f4)


# 3. テンプレシートを使ってGASを触ってみる
## 3-1. テンプレファイルを自分のところにコピーしましょう
[テンプレ](https://docs.google.com/spreadsheets/d/1taCLKjUdOWV5zbPA7fx2Oe8xgftRKeunaa5jOwtVc8g/edit?usp=sharing
)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172695/042fc930-7beb-02ad-461d-dd9db08f91fb.png)
上のテンプレファイルのコピーを作成
![Screenshot 2020-09-15 at 20.32.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172695/6ed52966-d694-bb47-9e48-e3b1ff809fd1.png)

名前と場所はお好きにどうぞ
![Screenshot 2020-09-15 at 20.32.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172695/6407d800-27ab-8ce8-02ea-2ddda62b99ec.png)


## 3-2. GASの各ファイルを読んでみましょう
![Screenshot 2020-09-15 at 20.38.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172695/718718f8-fd48-96da-173b-20d47661a7ff.png)

ひとくちメモ：プログラミングはこれから起こることを書きます。mainメソッドから順番に、1行目からこれから起こることが書かれているようなイメージで読んでください。


```js:main.js
// メインメソッド。このツールの大元となるメソッドです。
function main(){
  // sheet.jsのメソッド「getSheetData」から配列を取得
  const data = getSheetData();
  
  // 出力用の配列（空）を用意
  var outList = [];
  
  // 配列の中身（連想配列が入っている）を1つずつ実行
  for(var member of data){
    
    // check.jsのメソッド「check」を実行。
    // メソッド内部でoutListに追加がされているので、どんどんoutListに情報が貯まる
    check(outList, member);
  }
  
  // sheet.jsのメソッド「writeSheet」を実行
  writeSheet(outList, 'out');
}

```
```js:sheet.js
// 「getSheetData」メソッド。inシートから情報を取得します。
function getSheetData(){

  // シートそのものを取得。configというのはシート名。ここを変えればどのシートでも取得できる
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('in');

  // シートの情報をすべて取得
  var data = sheet.getDataRange().getValues();

  // 1行目は見出しなのでスキップ。見出しがない場合にはこの処理は省略可能。
  data.shift();

  // 空の配列（リスト）をつくる
  var list = [];

  // 行数分回す
  for(var row of data){

    // 連想配列として、配列に追加
    list.push({

      // ID
      id : row[0],
      // 名前
      name : row[1],
      // 性別
      sex : row[2],
      // 血液型
      bloodType : row[3],
      // 生年月日
      birthDay : row[4],
      // 電話番号
      phoneNumber : row[5],
      // 携帯番号
      cellPhoneNumber : row[6],
      // メール
      email : row[7],
      // 住所。連想配列の最後なので「,」がない。
      address : row[8]
    });
  }
  // 配列を返却
  return list;
}

// 「writeSheet」メソッド。
// 引数1 list シートに書き込む配列
// 引数2 sheetName 書き込むシート名
function writeSheet(list, sheetName){
  // シートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  
  // 2行目から、配列分だけ行を追加
  sheet.insertRows(2,list.length);

  // 追加範囲に配列を出力
  sheet.getRange(
    2,
    1,
    list.length,
    list[0].length
  ).setValues(list);
}

```
```js:check.js
// 「check」メソッド。
// 引数1 outList シートに書き込む配列
// 引数2 member inシートから取得した各連想配列
function check(outList, member){
  
  // エラー理由の変数を作成
  var reason = '';
  
  // もし電話番号が空欄だったら
  if(member.phoneNumber === ''){
    
    // 理由に文言を追加
    reason += '電話番号なし\n';
  }
  
  // もしメールが空欄だったら
  if(member.email === ''){
    
    // 理由に文言を追加
    reason += 'メールなし\n';
  }
  
  // もし理由が空欄じゃなかったら
  if(reason !== ''){
    
    // 出力用の配列に追加
    outList.push([
      
      // 今の日時
      new Date(),
      
      // 名前
      member.name,
      
      // 理由。配列の最後だから「,」がない
      reason
    ]);
  }
}

```
## 3-3. GASを実行してみましょう
「main.js」の
outシートがこうなるはず
![Screenshot 2020-09-15 at 20.44.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172695/4ed73dc8-8ee7-689c-b237-e7f486ae17f3.png)

承認を求められたときはこちら
[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/H11pQDVx2yQ/0.jpg)](https://youtu.be/H11pQDVx2yQ)

## 3-3. checkメソッドを変更して見る
処理の中に「住所が空欄だったら」というチェック処理を追加してみましょう