Google App ScriptのHtmlService.createTemplateFromFile(template).evaluate()は何をしているのか
まずはじめに
GoogleApp Script(以降GAS)でHTMLファイルを表示させる際に記載する「HtmlService.createTemplateFromFile(template).evaluate();」という長い式みたいなもの。「とりあえずこれを書けばHTMLが表示される」という認識で使っている人も多いと思います。私も最初は「HTMLファイルを表示してくれる魔法の文」と思って使用していました。それが嫌で今回はその魔法の文の正体を、自分なりに調べてまとめてみたので、備忘録がてら書いていきます。
分解してみる
まずは長い式みたいなものを分解して細かくみていきましょう。
HtmlService.createTemplateFromFile(template).evaluate()は
・HtmlService
・createTemplateFromFile(引数)
・evaluate()
の3つに分けることができます。
あえてその長いコードを日本語で表すなら、「HtmlServiceクラスがもつcreateTemplateFromFile()メソッドが呼び出され、その戻り値のオブジェクトがもつevaluate()メソッドを呼び出す」というような感じになります。
ではその1つ1つをみていきましょう。
HtmlService
これは
スクリプトからHTMLやその他コンテンツを返すためのサービス
参考:https://developers.google.com/apps-script/reference/html/html-service
です。「Webページを作成するための機能たちを提供するもの」と考えればよいでしょう。
createTemplateFromFile(引数)
コードエディタのファイルから新しい HtmlTemplate オブジェクトを作成するメソッド
参考:https://developers.google.com/apps-script/reference/html/html-service#createHtmlOutput(String)
です。引数にHTMLのファイル名を記述することによって、HtmlTemplateオブジェクトといわれるものを作成します。
このHtmlTemplateオブジェクトというのはHTMLを動的に生成するためのオブジェクトだと思っていただければよいです。
evaluate()
簡単に書くと
HtmlOutput オブジェクトを返すメソッド
です。HtmlOutputオブジェクトとは何かといいますと、GASの公式ホームページによると、
セキュリティ上の考慮事項により、スクリプトでは、HTML をブラウザにそのまま返すことはできません。その代わりに、悪意のあるアクションを実行できないようにサニタイズする必要があります
参考:https://developers.google.com/apps-script/reference/html/html-output
と書いてありました。つまりHtmlOutputオブジェクトとは「HTMLをブラウザにはそのまま表示出来ないからサニタイズされたものが入っている」と思えばよいでしょう。(サニタイズについては各自でお調べください)
まとめると
HtmlService.createTemplateFromFile(template).evaluate()の大まかな処理の意味としては、
「HtmlServiceクラス」にある「createTemplateFromFileメソッド」を呼び出し、「HTMLを動的に生成するオブジェクト」を作成し、そのままではHTMLを表示出来ないので「evaluateメソッドでサニタイズ」して表示する、になります。
最後に
ここまでみてきましたが、長くて複雑そうなものは、細分化して一つ一つをチェックし、最後に組み合わせると、案外何をしているかわかったりもします。以上備忘録でした。