1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Apps ScriptでWebアプリを公開する仕組みを徹底解説【HTML動的生成】

Posted at

はじめに

「Google Apps Script(GAS)でWebページが表示されてるけど、どういう仕組み?」
そんな疑問を持つ方のために、この記事では GASでHTMLを動的生成するWebアプリの仕組み を解説します。

実際のコード構造、URLの成り立ち、公開方法、そしてサーバーの裏側まで
“どう動いているのか”を理解できるように整理しました。

1. GASでWebアプリを公開するとは?

Google Apps Script は、Googleが提供する完全マネージドなスクリプト実行環境です。
スプレッドシート操作だけでなく、WebアプリとしてHTMLを生成・配信することもできます。

デプロイ後に発行されるURLにアクセスすると、GAS側でHTMLが生成され、
ブラウザに静的なHTMLページとして返却されます。

2. 基本構造:doGet(e) がエントリーポイント

Webアプリとして公開されたGASでは、
HTTPのGETリクエストを受けると自動で doGet(e) 関数が呼び出されます。

function doGet(e) {
  var page = e.parameter.p || '';  // URLパラメータ取得(例: ?p=home)
  var html;

  switch(page) {
    case 'home':
      html = getHomeHtml(e);
      break;
    case 'report':
      html = getReportHtml(e);
      break;
    default:
      html = '<p>Error: invalid page</p>';
  }

  // 共通リソース読み込み
  var fileList = [
    {name: 'style.css', type: 'drive', id: 'xxxxxxxxxxxxxxxx'},
    {name: 'jquery.min.js', type: 'cdn', url: 'https://ajax.googleapis.com/ajax/libs/jquery/1.12.1/jquery.min.js'}
  ];
  html = getFileLoadHtml(fileList) + '<body>' + getHeader(e) + html + getFooter(e) + '</body>';

  // 自身のURLを挿入
  html = html.replace(/\{parentUrl\}/g, ScriptApp.getService().getUrl());

  return HtmlService.createHtmlOutput(html).setTitle('My GAS WebApp');
}

仕組みまとめ

  • URLアクセス → doGet(e) 自動実行
  • e.parameter でクエリパラメータを取得
  • ページ名(p)でHTML生成関数を分岐
  • HtmlService.createHtmlOutput() でHTMLを返す

3. ページごとのHTML生成

URLに応じて異なる関数でHTMLを生成します。

function getHomeHtml(e){
  var title = '<h2>ダッシュボード</h2>';
  var img = '<img src="https://example.com/img/home.png">';
  return title + '<div>' + img + '</div>';
}

doGet は各ページ関数を呼び出し、生成結果をまとめてブラウザに返却します。
ヘッダーやフッターは共通HTMLとして組み込まれます。

4. 外部ファイル(CSS/JS)の読み込み

DriveやCDN上のファイルを動的に読み込みます。

function getFileLoadHtml(fileList){
  return fileList.map(file => {
    if (file.name.endsWith('.css') && file.type === 'drive') {
      return '<style>' + DriveApp.getFileById(file.id).getBlob().getDataAsString() + '</style>';
    }
    if (file.name.endsWith('.js') && file.type === 'drive') {
      return '<script>' + DriveApp.getFileById(file.id).getBlob().getDataAsString() + '</script>';
    }
    if (file.type === 'cdn') {
      return file.name.endsWith('.css')
        ? `<link rel="stylesheet" href="${file.url}">`
        : `<script src="${file.url}"></script>`;
    }
    return '';
  }).join('');
}
  • Google DriveのCSS/JSを直接埋め込み可能
  • jQueryなどのCDNスクリプトも併用できる

5. URLの構造と自動生成

公開したWebアプリのURLは自動生成されます。

https://script.google.com/a/example.com/macros/s/AKfycbxxxxxxxxxxxx/exec?p=home
要素 内容
script.google.com 固定ドメイン(GAS共通)
/a/{組織ドメイン} Google Workspace環境の場合、自動付与される(例: /a/example.com
/macros/s/{スクリプトID}/exec デプロイ時に自動生成されるエンドポイント
?p=home ページ指定のクエリパラメータ

Google Workspace アカウントで公開する場合は、組織ドメインが自動的にURLに含まれます。
スクリプトIDやドメインは コード側で設定する必要はなく、自動生成されます。

var rootUrl = ScriptApp.getService().getUrl();

6. 公開設定(アクセス権と実行権)

appsscript.json の設定例:

"webapp": {
  "executeAs": "USER_DEPLOYING",
  "access": "DOMAIN"
}
設定項目 意味
executeAs 実行ユーザー(デプロイ者 or アクセス者)
access 公開範囲(全員/ドメイン内/自分のみ)

公開手順

  1. エディタ上で「デプロイ」→「ウェブアプリとして導入」
  2. 実行ユーザーとアクセス権限を設定
  3. 自動でURLが発行される

7. サーバーとドメインの仕組み

GASのWebアプリは 完全サーバーレス構成
Googleがサーバーを管理しており、GCPのDNSやCompute Engine設定は不要です。

項目 GAS Webアプリ Cloud Run/Functions
サーバー管理 不要(自動) 不要(コンテナ実行)
ドメイン script.google.com 固定 カスタムドメイン可
DNS設定 不要 必要(独自ドメイン時)
実行環境 GASランタイム Node.js / Pythonなど
デプロイ方法 GASエディタ gcloud CLI など

8. 実際のリクエストフロー

① ユーザーがURLを開く
 ↓
② GASが自動で doGet(e) を実行
 ↓
③ e.parameter からURLパラメータ取得
 ↓
④ ページHTMLを生成
 ↓
⑤ 共通CSS/JSを結合してHTML出力
 ↓
⑥ HtmlService.createHtmlOutput() で返却
 ↓
⑦ ブラウザにページが表示

9. まとめ

要素 内容
サーバー Google管理(完全マネージド)
公開URL 自動生成(script.google.com/.../exec
HTML生成 doGet内でサーバーサイド組み立て
認証 Workspaceドメインで制御可
独自ドメイン 標準では非対応(Cloud Run経由で実現可能)

おわりに

GASのWebアプリは「サーバーを意識せずに動的ページを配信できる」便利な仕組みです。
社内ポータルやダッシュボード、データ参照ページなどに最適です。

「サーバーもDNSも不要で公開できるWebアプリ」——
それがGoogle Apps Scriptの強みです。

参考ドキュメント


1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?