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

はじめに

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

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

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

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

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

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

スプレッドシートを開きます。

メニューバーの「ツール」から「スクリプトエディタ」をクリックします。

「コード.gs」というのが表示されていると思います。ここにスクリプトを記載します。デフォルトで「myFunction()」が書かれています。
本記事ではGASのWebアプリケーションとしての実行をやりたいので、以下のコードを書いてみました。

function doGet(e) {
  // doPostから送られてきたパラメータを受け取る。
  var param1 = e.parameter.pParam1;
  var param2 = e.parameter.pParam2;
  var param3 = e.parameter.pParam3;
  
  WriteParamSpreadsheet(param1, param2, param3);
  
}
 
 
function WriteParamSpreadsheet(param1, param2, param3) {
  // スプレッドシートのIDを指定して変数に格納。
  var InfoSpreadsheet = SpreadsheetApp.openById("1Ha4O**********************************IZPFI");
  
  // スプレッドシートの中のシート名を指定して変数に格納。
  var InfoSheet = InfoSpreadsheet.getSheetByName("シート1");
  
  InfoSheet.getRange("A1").setValue(param1);
  InfoSheet.getRange("A2").setValue(param2);
  InfoSheet.getRange("A3").setValue(param3);
 
}

※スクリプトの説明は後述します。

スクリプトエディタでコードを保存しようとすると、一番最初はプロジェクト名の決める画面が表示されます。
プロジェクト名は何でもいいので、わかりやすい名前を付けて「OK」をクリックします。

メニューバーの「公開」から「ウェブアプリケーションとして導入…」をクリックします。

[Project version]は一番最初の後悔なので「New」が入っています。
[Execute the app as]はとりあえず「Me(自分のGmailアドレス)」にします。
[Who has access to the app]も特に変更せず「Only myself」にします。

これは初回のみ表示される画面です。
スクリプトを書いているプロジェクトが、あなた(自分)のGoogleのデータにアクセスすることを許可してよいかと聞いてきています。
「許可を確認」をクリックします。

Googleのアカウントを入力する画面が表示されますので、対象のアカウントをクリックします。これも初回時しか表示されません。

「詳細」をクリックします。

「”自分で決めたプロジェクト名”(安全ではないページ)に移動」をクリックします。

「許可」をクリックします。この画面も初回時のみ表示されます。
ちなみに、「Googleドライブのスプレッドシートの表示、編集、作成、削除」と書かれており、スプレッドシートに対する許可を求めてきている理由は、スクリプトのスコープに「https://www.googleapis.com/auth/spreadsheets」が入っているからです。(本記事では詳しくは触れません)

これで無事にスクリプトが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ですね。




スクリプトの説明

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

function doGet(e) {
  // doPostから送られてきたパラメータを受け取る。
  var param1 = e.parameter.pParam1;
  var param2 = e.parameter.pParam2;
  var param3 = e.parameter.pParam3;
  
  WriteParamSpreadsheet(param1, param2, param3);
  
}
 
 
function WriteParamSpreadsheet(param1, param2, param3) {
  // スプレッドシートのIDを指定して変数に格納。
  var InfoSpreadsheet = SpreadsheetApp.openById("1Ha4O**********************************IZPFI");
  
  // スプレッドシートの中のシート名を指定して変数に格納。
  var InfoSheet = InfoSpreadsheet.getSheetByName("シート1");
  
  InfoSheet.getRange("A1").setValue(param1);
  InfoSheet.getRange("A2").setValue(param2);
  InfoSheet.getRange("A3").setValue(param3);
 
}
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を導入している企業に良い改善提案ができそうです。



この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント

コメントする

CAPTCHA