GAS（Google Apps Script）でHelloWorldしてみた（②Webアプリケーション編）


#1．はじめに
前回は、GASでバッチを作ったのですが、今回は、GASでWebアプリケーションを作ってみたいと思います。

前回の記事：
「[GAS（Google Apps Script）でHelloWorldしてみた（①バッチプログラム編）](https://qiita.com/jun_higuche/items/540d1a0b32293607d860)」

Webアプリケーションというのは、HTTPによる通信を行うもので、主にGETとPOSTが用いられますよね。その両方を実装してみます。
GASの細かな操作は前回の記事で書いたので、今回はその辺、端折ります。

#2．HTTP GETでHelloWorld
GASでHTTPのGETリクエストを受け付けて、「HelloWorld」の文字列を返すプログラムを作ってみます。

##2.1．単純なGETリクエストでHelloWorld

前回のプロジェクトにファイルを追加して、
ファイルの追加は、
「ファイル」→「New」→「スクリプトファイル」 で追加できます。
![gas_HelloWorld003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/477fd4e1-3097-2ba5-60fe-c4e5366312c6.png)


以下のコードを書いてみます。

```Javascript:HttpGetTest.gs
function doGet(e) {
    return ContentService.createTextOutput("HelloWorld!!");
}
```

↓こんな感じ
![FireShot Capture 132 - GasTest01 - script.google.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/7596678d-0f21-36bd-7d69-68ebe25e2205.png)

↓ 「公開」→「ウェブアプリケーションとして導入」を選択
![gas_HelloWorld004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/67f64226-3b28-2095-7c34-047bde97653e.png)

↓の設定で、
![gas_HelloWorld005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/77d48b94-ff85-1eed-74a4-ad027c3522c9.png)

①「Current web app URL」：に書かれているURLが公開後にアクセス可能なURLになります。
②「Project version」は、このWebアプリケーションのバージョンです。

③「Execute the app as」：このGASを実行するアカウントです。
・「Me（メールアドレス）」を選択した場合には誰からのアクセスでも必ず、GASの作者ということになる。
・「User accessing the web app」を選択すると、アクセスした人自体のアカウントで実行されます（アクセス時、Googleアカウントへのログインが必須になる。）。

一般的なWEBアプリケーションのように作るのであれば、「Me（メールアドレス）」を選択しておきます。

④「Who has access to the app」：誰がアクセス可能かを指定します。
・「Only myselef」を選択すると、自分だけがアクセス可能
・「全ユーザー」を選択すると、Googleアカウントを持つ全ユーザーがアクセス可能
・「Anyone, even anonymous」を選択すると、誰でもアクセス可能

一般的なWEBアプリケーションのように作るのであれば、「Anyone, even anonymous」を選択します。

（※ここ、知らないと、若干ハマりポイントになりますので注意しますしょう。）

あえて、別ブラウザでアクセスしてみます。
↓のように表示されればOKです。

|![gas_HelloWorld006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/b45be323-ded7-f911-9c51-c96b58259051.png)|
|:--|

##2.2．パラメーター付きGETリクエストでHelloWorld

以下のように書き直します。

```Javascript:HttpGetTest.gs
function doGet(e) {
  
  var name = e.parameter.name;
  var age = e.parameter.age;
  
  var html = "HelloWorld!!<BR><BR>";
  html += "Name：" + name + "<BR>";
  html += "Age：" + age + "<BR>";
  
  return HtmlService.createHtmlOutput(html);
}
```

前の同様に、公開すればいいのですが、更新のときは、バージョンを「New」にしておかないと、上書きされませんでした。
![gas_HelloWorld007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/edd88816-d5d8-19c2-cec8-7520bde6f84b.png)

「更新」ボタンをクリックして、パラメーターを付けてアクセスします。
[例]https://script.google.com/macros/s/[ID]/exec?name=TAROU&age=30

|![gas_HelloWorld008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/bf103885-a5db-e126-ce93-524918074b1e.png)|
|:--|
このように表示されれば想定通りです。


#3．HTTP POSTでHelloWorld

##3.1．POSTリクエストでHelloWorld
Postで送られてくるパラメータの取り方は、GETリクエストと

```Javascript:HttpGetTest.gs
function doPost(e) {
  
  var name = e.parameter.name;
  var age = e.parameter.age;
  
  var html = "HelloWorld!!<BR><BR>";
  html += "Name：" + name + "<BR>";
  html += "Age：" + age + "<BR>";
  
  return HtmlService.createHtmlOutput(html);
}
```

##3.2．POSTリクエストを発行して試してみる
GETリクエストの場合はブラウザのアドレスバーに入力するだけで試すことができましたが、POSTリクエストの場合は、少々工夫が必要になります。

ご自分のデスクトップ上に、以下のようなPOSTデータを送信するHTMLファイル「test.html」を作成します。

```html:test.html
<!DOCTYPE html>
<head>
  <meta charset="shift_jis">
  <title>doPostテスト</title>
</head>
<body>
  ■doPostテスト
  <form method="post" action="https://script.google.com/macros/s/[ID]/exec">
    <label>名前：<input type="text" name="name"></label><BR>
    <label>年齢 <input type="text" name="age"></label><BR>
    <input type="submit" value="送信"><BR>
  </form>
</body>
</html>
```

ブラウザで開くとこんな感じになります。

|![2020-09-25 (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/0aa4024e-e9b6-b02c-166e-8020ee1b4c35.png)|
|:--|

名前、年齢を適当に入力して、「送信」ボタンをクリックすると、↓のように表示されます。

|![2020-09-25 (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/176fd323-05e4-94bf-3116-f3503439f935.png)|
|:--|

もし、POSTで動いているのか、GETで動いているのか判別付けたいという場合には、ログを仕込むなどしてみてください。


#4．まとめ
GASを使うと、サーバの準備なしに簡単なアプリケーションサーバも作れてしまうんですね。
個人的にちょっとしたプログラムを提供する場合などには便利ですね。