スクリプトのユーザー インターフェースを作成する場合は、ウェブアプリとして公開します。たとえば、ユーザーがサポートチームのメンバーとの予定をスケジュール設定できるスクリプトは、ユーザーがブラウザから直接アクセスできるように、ウェブアプリとして提供するのが最適です。
スタンドアロン スクリプトとGoogle Workspace アプリケーションに バインドされたスクリプトは、次の要件を満たしていれば、どちらも ウェブアプリに変換できます。
ウェブアプリの要件
スクリプトは、次の要件を満たしている場合にウェブアプリとして公開できます。
doGet関数またはdoPost関数が含まれている。- 関数が HTML サービス
HtmlOutputオブジェクトまたは コンテンツ サービスTextOutputオブジェクトを返す。
リクエスト パラメータ
ユーザーがアプリにアクセスした場合、またはプログラムがアプリに HTTP GET リクエストを送信した場合、Google Apps Script は関数 doGet を実行します。プログラムがアプリに HTTP POST リクエストを送信した場合、Apps Script は代わりに doPost を実行します。どちらの場合も、e 引数は、リクエスト パラメータに関する情報を含むことができるイベント パラメータを表します。イベント オブジェクトの構造を次の表に示します。
| フィールド | |
|---|---|
e.queryString |
URL のクエリ文字列部分の値。クエリ文字列が指定されていない場合は name=alice&n=1&n=2 |
e.parameter |
リクエスト パラメータに対応する Key-Value ペアのオブジェクト。複数の値を持つパラメータの場合は、 最初の値のみが返されます。 {"name": "alice", "n": "1"} |
e.parameters |
{"name": ["alice"], "n": ["1", "2"]} |
e.pathInfo |
|
e.contextPath |
使用されません。常に空の文字列です。 |
e.contentLength |
POST リクエストのリクエスト本文の長さ。GET リクエストの場合は 332 |
e.postData.length |
332 |
e.postData.type |
POST 本文の MIME タイプ text/csv |
e.postData.contents |
POST 本文のコンテンツ テキスト Alice,21 |
e.postData.name |
常に「postData」という値 postData |
次のように、username や age などのパラメータを URL に渡します。
https://script.google.com/.../exec?username=jsmith&age=21
パラメータは次のように表示されます。
function doGet(e) {
var params = JSON.stringify(e);
return ContentService.createTextOutput(params).setMimeType(ContentService.MimeType.JSON);
}
上記の例では、doGet は次の出力を返します。
{
"queryString": "username=jsmith&age=21",
"parameter": {
"username": "jsmith",
"age": "21"
},
"contextPath": "",
"parameters": {
"username": [
"jsmith"
],
"age": [
"21"
]
},
"contentLength": -1
}
次のパラメータ名はシステムによって予約されており、URL パラメータや POST 本文で使用しないでください。
csid
これらのパラメータを使用すると、「申し訳ございませんが、リクエストされたファイルは存在しません。」というエラー メッセージとともに HTTP 405 レスポンスが返されることがあります。 可能であれば、別のパラメータ名を使用するようにスクリプトを更新してください。
スクリプトをウェブアプリとしてデプロイする
スクリプトをウェブアプリとしてデプロイする手順は次のとおりです。
- スクリプト プロジェクトの右上にある [デプロイ] > [新しいデプロイ] をクリックします。
- [種類の選択] の横にある [デプロイタイプを有効にする] > [**ウェブアプリ**] 設定をクリックします。
- [デプロイ 構成] の下のフィールドに、ウェブアプリに関する情報を入力します。
- [デプロイ] をクリックします。
アクセス権を付与したユーザーとウェブアプリの URL を共有して、アプリを使用できるようにします。
1 つのドメインにデプロイされたウェブアプリは、所有者 が 別のドメインの共有ドライブ またはアカウントに変更されると機能しなくなります。この問題を解決するには、新しいオーナーまたは共同編集者が新しいドメインにウェブアプリを再デプロイします。または、ウェブアプリを元のドメインに戻すと、再デプロイしなくてもそのドメインでウェブアプリが再び機能するようになります。
ウェブアプリのデプロイをテストする
スクリプトをウェブアプリとしてテストする手順は次のとおりです。
- スクリプト プロジェクトの右上にある [デプロイ > テスト] をクリックします。
- [種類の選択] の横にある [デプロイタイプを有効にする] > [ウェブアプリ] をクリックします。
- ウェブアプリの URL の下にある [コピー] をクリックします。
ブラウザに URL を貼り付けて、ウェブアプリをテストします。
この URL は
/devで終わり、スクリプトの編集権限を持つユーザーのみがアクセスできます。このアプリのインスタンスは常に最後に保存されたコードを実行し、開発中のテストのみを目的としています。
ウェブアプリで詳細な OAuth 機能をテストするには、プロジェクトにまだ承認がないことを確認してください。既存の承認を無効にするには、
ScriptApp.invalidateAuthを使用します。
すでにデプロイされていて、アクティブなユーザーの ID で実行されているウェブアプリの場合は、マニフェストの executeAs
JSON フィールドを USER_DEPLOYINGに変更します。
デベロッパーとして実行するウェブアプリをデプロイする場合は、 ScriptApp.getOAuthTokenで取得した OAuth トークンの処理に十分注意してください。 これらのトークンを使用すると、他のアプリケーションがデータにアクセスできるようになります。クライアントに送信しないでください。
権限
ウェブアプリの権限は、アプリの実行方法によって異なります。
- 自分としてアプリを実行する \- この場合、ウェブアプリにアクセスするユーザーに関係なく、スクリプトのオーナーであるあなたとしてスクリプトが常に実行されます。
- ウェブアプリにアクセスするユーザーとしてアプリを実行する—この場合、 ウェブアプリを使用しているアクティブなユーザーの ID でスクリプトが実行されます。この 権限設定では、ユーザーがアクセスを承認すると、ウェブアプリにスクリプト オーナーのメールアドレスが表示されます。
不正使用を防ぐため、Apps Script では、ユーザーとして実行されるウェブアプリを新しいユーザーが承認できる頻度に制限が設けられています。これらの制限は 公開アカウントが Google Workspace ドメインの一部であるかどうかなど、さまざまな要因によって異なります。
共有ドライブを使用してウェブアプリで共同作業を行います。 共有ドライブ内のウェブアプリをデプロイするときに [自分として実行] を選択すると、スクリプト オーナーが存在しないため、ウェブアプリはデプロイしたユーザーの権限で実行されます。
ウェブアプリを Google サイトに埋め込む {:#embed-web-app}
埋め込まれたウェブアプリは、不正使用を防ぐためにアクセス権の対象となります。埋め込まれたウェブアプリが機能しない場合は、ウェブアプリのオーナーとドメイン管理者が設定した権限でその使用が許可されているかどうかを確認してください。
ウェブアプリをサイトに埋め込むには、まず デプロイする必要があります。[デプロイ] ダイアログの [デプロイされた URL] も必要です。
ウェブアプリをサイト ページに埋め込む手順は次のとおりです。
- ウェブアプリを追加するサイトページを開きます。
- [挿入 > URL を埋め込む] を選択します。
- ウェブアプリの URL を貼り付けて、[追加] をクリックします。
ウェブアプリがページのプレビューのフレームに表示されます。ページを公開すると、サイトの閲覧者はウェブアプリが正常に実行される前に承認が必要になる場合があります。承認されていないウェブアプリでは、ユーザーに承認を求めるプロンプトが表示されます。
ウェブアプリとブラウザの履歴
複数ページのアプリケーションや、URL パラメータを使用して制御される動的な UI を持つアプリケーションをシミュレートするには、アプリの UI またはページを表す状態オブジェクトを定義し、ユーザーがアプリ内を移動するときにその状態をブラウザの履歴にプッシュします。履歴イベントをリッスンして、ユーザーがブラウザのボタンで前後に移動したときにウェブアプリに正しい UI が表示されるようにします。読み込み時に URL パラメータをクエリして、アプリがそれらのパラメータに基づいて UI を動的に構築し、ユーザーが特定の状態でアプリを起動できるようにします。
Apps Script には、ブラウザの履歴にリンクされたウェブアプリの作成を支援する 2 つの非同期クライアントサイド JavaScript API が用意されています。
google.script.historyには、ブラウザの履歴の変更に動的に対応するためのメソッドが用意されています。これには、状態(定義した単純なオブジェクト)をブラウザの履歴にプッシュする、履歴スタックの最上位の状態を置き換える、履歴の変更に対応するリスナー コールバック関数を設定するなどの操作が含まれます。google.script.urlを使用すると、現在のページの URL パラメータと URL フラグメントを取得できます(存在する場合)。
これらの履歴 API は、ウェブアプリでのみ使用できます。サイドバー、ダイアログ、アドオンでは対象外です。この機能は、サイトに埋め込まれたウェブアプリでの使用も おすすめしません。