公開してよいスクリプトプロパティをHTMLのリンクへ渡します。
ここではPUBLIC_LINKにCGメソッドの公開URLを保存し、リンクとして表示します。
iframeの埋め込み先による表示制限と切り分けるため、最小例はリンクにしています。
以下の模擬検証は2026年10月2日の記録です。
ローカルの模擬検証を行いましたが、実際のスクリプトプロパティの設定、Webアプリのデプロイとリンク表示は未検証です。
練習用の入力と設定
新しいApps ScriptプロジェクトのCode.gsへ、本文のJavaScriptを保存します。
配布ZIPのarticle-325.jsは旧版です。
本文では不要なシート取得関数を除き、画面幅とタイトルの設定を修正しています。
同名の関数を含むため、別の記事のコードを同じプロジェクトへ混ぜないでください。
| 設定名 | 設定する値 |
|---|---|
| PUBLIC_LINK | https://cg-method.com/ など、このサイトの公開URL。APIキーや非公開の照会URLは入れない |
「プロジェクトの設定」→「スクリプトプロパティ」で、プロパティ名をPUBLIC_LINKにします。
値へhttps://cg-method.com/を入れ、スクリプトプロパティを保存してください。
この例で設定するプロパティはPUBLIC_LINKだけです。
まず新規の練習データを使い、要求される認可範囲と操作内容を確認してください。
入力例と実行する関数
https://cg-method.com/?a=1&b=2を渡す例です。
生成したHTMLのリンク先を確認し、doGetでは設定したPUBLIC_LINKが使われることをテストします。
WebアプリではdoGetがHTMLを返します。
画面幅とブラウザーのタイトルは、HtmlOutputのaddMetaTagとsetTitleで設定します。
HTMLへ直接書いたmetaタグとtitleタグはApps Scriptで無視されるためです。
「デプロイ」→「新しいデプロイ」で種類を「ウェブアプリ」にします。
練習では実行するユーザーを自分、アクセスできるユーザーを自分のみに設定します。
デプロイ後の/exec URLを開き、「CGメソッドを開く」リンクの行き先を確認してください。
エディタでdemoPublicLinkを実行するだけでは、ブラウザー上のリンク表示は確認できません。
この例はシートやDriveを読みません。閲覧者へ公開されるHTMLとURLには個人情報や秘密を入れず、Webアプリにアクセスできるユーザーを確認します。練習では自分のみを対象にします。
// このコードは記事ごとに別のApps Scriptプロジェクトへ保存します。
function required_(key) {
const value=PropertiesService.getScriptProperties().getProperty(key);
if (!value) throw new Error(key+'を設定してください');
return value;
}
function escapeHtml_(value) {
return String(value).replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));
}
function https_(value) {
const s=String(value).trim();
if (!/^https:\/\/[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?(?::443)?(?:[/?#][^\s<>"'\\]*)?$/i.test(s)) throw new Error('HTTPS URLを確認してください');
return s;
}
function publicLinkHtml_(value) {
const url=https_(value);
// 公開してよい、このサイトのURLだけを渡します。
if(!/^https:\/\/cg-method\.com(?:[:/?#]|$)/i.test(url)) throw new Error('cg-method.comの公開URLを指定してください');
return '<!doctype html><html lang="ja"><meta charset="UTF-8"><body><p><a rel="noopener noreferrer" target="_blank" href="'+escapeHtml_(url)+'">CGメソッドを開く</a></p></body></html>';
}
function demoPublicLink(){return publicLinkHtml_('https://cg-method.com/?a=1&b=2');}
function doGet() {
return HtmlService.createHtmlOutput(publicLinkHtml_(required_('PUBLIC_LINK')))
.addMetaTag('viewport', 'width=device-width, initial-scale=1')
.setTitle('公開リンクの練習');
}
確認結果と切り分け
| 条件 | 結果 |
|---|---|
| 未設定・他のホスト・不正URL | HTMLを返す前に停止 |
| URLの区切り記号 | 属性内でエスケープして出力 |
| 秘密情報 | ブラウザーへ送られる値は隠せないため入力しない |
Node.jsの模擬検証は5記事合計69ケースです。
2026年10月28日は、この1記事のプロパティ取得・URL拒否・HTMLエスケープ・画面設定を模擬試験しました。
Google上でのデプロイやリンク表示は今回も未検証です。
純粋関数の結果と、模擬のGoogleオブジェクトで対象選択・書込先・失敗時停止を確認した範囲であり、実サービスの成功を示すものではありません。
停止と戻し方
この例は定期トリガーを作成しません。
doGetはWebアプリのURLにアクセスしたときに呼ばれます。リンクを表示するための時間主導トリガーは不要です。
公開を終了する場合は「デプロイを管理」で対象のデプロイをアーカイブします。コードを戻す場合は旧版を保存するだけでなく、/execが使用するデプロイのバージョンも更新し、公開URLで確認します。
プロパティの変更は開いたページへ自動反映されません。
同じプロジェクトのPUBLIC_LINKだけを変更した場合は、保存後にWebアプリを再読み込みします。
コードを変更した場合は、/execが使うデプロイのバージョン更新も必要です。
保存方法はProperties Serviceの公式資料で確認できます。
公式資料
Driveフォルダの取得と列挙、シート範囲への反映、HTMLへの出力とエスケープ、Apps Scriptの利用上限を参照してください。
関連記事・旧実装の参考資料
従来のコードや外部の参考例は、本稿の練習ZIPと内容が異なる場合があります。
今回のコードは記事ごとに別のプロジェクトへ保存してください。





スクリプトプロパティのHTML出力についてよくある質問
スクリプトプロパティには、何を保存しますか?
この例のPUBLIC_LINKには公開してよいURLだけを保存します。その値はHTMLへ出力され、閲覧者に見えるため、APIキーや非公開の照会URLは入れないでください。
プロパティに秘密情報を入れてもよいですか?
スクリプトプロパティへ保存することと、HTMLへ出力することは別です。この例のPUBLIC_LINKはブラウザーへ送るため、秘密を入れません。サーバー側だけで使う設定でも、スクリプト編集者から秘密を守れるわけではないため、編集権限を限定してください。
PUBLIC_LINKが未設定、または不正なURLのときは?
HTMLを返す前に停止します。他のホストや不正なURLの場合も同様に止まります。
URLに特殊な区切り記号が入っていたら?
属性内でエスケープして出力します。HTMLの属性が壊れたり、意図しない命令になったりしないようにしています。
iframeで埋め込まずに、リンクにしているのはなぜですか?
埋め込み先による表示制限と切り分けるためです。最小例はリンクにしています。
プロパティを変更したのに、表示が変わらないのはなぜですか?
プロパティの変更は、開いたページへ自動反映されません。ページを再読み込みして確認してください。Webアプリを公開している場合は、配備の状態も確認します。
Webアプリを公開するときの注意点は?
練習では自分のみがアクセスできるデプロイを使います。公開終了時は対象デプロイをアーカイブし、旧コードへ戻す場合はデプロイのバージョンも確認してください。
この記事のコードは、動作確認済みですか?
Node.jsの模擬検証(5記事合計69ケース)は行いましたが、実サービスの成功を示すものではありません。実際のスクリプトプロパティの設定、Webアプリのデプロイとリンク表示は未検証です。まず新規の練習データで試してください。
