ウェブアプリ

ユーザー インターフェースを構築する場合は、スクリプトをウェブアプリとして公開します。たとえば、ユーザーがサポートチームのメンバーとの予約をスケジュールできるスクリプトは、ユーザーがブラウザから直接アクセスできるように、ウェブアプリとして提供するのが最適です。

スタンドアロン スクリプトGoogle Workspace アプリケーションにバインドされたスクリプトは、次の要件を満たしている限り、ウェブアプリに変換できます。

ウェブアプリの要件

スクリプトは、次の要件を満たしている場合にウェブアプリとして公開できます。

リクエスト パラメータ

ユーザーがアプリにアクセスするか、プログラムがアプリに HTTP GET リクエストを送信すると、Google Apps Script は関数 doGet を実行します。プログラムがアプリに HTTP POST リクエストを送信すると、Apps Script は代わりに doPost を実行します。どちらの場合も、e 引数は、リクエスト パラメータに関する情報を含むことができるイベント パラメータを表します。次の表に、イベント オブジェクトの構造を示します。

フィールド
e.queryString

URL のクエリ文字列部分の値。クエリ文字列が指定されていない場合は null

name=alice&n=1&n=2
e.parameter

リクエスト パラメータに対応する Key-Value ペアのオブジェクト。複数の値を持つパラメータに対しては、最初の値のみが返されます。

{"name": "alice", "n": "1"}
e.parameters

e.parameter と同様のオブジェクト。ただし、各キーの値の配列を含む

{"name": ["alice"], "n": ["1", "2"]}
e.pathInfo

/exec または /dev の後の URL パス。たとえば、URL パスが /exec/hello で終わる場合、パス情報は hello です。

e.contextPath 使用されず、常に空の文字列です。
e.contentLength

POST リクエストの場合はリクエスト本文の長さ、GET リクエストの場合は -1

332
e.postData.length

e.contentLength と同じ

332
e.postData.type

POST 本文の MIME タイプ

text/csv
e.postData.contents

POST 本文のコンテンツ テキスト

Alice,21
e.postData.name

常に値「postData」

postData

次のような URL に usernameage などのパラメータを渡します。

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 本文で使用しないでください。

  • c
  • sid

これらのパラメータを使用すると、エラー メッセージ「申し訳ございませんが、リクエストされたファイルは存在しません」を含む HTTP 405 レスポンスが返されることがあります。可能であれば、別のパラメータ名を使用するようにスクリプトを更新してください。

スクリプトをウェブアプリとしてデプロイする

スクリプトをウェブアプリとしてデプロイする手順は次のとおりです。

  1. スクリプト プロジェクトの右上にある [デプロイ] > [新しいデプロイ] をクリックします。
  2. [種類の選択] の横にある [デプロイタイプを有効にする] > [ウェブアプリ] をクリックします。
  3. [デプロイ構成] の各項目にウェブアプリの情報を入力します。
  4. [デプロイ] をクリックします。

アプリを使用するユーザーにウェブアプリの URL を共有します(アクセス権を付与している場合)。

1 つのドメインにデプロイされたウェブアプリは、所有権が別のドメインの共有ドライブまたはアカウントに変更されると機能しなくなります。この問題を解決するには、新しい所有者または共同編集者が新しいドメインにウェブアプリを再デプロイします。また、ウェブアプリが元のドメインに戻された場合、再デプロイしなくても、そのドメインでウェブアプリが再び機能し始めます。

ウェブアプリのデプロイをテストする

スクリプトをウェブアプリとしてテストする手順は次のとおりです。

  1. スクリプト プロジェクトの右上にある [デプロイ] > [デプロイをテスト] をクリックします。
  2. [種類の選択] の横にある [デプロイタイプを有効にする] > [ウェブアプリ] をクリックします。
  3. ウェブアプリの URL の下にある [コピー] をクリックします。
  4. ブラウザに URL を貼り付けて、ウェブアプリをテストします。

    この URL は /dev で終わり、スクリプトの編集権限を持つユーザーのみがアクセスできます。このアプリのインスタンスは、常に最後に保存されたコードを実行し、開発中のテストのみを目的としています。

ウェブアプリできめ細かい OAuth 機能をテストするには、プロジェクトにまだ承認がないことを確認します。既存の承認を無効にするには、ScriptApp.invalidateAuth を使用します。すでにデプロイされていて、アクティブ ユーザーの ID で実行されているウェブアプリについては、マニフェストexecuteAs JSON フィールドを USER_DEPLOYING に変更します。

デベロッパーとして実行するウェブアプリをデプロイする場合は、ScriptApp.getOAuthToken で取得した OAuth トークンの処理に十分注意してください。これらのトークンは、他のアプリケーションにデータへのアクセス権を付与できます。クライアントに送信しないでください。

権限

ウェブアプリの権限は、アプリの実行方法によって異なります。

  • 自分としてアプリを実行 - この場合、ウェブアプリにアクセスするユーザーにかかわらず、スクリプトは常にスクリプトのオーナーであるユーザーとして実行されます。
  • ウェブアプリにアクセスするユーザーとしてアプリを実行 - この場合、スクリプトはウェブアプリを使用しているアクティブ ユーザーの ID で実行されます。この権限付与方法では、ユーザーがアクセスを承認すると、ウェブアプリにスクリプトの所有者のメールアドレスが表示されます。

不正使用を防ぐため、Apps Script では、新しいユーザーがユーザーとして実行されるウェブアプリを承認できるレートに上限が設定されています。これらの上限は、公開アカウントが Google Workspace ドメインの一部であるかどうかなど、さまざまな要因によって異なります。

共有ドライブを使用してウェブアプリで共同作業します。共有ドライブ内のウェブアプリをデプロイする際に [自分として実行] を選択すると、ウェブアプリはデプロイしたユーザーの権限で実行されます(スクリプトのオーナーが存在しないため)。

ウェブアプリを Google サイトに埋め込む {:#embed-web-app}

埋め込みウェブアプリは、悪用を防ぐためにアクセス権限の対象となります。埋め込みウェブアプリが動作しない場合は、ウェブアプリの所有者とドメイン管理者が設定した権限で、その使用が許可されているかどうかを確認してください。

ウェブアプリをサイトに埋め込むには、まずウェブアプリをデプロイする必要があります。また、[デプロイ] ダイアログの [デプロイされた URL] も必要です。

ウェブアプリを Sites ページに埋め込む手順は次のとおりです。

  1. ウェブアプリを追加するサイトのページを開きます。
  2. [挿入] > [URL を埋め込む] を選択します。
  3. ウェブアプリの URL を貼り付けて、[追加] をクリックします。

ウェブアプリは、ページのプレビューのフレームに表示されます。ページを公開すると、サイト閲覧者がウェブアプリを正常に実行する前に、ウェブアプリの承認が必要になることがあります。承認されていないウェブアプリは、ユーザーに承認プロンプトを表示します。

ウェブアプリとブラウザの履歴

マルチページ アプリケーションや、URL パラメータを使用して制御される動的 UI を持つアプリケーションをシミュレートするには、アプリの UI またはページを表す状態オブジェクトを定義し、ユーザーがアプリを移動する際に状態をブラウザの履歴にプッシュします。履歴イベントをリッスンして、ユーザーがブラウザのボタンで前後に移動したときにウェブアプリが正しい UI を表示するようにします。読み込み時に URL パラメータをクエリすることで、アプリはそれらのパラメータに基づいて UI を動的に構築し、ユーザーが特定の状態でアプリを起動できるようにします。

Apps Script には、ブラウザの履歴にリンクされたウェブアプリの作成を支援する 2 つの非同期クライアントサイド JavaScript API が用意されています。

  • google.script.history は、ブラウザの履歴の変更に動的に対応するためのメソッドを提供します。これには、状態(定義した単純なオブジェクト)をブラウザの履歴にプッシュする、履歴スタックの最上位の状態を置き換える、履歴の変更に応答するリスナー コールバック関数を設定するなどが含まれます。

  • google.script.url は、現在のページの URL パラメータと URL フラグメント(存在する場合)を取得する手段を提供します。

これらの履歴 API はウェブアプリでのみ使用できます。サイドバー、ダイアログ、アドオンではサポートされていません。この機能は、サイトに埋め込まれたウェブアプリでの使用もおすすめしません。