【0からGASを学ぶ】ところでGASって何？

# はじめに
本シリーズでは、GASの始め方や便利な使い方、ビジネス活用まで幅広く解説します。シリーズをひと通り読んでいただければ、あなたもきっとGASマスターになれるはずです。

# シリーズの対象者
* そもそもGASってなんだか**わからない**方
* GASを学びたいけど**何から始めればいいか**わからない方
* GASはわかり始めたけど、**もっと活用ができないか**と模索している方
* とにかく**Googleが好き！** という方

# GASって何
では早速始めていきましょう。【0からGASを学ぶ】シリーズの第1回は「ところでGASって何？」です。

## GASとは
GASとは**Google Apps Script**の略語です。本シリーズでは当然のように**GAS**と表現しますのでついてきてください。
このサービスを端的に言うと、GoogleスプレッドシートやGoogleドキュメントといった各種サービスの自動化や、様々なWeb APIとの連携を行うことのできる、Googleが提供する**統合開発ツール**です。

:::note info
APIとは「Application Programming Interface」の略語で、**事前に定義した形式**に従って「リクエスト」することで「レスポンス」を返す仕組みを指します。特にWeb APIでは、HTTP/HTTPSを用いて情報のやり取りを行います。
例えば、以下をクリックすると〒120-0034に紐づく住所情報を得られます。
https://zipcloud.ibsnet.co.jp/api/search?zipcode=1200034
:::

:::note warn
たまに**GASはExcelマクロと同等です**といった記事を見ることがありますが、**そんなもんじゃないです。** それを一緒に感じていきましょう。
※手軽さは確かにExcelマクロと同等レベルですが。
:::

## 具体的にどんなことができるのか
### Googleの各種サービスとの連携
GASはGoogleが提供するだけあり、Googleの各種サービスとの相性は言うまでもありません。例えば、ExcelマクロのようなGoogleスプレッドシートの自動化、Googleドライブ内のファイル整理など、**サービス単独**はもちろん、**複数サービスを組み合わせて**業務の効率化を行うことができます。

#### 私が過去におこなった主な活用事例
* スプレッドシートで作成した在庫台帳から在庫不足となると自動で発注メールを送信
* Googleドライブの特定フォルダにファイルがアップロードされると管理者あてにメールを送信
* Googleフォームの回答送信をトリガーに集計用のスプレッドシートに転記しリアルタイム集計
* Googleフォームの回答送信をトリガーにカレンダーにスケジュール登録。当該時間の予約枠が埋まり次第、フォームを更新

などなど。あれできないかな、これできないかなと思ったことは**大抵できます。**

### Web APIを用いてGoogle外のサービスとの連携
GASはJavaScriptをベースに作られており、 `UrlFetchApp` クラスを用いることで外部サービスと連携することができます。例えば、先ほど例に出した住所情報を取得したい場合は、
```javascript:main.gs
function main() {
  let response = UrlFetchApp.fetch('https://zipcloud.ibsnet.co.jp/api/search?zipcode=1200034');
  /**responseの中身
    {
      "message": null,
      "results": [
      {
        "address1": "東京都",
        "address2": "足立区",
        "address3": "千住",
        "kana1": "ﾄｳｷｮｳﾄ",
        "kana2": "ｱﾀﾞﾁｸ",
        "kana3": "ｾﾝｼﾞｭ",
        "prefcode": "13",
        "zipcode": "1200034"
      }
      ],
      "status": 200
    }
  */
  let resJson = JSON.parse(response.getContentText());
  console.log(resJson['results'][0]['address1']);
  console.log(resJson['status']);
}
```

```gs:実行結果
東京都
200
```
といった具合に、取得した住所情報をJSONデータとしてGASの中で扱うことができます。

:::note info
API連携を行う場合は、APIの**返却値（レスポンス）の形式を見極める**ことがポイントです。
:::

#### 私が過去におこなった主な活用事例
* Googleフォームの回答送信をトリガーにSlackへ回答内容を連携する。
* 特定のWebサイトのスクレイピングをして、取得した内容をスプレッドシートへ連携する。
* LINE Messaging APIと連携して、LINEチャットボットを作成する。

などなど。API連携を特にフル活用したのはLINEチャットボットでしたので、皆さんにもお試しいただけますと幸いです。以下は検証用で作成したお遊びチャットボットです。

<table>
    <tr>
      <td>アカウント名</td>
      <td>奮闘する企業戦士</td>
    </tr>
    <tr>
      <td>友だち追加用URL</td>
      <td><a href="https://line.me/R/ti/p/@276iwchf" target="_blank">https://line.me/R/ti/p/@276iwchf</a></td>
    </tr>
    <tr>
      <td>追加用QR</td>
      <td><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575702/181e6325-33da-13be-d1b1-0ff16cef1382.png" width="200" height="200">
</td>
    </tr>
    <tr>
      <td>構成図</td>
      <td><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575702/397936a7-39ed-b81c-9d43-e6ceaccc72d6.png" width="800">
</td>
    </tr>
 </table>


### Webアプリケーションの構築やライブラリの構築
おそらくこれが最も**えぐい**です。GASに度肝を抜かれる使い方です。GASではスクリプト（.gs）とHTML（.html）の2つのファイルを作成することができ、**フロントエンド部をHTML**が**バックエンド部をスクリプト**が担うことで、Webアプリケーションを構築することが可能です（スクリプトファイルにcssやJavaScriptを記述することもあるので詳細は次回以降）。また作成した部品群をライブラリとしてデプロイすれば別のGASファイルから利用することもできます。
![GAS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575702/1fdd402f-5726-1fd6-f0b0-f459df95dd88.png)
さらに、GASで作成したWebアプリケーションはGoogleのサーバ（ドメインは `script.google.com` ）上にデプロイされるため、追加でサーバを用意する必要はありません。私はこれまでGASを用いて小規模なWebアプリケーションを50本以上リリースしましたが、**一切費用が発生していません。**

:::note warn
ただし、無償ゆえの**制約事項**は少なからずあります。それはまた次回以降に解説していきます。
:::

#### 私が過去におこなった非常に簡単なWebアプリケーション構築の一例
https://script.google.com/macros/s/AKfycbxZH6ap9SzVejTbpCK8neIcabTYk6BNJCAarlh9ofkzHWElaL1N5FtOJ7l-EL5zy_Sl/exec

これくらいのアプリケーションであれば30分程度でデプロイまで完了することができます。

## では、試しにGASエディタを開いてみましょう
と、その前に、名称は覚えなくてもよいですが、GASには**スタンドアロン型**と**コンテナバインド型**があります。簡単に言えばGASが単独で存在するのか、Googleサービスに紐づいて存在するのかといった違いです。これにより一部**使用できるメソッドの違い**がありますが数える程度です。

:::note warn
コンテナバインド型の場合、対象のGoogleサービス（例えばスプレッドシート）を共有した場合、それに**紐づくGASも相手が閲覧することができてしまいます。** そのため、GASを完全に隠したいのであれば、スタンドアロン型を採用すべきです。
:::

### スタンドアロン型
| № | 手順 | イメージ |
|-----------:|:------------|:------------|
| 1 | Googleドライブにアクセスし、左上の [+ 新規] ボタンをクリックします。 | ![スタンドアロン型_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575702/c0d2062c-265e-b4f5-5c90-5a2da7b363d9.png) |
| 2 | [その他] の中にある [Google Apps Script] を選択します。 | ![Qiita004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575702/38aa3875-6d92-9fb8-e421-cea84acc4e09.png) |

:::note info
スタンドアロン型の場合は、GASが単独で存在するためGoogleドライブ上にGASファイルが表示されます。
![Qiita004_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575702/9c9c11e0-0b36-81f1-4240-a76807cb7942.png)
:::

### コンテナバインド型
| № | 手順 | イメージ |
|-----------:|:------------|:------------|
| 1 | GoogleスプレッドシートやGoogleドキュメントなど、Googleサービスを開きます。例ではGoogleスプレッドシートを用います。 |  |
| 2 | リボンにある [拡張機能] をクリックし、ドロップダウンメニュー内にある [Apps Script]をクリックします。 | ![Qiita004_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575702/2501fd4b-752b-615a-5506-b7a0d8b57c6c.png) |

:::note info
コンテナバインド型の場合、GASはあくまでもGoogleサービスに紐づいて存在するため、Googleドライブからは確認することができません。GASを編集したいときは対象のサービスを開いて、上記手順で…ってのは**めんどくさい**ですよね。そんなときは以下にアクセスすれば、Googleアカウントに紐づくGASを全て確認できます。
https://script.google.com/home
:::

### 小ネタ
1. コンテナバインド型の対象となるのは、 `Googleスプレッドシート` 、 `Googleドキュメント` 、 `Googleスライド` 、 `Googleフォーム` です。 
1. ブラウザのURL部に `script.new` と打ち込むだけでGASエディタを開くことができます。この場合は、Googleサービスから起動したわけではないため、スタンドアロン型となります。

### GASエディタを使ってみよう
![GASエディタ_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575702/af2cb7f7-6cca-390b-f770-5a4a2a535f6b.png)
本画面の詳細な説明等はまた次回以降に行いますが、まずは定番の「Hello World!」をログに出力してみましょう。コード.gsに以下のように入力して下さい。

```javascript:コード.gs
function myFunction() {
  console.log('Hello World!');
}
```

入力し終えたら、エディタ上部メニュにある [保存] ボタンをクリックします。
![コードgs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575702/be7d4dee-c397-1c0f-ded8-0a2b6108885c.png)

保存ボタンをクリックすると、隣にある [実行] ボタンが活性化されるのでクリックします。すると、処理が実行され、実行ログに無事に「Hello World!」と出力されます。
![コードgs実行結果_v2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575702/4821fe31-8ffe-08dd-7beb-3d366b400cd4.png)

# おわりに
お疲れ様でした。
第1回は「ところでGASって何？」ということで**GASの可能性**や**活用事例**、**起動の仕方**など、GASのコーディング方法よりも**知識を重点的に**お伝えしました。次回以降では**Googleの各種サービスへのアクセス方法**はもちろん、**GASの制約事項**といった知識も交えながらお伝えします。
記事を読んで、「良いな」や「今後に期待できる！」と感じて頂けたら**いいね**や**フォロー**、**コメント**いただけると幸いです。それではまた次回をお楽しみに！

## ブログでより詳しく解説しています！
以下画像をクリックしてブログにアクセス！！
<a href="https://gas-4u.com/gas01/" target="_blank"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575702/520f0d91-2768-e330-194a-599761ae5dd5.png" width="600"/></a>