Google Apps Scriptとは？②

今回は、GASの使用パターンを３つ紹介します。
個人的には、大きくこの３つの使い方があると考えています。

その他にもあるよって場合は、ご教授していただけたら幸いです。

#１.Googleスプレッドシートの独自関数として使用
スプレッドシートにはエクセルのようにSUM関数、VLOOKUP関数等多くの関数があります。
しかし、標準の関数以外にも自分自身で独自の関数を作成することができます。

以下が、関数作成までの流れです。
##a.スプレッドシート作成
GoogleDriveまたは、スプレッドシートアプリケーションから新規でスプレッドシートを作成してください。
スプレッドシートを新規作成したので、「無題のスプレッドシート」になっているので、好きな名称に変更してください。（今回は、独自関数とします。）

[![スクリーンショット 2018-10-24 15.14.49.png](https://qiita-image-store.s3.amazonaws.com/0/211927/3d1ecea4-4e5a-7d52-428d-9403ce5c3cf2.png)](https://drive.google.com/drive/)
[![スクリーンショット 2018-10-24 15.14.54.png](https://qiita-image-store.s3.amazonaws.com/0/211927/48acbc18-f3b4-55cb-4a81-c9fc7d3bae6e.png)]
(https://docs.google.com/spreadsheets/)

##b.スクリプトエディタを開く
ツール=>スクリプトエディタをクリックすると、スクリプトエディタが開きます。プロジェクト名が「無題のプロジェクト」になっているので、好きな名称に変更してください。（これもスプレッドシートと同じ、独自関数とします。）
![スクリーンショット 2018-10-24 15.22.20.png](https://qiita-image-store.s3.amazonaws.com/0/211927/34cb0da4-d485-838d-06f6-162652780000.png)

##c.独自関数コード
以下のコードを作成し保存します。

```javascript:コード.gs
function HELLO_NAME(val)
{
  return 'Hello ' + val;
}
```

##d.実行
スプレッドシート上のA1セルに以下の関数を入力します。
>=HELLO_NAME(A2)

![スクリーンショット 2018-10-24 15.35.39.png](https://qiita-image-store.s3.amazonaws.com/0/211927/b363cdee-fc63-9183-4325-861f61b4b8e3.png)

セルを確定すると、A1に「Hello」と表示されます。A2セルに何か文字を入れてください。
すると、A1セル文字が変わります。
このように、独自関数を作成することができます。
![スクリーンショット 2018-10-24 15.39.13.png](https://qiita-image-store.s3.amazonaws.com/0/211927/c6366128-495e-2d96-b47f-4e6622d2606c.png)

この状態で、GASを変更しても即時に適応されます。

```javascript:コード.gs
function HELLO_NAME(val)
{
  return 'Hello ' + val + '!';
}
```

![スクリーンショット 2018-10-24 15.41.29.png](https://qiita-image-store.s3.amazonaws.com/0/211927/73d6d3fd-09af-f9ed-aedb-be2759356d2b.png)

##e.個人的によく使う独自関数
使い方はわかったけど、これいつ使うの？大体のことは標準の関数で対応可能でしょ。と思った人もいるかもしれません。
正直、そんなに使うことは多くないと思いますが、郵便番号から住所を検索する独自関数を使うことが個人的に多いです。
よかったら参考にしてください。

```javascript:main.gs
function ADDRESS_JPMAP(zipcode)
{
  //引数に値がない場合、空白を返す
  if(zipcode == null || zipcode === '')
  {
    return '';
  }

  //戻り値を格納する変数
  var return_val;

  //指定した郵便番号から住所を取得
  var zipcloud_json = UrlFetchApp.fetch('http://zipcloud.ibsnet.co.jp/api/search?zipcode='+zipcode)
 
  //取得した住所情報を変数に格納
  var zipcloud_result   = JSON.parse(zipcloud_json).results;

  //[200]=>正常 | [400]=>入力パラメータエラー | [500]=>API内部で発生したエラー
  var zipcloud_status = JSON.parse(zipcloud_json).status;
  
  //処理が正常に終了したか？
  if (zipcloud_status === 200) 
  {

    //郵便番号から住所が取得できたか？
    if(zipcloud_result != null)
    {
      //住所1 .2 .3 を結合し格納
      return_val = zipcloud_result[0].address1 + zipcloud_result[0].address2 + zipcloud_result[0].address3;
    }
    else
    {
      return_val = "住所がありません。"
    }
  }
  else
  {
    //エラーコードとエラー内容を格納
    return_val = 'err: ' + zipcloud_status + ' ' + JSON.parse(zipcloud_json).message
  }

  return return_val;
}

```

#2.Googleスプレッドシートのマクロとして使用
エクセルVBAのように「マクロを記録」を使って、繰り返し処理を登録することができます。
もちろん「マクロを記録」を使用しなくても、自分で一から処理を作ることも可能です。

##a.マクロの記録
ツール=>マクロ=>マクロを記録をクリックすると画像のようなウィンドウが現れます。
必要に応じて、「絶対参照」または「相対参照」を選択して下さい。（今回は、絶対参照にします。）
![スクリーンショット 2018-10-24 17.00.36.png](https://qiita-image-store.s3.amazonaws.com/0/211927/387b4657-6828-3b84-c07e-8be6ac164434.png)

そして、以下の操作手順を記録します
>1.A1セルを選択する。
>2.A1セルをコピーする。
>3.C1セルを選択する。
>4.C1セルにペーストする。

手順が終了後、保存をクリックします。そしたら、マクロの名称とショートカットを登録するウィンドウが現れるので任意の名称にし保存て下さい。（今回は、画像の通りに登録します。）
![スクリーンショット 2018-10-24 17.06.33.png](https://qiita-image-store.s3.amazonaws.com/0/211927/74c41d84-90b7-71c2-c9ad-32d3c06710b2.png)

すると、スクリプトエディタに「マクロ.gs」ファイルが追加されて以下のコードがあります。

```javascript:マクロ.gs
function myFunction() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('C1').activate();
  spreadsheet.getRange('A1').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
};

```

##b.マクロの実行
スプレッドシートのA1セルに「テストA1」と入力し、マクロを実行します。
実行方法はショートカットまたは、ツール=>マクロ=>「自分が登録したまマクロ名」です。

初めて実行する場合、以下のような承認許可を行う必要があるので、内容を確認後許可を行なって下さい。
今回のみで言うと、GAS側がスプレッドシートにアクセス、編集しに来ますよ。的な内容を許可することになります。

![スクリーンショット 2018-10-24 17.15.59.png](https://qiita-image-store.s3.amazonaws.com/0/211927/0a21409b-aae9-f86b-5125-1ef77f46c629.png)
一度、許可すると次回以降は表示されません。

許可すると実行されて、無事にC1セルにコピーされました。
![スクリーンショット 2018-10-24 17.18.52.png](https://qiita-image-store.s3.amazonaws.com/0/211927/a5591749-1a8c-e685-8835-9d6650bce3f1.png)

ショートカット以外にも画像などに処理を付与できます。
やり方はまた別の記事にまとめたいと思います。

#3. WEBサービスとして使用
個人的に一番使用する方法です。
サーバレスでWEBアプリケーションを作成することができます。

以下が、「Hello GAS!!」をWEB画面に表示するまでの流れです。
##a.スクリプトエディタ起動後、コードを作成
新規にスクリプトエディタを作成し、以下のコードを記述します。

```javascript:main.gs
function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('index');
}
```
記述後、ファイル=>新規作成=>HTMLファイルを選択し、ファイル名を「index」として下さい。
すると、新規にHTMLファイルが作成されます。
作成されたファイルのbodyに以下のタグを追加します。

```html:index.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <!--pタグの内容を追加-->
    <p>Hello GAS!!</p>
  </body>
</html>
```

##b.実行
公開=>ウェヴアプリケーションとして導入...をクリックすると画像のようなウィンドウが現れます。
本当は色々と記載した方が良いのですが、今回はテストなのでそのまま「導入」をクリックして下さい。
すると、URLが現れるので、ブラウザからURLへアクセスを行うと。ブラウザ上に現れます。
![スクリーンショット 2018-10-24 17.38.11.png](https://qiita-image-store.s3.amazonaws.com/0/211927/b88c6255-270c-077a-0a8b-6a546ae0e7d5.png)

もっと詳しいやり方は、別の記事でまとめます。

#まとめ
GASにはおおきく３つの使用方法がある。

+ 独自関数として使用
+ エクセルマクロのように使用
+ サーバレスのwebアプリケーションとして使用

なにかご質問や、指摘等がありましたらよろしくお願いします。

#関連記事
[Google Apps Scriptとは？①](https://qiita.com/rarara_x16/items/403cdf2d0f95dc3d5a51)