公開してよいスクリプトプロパティをHTMLのリンクへ渡します。
ここではPUBLIC_LINKにCGメソッドの公開URLを保存し、リンクとして表示します。
iframeの埋め込み先による表示制限と切り分けるため、最小例はリンクにしています。
最終確認は2026年10月2日です。
ローカルの模擬検証を行いましたが、Googleへの認可・実シートへの反映・Driveの実ファイル列挙・Webアプリの配備は未検証です。
練習用の入力と設定
ZIPを展開し、使う記事のarticle-325.jsだけをApps Scriptへ保存します。
同名の関数を含むため、別の記事のコードを同じプロジェクトへ混ぜないでください。
| 設定名 | 設定する値 |
|---|---|
| PUBLIC_LINK | https://cg-method.com/ など、このサイトの公開URL。APIキーや非公開の照会URLは入れない |
プロジェクトの設定でスクリプトプロパティを入力します。
まず新規の練習データを使い、要求される認可範囲と操作内容を確認してください。
入力例と実行する関数
https://cg-method.com/?a=1&b=2を渡す例です。
生成したHTMLのリンク先を確認し、doGetでは設定したPUBLIC_LINKが使われることをテストします。
WebアプリではdoGetがHTMLを返します。
まずテスト用の配備で対象ユーザーと実行するアカウントを確認し、意図しない公開範囲へ変更しないでください。
閲覧者へ公開されるHTMLとURLには個人情報や秘密を入れず、シートを読む権限と閲覧者のアクセス条件を実環境で確認します。
// このコードは記事ごとに別のApps Scriptプロジェクトへ保存します。
function required_(key) {
const value=PropertiesService.getScriptProperties().getProperty(key);
if (!value) throw new Error(key+'を設定してください');
return value;
}
function safeCell_(value) {
const s=String(value);
return /^[=+@-]/.test(s) ? "'"+s : s;
}
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 sourceSheet_() {
const sheet=SpreadsheetApp.openById(required_('SPREADSHEET_ID')).getSheetByName(required_('SHEET_NAME'));
if (!sheet) throw new Error('対象シートがありません');
return sheet;
}
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"><meta name="viewport" content="width=device-width,initial-scale=1"><title>公開リンクの練習</title><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')));}
確認結果と切り分け
| 条件 | 結果 |
|---|---|
| 未設定・他のホスト・不正URL | HTMLを返す前に停止 |
| URLの区切り記号 | 属性内でエスケープして出力 |
| 秘密情報 | ブラウザーへ送られる値は隠せないため入力しない |
Node.jsの模擬検証は5記事合計69ケースです。
純粋関数の結果と、模擬のGoogleオブジェクトで対象選択・書込先・失敗時停止を確認した範囲であり、実サービスの成功を示すものではありません。
停止と戻し方
この例は定期トリガーを作成しません。
既存トリガーから呼ぶ変更を加える場合は、まず手動の1回を確認し、停止時にはそのトリガーを止めます。
Webアプリを公開している場合は配備を停止するか、保存した旧版へ戻し、公開ページを再読み込みして確認します。
プロパティの変更は開いたページへ自動反映されません。
公式資料
Driveフォルダの取得と列挙、シート範囲への反映、HTMLへの出力とエスケープ、Apps Scriptの利用上限を参照してください。
関連記事・旧実装の参考資料
従来のコードや外部の参考例は、本稿の練習ZIPと内容が異なる場合があります。
今回のコードは記事ごとに別のプロジェクトへ保存してください。





