GASをWebAppとして公開して初回実行(doPostとdoGet)

はじめに

Google Apps Script(以下、GAS)をWebアプリケーションとして実行してみたいと思います。

本記事ではその手順を備忘録として残します。初回実行の時にしか表示されない画面とかあるので。

GASのスクリプトは簡単なもので、doPostで送られてきたパラメータを受け取り、それをスプレッドシートに記載する、というものにします。

それでは行ってみましょう。

 

スクリプトを書いて公開する

とりあえずスクリプトを書いてみます。一応手順にしました。

  1. スプレッドシートを開きます。
  2. メニューバーの「ツール」から「スクリプトエディタ」をクリックします。
  3. 「コード.gs」というのが表示されていると思います。ここにスクリプトを記載します。デフォルトで「myFunction()」が書かれています。
    本記事ではGASのWebアプリケーションとしての実行をやりたいので、以下のコードを書いてみました。

    ※スクリプトの説明は後述します。
  4. スクリプトエディタでコードを保存しようとすると、一番最初はプロジェクト名の決める画面が表示されます。
    プロジェクト名は何でもいいので、わかりやすい名前を付けて「OK」をクリックします。
  5. メニューバーの「公開」から「ウェブアプリケーションとして導入…」をクリックします。
  6. [Project version]は一番最初の後悔なので「New」が入っています。
    [Execute the app as]はとりあえず「Me(自分のGmailアドレス)」にします。
    [Who has access to the app]も特に変更せず「Only myself」にします。
  7. これは初回のみ表示される画面です。
    スクリプトを書いているプロジェクトが、あなた(自分)のGoogleのデータにアクセスすることを許可してよいかと聞いてきています。
    「許可を確認」をクリックします。
  8. Googleのアカウントを入力する画面が表示されますので、対象のアカウントをクリックします。これも初回時しか表示されません。
  9. 「詳細」をクリックします。
  10. 「”自分で決めたプロジェクト名”(安全ではないページ)に移動」をクリックします。
  11. 「許可」をクリックします。この画面も初回時のみ表示されます。
    ちなみに、「Googleドライブのスプレッドシートの表示、編集、作成、削除」と書かれており、スプレッドシートに対する許可を求めてきている理由は、スクリプトのスコープに「https://www.googleapis.com/auth/spreadsheets」が入っているからです。(本記事では詳しくは触れません)
  12. これで無事にスクリプトがWebアプリケーションとして公開されました。スクリプトの実行URLが[Current web app URL]に書かれています。
    メニューバーの「公開」⇒「ウェブアプリケーションとして導入…」からいつでも確認できますが、ここでメモっておいてもいいと思います。
    「OK」ボタンを押して閉じます。




URLからスクリプトを実行する

さて、先ほどのスクリプトをURLを指定して実行するわけですが、スクリプトの内容として、パラメータを受け取ってスプレッドシートに書き出す、というものでした。

ですので、URLにパラメータを指定してあげる必要があります。

まず、実行URLは下記です。(一部をマスク化しています)

https://script.google.com/macros/s/AKfyc**********************************************MuBex/exec

 

こいつに、以下のパラメータを3つ渡します。

パラメータ名
pParam1 パラメータ1だよ
pParam2 パラメータ2だよ
pParam3 パラメータ3だよ

実行URLにパラメータを渡す指定の仕方ですが、

“実行URL”?パラメータ名1=値1&パラメータ名2=値2&パラメータ名3=値3

となります。

つまり、今回実行するURLは下記となります。

https://script.google.com/macros/s/AKfyc**********************************************MuBex/exec?pParam1=パラメータ1だよ&pParam2=パラメータ2だよ&pParam3=パラメータ3だよ

 

これを実行すると、スクリプトに、”パラメータ1だよ”と”パラメータ2だよ”と”パラメータ3だよ”という値が入ってくるわけです。

それでは実行してみましょう。

結果では「エラー」と表示されますが、「スクリプトが完了しましたが、・・・」と記載があるので、スクリプト自体は正常終了しています。ただ戻り値が無いと言っているだけです。

 

さて、スプレッドシートを見てみましょう。セルA1、A2、A3に、それぞれ渡した”パラメータ1だよ”、”パラメータ2だよ”、”パラメータ3だよ”が記載されています。

 

これがいわゆる、doPostとdoGetですね。




スクリプトの説明

さて、先ほど実行したスクリプトの説明をしたいと思います。

1行目のdoGet(e)

⇒doPost(URLを指定して実行)のリクエスト処理を受け取る関数です。

 

var param1 = e.parameter.pParam1;
var param2 = e.parameter.pParam2;
var param3 = e.parameter.pParam3;

⇒URLで指定した「pParam1」「pParam2」「pParam3」の値を変数(param1,param2,param3)に格納しています。

 

WriteParamSpreadsheet(param1, param2, param3);

⇒スクリプト後半のWriteParamSpreadsheet()関数に、値を渡しながら呼び出しています。

 

function WriteParamSpreadsheet(param1, param2, param3)

⇒値を3つ受け取って実行する関数です。最終的にはスプレッドシートに受け取った変数の値を書きだします。

 

var InfoSpreadsheet = SpreadsheetApp.openById(“1Ha4O**********************************IZPFI”);

⇒スプレッドシートのIDを指定して、スプレッドシートを変数(InfoSpreadsheet)に格納しています。
※スプレッドシートのIDとは、スプレッドシートのURLの下記の部分です。

 

var InfoSheet = InfoSpreadsheet.getSheetByName(“シート1”);

⇒先ほどのスプレッドシートの変数から「getSheetByName」メソッドでシート名を指定し、そのシートを変数(InfoSheet)に格納しています。

 

InfoSheet.getRange(“A1”).setValue(param1);
InfoSheet.getRange(“A2”).setValue(param2);
InfoSheet.getRange(“A3”).setValue(param3);

⇒先ほど格納したシートの変数から、「getRange」メソッドで書きだすセルを指定し、「setValue」メソッドで値を書きだしています。




補足(スクリプトを更新した時は)

Webアプリケーションとして公開しているスクリプトを修正した時などは、あらためて「ウェブアプリケーションとして導入…」から再度公開し直す必要があります。

公開し直して、版を最新にしないと、修正前のスクリプトが実行されてしまいます。

スクリプトを修正したら、その新しい状態をGoogleに渡す、といったイメージでしょうか。

手順は下です。

  1. メニューバーの「公開」から「ウェブアプリケーションとして導入…」をクリックします。
  2. [Project version]のプルダウンから、「New」を選択し、「更新」ボタンをクリックします。
  3. 「OK」をクリックします。

 

終わりに

お読みいただきありがとうございました。

ツールにおいては、Googleが強いですね。Google Apps Scriptを極めていけば、G-Suiteを導入している企業に良い改善提案ができそうです。