内容
Web Appsを使用するためにスクリプトを作成しているとき、作成したスクリプトをWeb Appsで使用するためには毎回プロジェクトバージョンを更新する必要があります。私はときどきこの更新を失念したまま動作確認を行い、動かないと悩まされることがあります。私にとっては毎回の更新作業はとても大変に感じており、タイトルにあるようなGoogle Apps Scriptのウェブアプリケーションをプロジェクトバージョンを更新せずに最新版を反映させたいと思っていました。最近、Web Appsを一部使用したライブラリを作成している際、このような更新をせずとも最新版を反映する方法を見つけましたのでご紹介させていただきます。
もしも既知の情報であれば申し訳ありません。
準備
Google Apps Scriptを2つ新規作成します。一つはライブラリとして、もう一つはWeb Appsの起動用として。次のような流れでそれぞれを設定してください。
ライブラリ側
- ライブラリとなるプロジェクトのスクリプトエディタを起動
- スクリプトIDの取得
- ファイル
- プロジェクトのプロパティ
- スクリプトIDをコピー
今の場合、自分で使用するだけなので共有設定は不要です。
Web Apps側
- Web Appsを使用するプロジェクトのスクリプトエディタを起動
- ライブラリの登録
- リソース
- ライブラリ
- 「ライブラリを追加」へスクリプトIDを入力し追加ボタンを押す
- バージョンはその時の最新のもの、デベロッパーモードON(← これ重要です)
- 識別子を指定する(サンプルとして
lib
) - 保存
- Web Appsを使用するプロジェクト内のスクリプト(例えばコード.gs)へライブラリ上の関数を指定します。メソッドがGETの場合はdoGetが、POSTの場合はdoPostが呼ばれます。
- サンプルとして下記を想定します。下記を入力後はWeb Appsをデプロイする前に必ず保存してください。
lib
は識別子に対応しています。function doGet(e) {return lib.doget(e)}
function doPost(e) {return lib.dopost(e)}
- サンプルとして下記を想定します。下記を入力後はWeb Appsをデプロイする前に必ず保存してください。
- Web Appsをデプロイします。
- スクリプトエディタ
- 公開
- ウェブアプリケーションとして導入
- プロジェクトバージョンを新規作成(変更内容の説明は適当に入力 数字でも文字列でもOK)
- 次のユーザとしてアプリケーションを実行は自分にセット
- アプリケーションにアクセスできるユーザを全員(匿名ユーザを含む)にセット
- 更新ボタンを押す
- 現在のウェブ アプリケーションのURLをコピー
- URLは
https://script.google.com/macros/s/ ##### /exec
です。
- URLは
- OKボタンで終了
これで準備は完了です。この後は、ライブラリ側のスクリプトを変更すると、Web Apps側のプロジェクトはプロジェクトのバージョンを変更しなくても反映されます。
動作テスト
例えば下記のようなテストを行います。
Web Apps側 : ライブラリの設定(識別子はlib
)を行い、下記をコピーペーストして保存し、 上記の流れでWeb Appsをデプロイした状態
function doGet(e) {
return lib.doget(e);
}
ライブラリ側 : 下記をコピーペースト
function doget(e) {
return ContentService.createTextOutput(e.parameters.data);
}
doGet()
の起動 : curlを使用してデータを送信します。doGetを起動させますので、データはURLのクエリパラメータとして記入します。
$ curl -L "https://script.google.com/macros/s/ ##### /exec?data=ok"
okが返されれば動作完了です。同様の方法でdoPostも使用することができます。
後は、ライブラリ側のスクリプトを変更して保存するだけでWeb Appsをデプロイしたプロジェクト側は特に何もすることなく、最新版でdoGet, doPostを使用することができます。個人的にはデバッグはこの方法で行い、実際に使用する際は、Web Apps側に戻すなどの使い方で進めています。