libro
www.tuyano.com
Google Apps Scriptプログラミング [中級編]

Cache Serviceによるキャッシュ機能の利用 (3/3)

作成:2012-08-26 09:57
更新:2012-08-26 09:57

■Webアプリケーションをキャッシュする

では、実際にWebアプリケーションを使ってキャッシュを利用してみましょう。ここでは、あらかじめHTMLファイルを用意しておき、それをWebページとして表示させるサンプルを考えてみます。そしてこのWebページをキャッシュしてみましょう。

まず、HTMLページを作成します。Google Apps Scriptのスクリプトエディタで、<ファイル><新規作成><HTMLファイル>メニューを選び、「index.html」というHTMLファイルを作って下さい。そして、適当にHTMLのページを書いておきます。内容は適当に作って構いません。

続いて、スクリプトを作成します。ここでは、Webアプリケーションとして公開するために「doGet」メソッドを用意しておきます。下のリスト欄にサンプルスクリプトを挙げておきますので、このようにメソッドを記述しておいて下さい。なお、あわせてキャッシュをクリアするclearCache関数も掲載しておきました。これを実行すれば、キャッシュを削除できます。

スクリプトの作成を終えたら、<ファイル><バージョンを管理>メニューを選び、現在のスクリプトを任意のバージョンで保存して下さい。

※このあたりの詳細は、「Webアプリケーション開発とHtml Service(http://libro.tuyano.com/index3?id=926001)を参照下さい。

続いて、<公開><Webアプリケーションとして導入>メニューを選び、Project versionのポップアップメニューから、先ほど保存しておいたバージョンを選んで下さい。これで「Update」ボタンでアップデートすれば、指定のアドレスにアクセスするとdoGetが呼び出され、index.htmlをテンプレートにして生成されたページが表示されるようになります。

ここでは、まずパブリックキャッシュ用のCacheを取得し、そこから「index」というキーのキャッシュを取り出しています。このindexというのが、ここでの保存するキャッシュ名です。
  var cache = CacheService.getPublicCache();
  var index = cache.get("index");
これで、保管されているindexキャッシュが取り出せます。ただし、キャッシュが存在しない場合は、このgetされた値はnullになっています。そこで、indexキャッシュがnullかどうかで処理を分岐させています。

nullでない場合は、キャッシュが保存されていることがわかりますから、そのまま取り出したテキストを元にTemplateオブジェクトを作成し、それをreturnします。
return HtmlService.createHtmlOutput(index);
たったこれだけで、キャッシュに保存されているHTMLコードをそのままページに出力されるようになります。――では、キャッシュがない場合はどうしているでしょうか。これが実は以外に面倒なのです。
var output = HtmlService.createTemplateFromFile('index');
index = output.evaluate();
まず、index.htmlをもとにHtmlTemplateオブジェクトを作成します。そしてそこからevaluateHtmlOutputオブジェクトを作成します。
cache.put("index", index.getContent(), 60 * 60 * 24);
続いて、Cacheオブジェクトのputを使い、キャッシュを保存します。このとき注意すべきは、「indexをそのまま保存しない」という点です。evaluateで取得したindexは、HtmlOutputオブジェクトです。このオブジェクトから、getContentでテキストのコンテンツを取り出し、これを保存しなければいけません。これを忘れると、HtmlOutputというオブジェクト名のテキストがキャッシュされてしまいます。
return HtmlService.createHtmlOutput(index.getContent());
最後にHtmlOutputを作成してreturnします。まぁ、output.evaluateした値をそのままreturnしてもいいのですが、キャッシュしたのと同じテキストから新たにHtmlOutputを生成しておきました。

――ざっとHTMLのテキストをキャッシュして利用する流れを説明しましたが、HtmlOutputを利用する場合、「その値はオブジェクトかテキストか」ということをよく考えて処理しないといけません。この点さえしっかり抑えておけば、キャッシュ機能そのものは比較的簡単に使えることがわかるでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

function doGet() {
  var cache = CacheService.getPublicCache();
  var index = cache.get("index");
  if (index != null){
    return HtmlService.createHtmlOutput(index);
  } else {
    var output = HtmlService.createTemplateFromFile('index');
    index = output.evaluate();
    cache.put("index", index.getContent(), 60 * 60 * 24);
    return HtmlService.createHtmlOutput(index.getContent());
  }
}

function clearCache(){
  var cache = CacheService.getPublicCache();
  var index = cache.get("index");
  Logger.log(index);
  cache.remove("index");
}

※関連コンテンツ

「Google Apps Scriptプログラミング [中級編]」に戻る