GAS

時短ワザも紹介!GASで作ったHTMLファイルにスクリプトレットを使って変数を渡す方法

thumbnail
n-mukineer
えぬ
えぬ

こんにちは、えぬ(@nmukineer)です!

GASでWebアプリを作るうえで、gsコード(バックエンド)側から、HTML(フロントエンド)側に変数を渡してあげる必要があります。スクリプトレットを使えば簡単に実現可能です!

前回の記事では、GASでWebページを作って公開する基本的なやり方を紹介しました。

前回の記事
GASを使ってたった5分でWebページを作成・公開する方法
GASを使ってたった5分でWebページを作成・公開する方法

今回はその続きとして、HTMLファイルに変数を渡して表示内容を変化させる方法について解説していきます!

このブログでわかること
  • スクリプトレットタグを使えば、gsコードからHTMLに変数を渡して処理することができる
  • スクリプトレットタグは3種類ある
  • 単語登録しておけば、入力の時短になる

スクリプトレットを使ってHTMLに変数を渡す方法

GASでは「スクリプトレットタグ」を使うことで、gsコードからHTMLに変数を渡したり、HTML内にgsコードを埋め込んだりすることができます。スクリプトレットの使い方を、サンプルコードを使って解説していきます。

スクリプトレットの使い方

まずはスクリプトレットの種類についてと、それぞれの使い方について簡単に紹介します。

HTML内で、<? ?>(スクリプトレットタグ)で囲まれた部分はgsコードとして実行することができます。

GASにおけるスクリプトレットは3種類あり、やりたいことによって使い分けると良いでしょう。

  1. 標準スクリプトレットタグ
    • 使い方:<??>で囲う
    • 動き:スクリプトを埋め込む
    • 例:<? hoge ="こんにちは" ?> //=> hogeに”こんにちは”が代入される
  2. 出力スクリプトレットタグ
    • 使い方:<?=?>で囲う
    • 動き:スクリプトを埋め込んで戻り値をテキストとして埋め込む
    • 例:<?= hoge ?> //=>”こんにちは”と書いたのと同じ意味になる
  3. 強制出力スクリプトレットタグ
    • 使い方:<?!=と?>で囲う
    • 動き:スクリプトを埋め込んで戻り値をコードとして埋め込む
    • <?!= HtmlService.createHtmlOutputFromFile('js').getContent(); ?> //=> js.htmlというファイルを読み込んで、そのコードをそのまま埋め込むことができる

ちなみにRuby on Railsの場合は、

<% ~ %>

<%= ~ %>

という書き方を使って、htmlファイル(厳密にはhtml.erb)にRubyコードを埋め込むことができるようになっています。

GASで一度理解できていれば、Ruby on Railsでもしっかり役に立つので覚えておきましょう!

GASにおける記述方法:HTML側

スクリプトレットの使い方がなんとなくわかったところで、基本的な使い方を紹介していきます。まずはHTML側の書き方から。

index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <?!= HtmlService.createHtmlOutputFromFile('header').getContent(); ?>
    <div>
      <div>こんな記事を書いています</div>
      <? links.forEach(link => { ?>
        <div><a href="<?= link.href ?>"><?= link.title ?></a></div>
      <? }); ?>
    </div>
  </body>
</html>

まずはこの部分。

<?!= HtmlService.createHtmlOutputFromFile('header').getContent(); ?>

header.htmlというHTMLファイルを呼び出して強制出力しています。(呼び出すときは.htmlの部分は書く必要ありません)

そして以下部分。

<? links.forEach(link => { ?>
  <div><a href="<?= link.href ?>"><?= link.title ?></a></div>
<? }); ?>

linksというオブジェクトの配列である変数をgsコード側から受け取って、forEachでループを回し、aタグでリンクを生成しています。

表示したいところは出力スクリプトレットタグ<?=?>で囲みますが、出力せずただgsコードとして実行したい部分は<??>で囲むようにします。

header.html

index.html側から呼び出されるHTMLファイルです。今回は簡単に以下の1行だけ書いてみました。このように、ヘッダーやフッターを別ファイルにしておくと、後々複数のページで共通して使いたくなった時に強制スクリプトレットタグを使って呼び出すだけで済むので便利です。

<h1>N日後にムキムキになるエンジニアブログ</h1>

GASにおける記述方法:gsスクリプト側

gsスクリプト側のコードのサンプルはこのようになっています。

function doGet() {
  const html = HtmlService.createTemplateFromFile('index');
  const links = [
    {
      title: "Open AI APIとGASを使って日本語から画像を自動生成(+LINE Bot化)する方法",
      href: "https://n-mukineer.com/2022/12/05/gas-open-ai-api-generate-image/"
    },
    {
      title: "GASを使ってたった5分でWebページを作成・公開する方法",
      href: "https://n-mukineer.com/2022/12/21/gas-open-web-page/"
    }
  ];
  html.links = links;
  return html.evaluate();
}

linksというオブジェクトの配列を定義し、HtmlService.createTemplateFromFileで生成したhtmlオブジェクトに、

html.(HTML側で定義されている変数名) = (gsコード側で代入したい変数名)

というようにして代入します。今回は、HTML側もgsコード側も両方linksという変数名のため、

html.links = links;

と書くとOKです。

最後に、returnする際にhtml.evaluate();としてあげれば、ブラウザでこのように表示されるようになります。

スクリプトレットを使ったサンプルコードを実行してブラウザで確認

小ワザ紹介:スクリプトレットを一瞬で入力する方法

ここまで紹介してきたスクリプトレットですが…

えぬ
えぬ

正直、キーボード超打ちづらいんですけど…

慣れている場合はすぐ打てるんでしょうけど、なかなか使わないキーばかりなので筆者も相当時間がかかっています。そんな時はタグを単語登録しましょう。

筆者の開発環境上Windowsでのやり方となりますが、以下の手順でIMEに単語を登録していきます。

「単語の追加」画面を開く

タスクバー上で「」や「A」と表示されている部分を右クリックし、「単語の追加」を選択しましょう。

スクリプトレットタグを単語として登録する

単語の登録ウィンドウがでるので、

単語(D):のところに<?よみ(R):のところにひらと入力し、登録(A):を押します。

単語の登録画面
残りのタグも同様に登録する

以下の対応表のように、合計4つの単語を登録しましょう。読みに関しては、自分の好きなようにアレンジしてください!

単語よみ
<?ひら
<?=ひら
<?!=ひら
?>とじ
4種類の単語登録を行う

以上で単語登録が完了です!

「ひら」と打って予測変換すると、3種類のスクリプトタグ(<?, <?=, <?!=)が候補に現れるよるようになりました。同様に、「とじ」と打って予測変換すると、?>が候補として出てきます。

「ひら」で左側のタグが3種類出てくる
「とじ」で右側のタグが出てくる

このようにして打てば、一瞬でスクリプトレットタグを打ち込むことができるようになりますので、ぜひ使ってみてください!

まとめ

GASでは3種類のスクリプトレットタグを使って、HTMLにgsコードを埋め込む方法があることを紹介しました。

  • 標準スクリプトレットタグ: <??>で囲む
  • 出力スクリプトレットタグ:<?=?>で囲む
  • 強制出力スクリプトレットタグ:<?!=?>で囲む
  • 慣れないうちは入力に時間がかかるので、単語登録しておくと時短に!

今回紹介したスクリプトレットタグを使って、Webアプリを作りました。よかったらこちらもどうぞ。

あわせて読みたい
GASで完全サーバレスのWebアプリを作成する方法を徹底解説
GASで完全サーバレスのWebアプリを作成する方法を徹底解説
このブログを書いている人
えぬ
えぬ
N日後にムキムキになるエンジニア
WebアプリエンジニアとしてIoTシステムを開発中。30代折り返し。 趣味(モノづくり、プログラミング、筋トレ)や子育てのことを主に記事にします。 TOEIC: 900点/第一級陸上無線技術士/第3種電気主任技術者/技術士一次試験合格/基本情報技術者/第2種電気工事士/デジタル技術検定2級(情報・制御)
記事URLをコピーしました