8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

I/O 2013のGoogle Apps Script Update その2 HtmlServiceのSandbox Mode

Last updated at Posted at 2013-05-16

今回のアップデートで追加された機能で割と素敵なのが
HtmlServiceのSandboxModeです。

今回はこのSandboxモードについて書きます。
なお、細かい話は後半に書きます。

Sandboxモード

Sandboxモードは二種類あります。

  • EMULATED
  • NATIVE

HtmlServiceはなにも設定しないとEMULATEDモードで動きます。

Sandboxモードを設定する

Sandboxモードを設定するにはHtmlServiceから作成できる、
HtmlOutputのsetSandbocMode()メソッドを使います。

SandboxModeの設定.js
function doGet(e){
  return HtmlService.createHtmlOutput('').setSandboxMode(HtmlService.SandboxMode.NATIVE);
}

SandboxMode.NATIVEを設定するとどうなるの?

単純に書くと、
問題が起きるかもしれないけど、
一部のブラウザでJSの実行速度が上がり、
使えなかったライブラリが一部使えるようになり、
うまく動かなかったCSSが動くようになります。

何それ素敵

なんで?

それを説明するにはいろいろな話をする必要があります。

HtmlServiceの問題点

HtmlServiceはGASのUIとして、HTMLやJS,CSSを使うことができ、
素敵そうに見えるのですが、いくつかの問題点があります。

  • 既存のクライアントサイトのJSライブラリの一部(というかかなりの数)が使えない
  • CSSも、かなりの設定が使えない
  • クライアントサイドJSが遅い

嫌になりますね。
これらの問題は、ほぼ一つの理由により発生しています。

それは
cajaを使ってるから

cajaって?

簡単に言うと(というより難しい話知らん)、
JavaScriptやCSS,HTMLをよりセキュアに実行するための仕組みです。

JS内にある危険なコードなどを上手いこと動かないようにして、
ユーザにとって安全なwebサービスを利用出来るようにしています。

cajaは何をしてる?

かなり色々やってます。

  • JS、CSS、HTMLを解析して危険なコードがある場合は除去したり、エラーを出す
  • それらを安全な形に変換する

ほかにもたくさん。

なんで遅くなったり問題が出るの?

この変換の部分にかなり時間がかかっているのと、
変換後のスクリプトが色々なチェックが入っていて遅くなるようです。

またECMAScript3(ES3)しか対応していないブラウザをECMAScript5(ES5)に対応させる変換する処理を行なっています。
しかもES5が動くブラウザに対しても強制的にこれを実行してます。

NATIVEモードでやってる事

NATIVEモードではこのES3からES5に対応される処理をES5に対応していない
ブラウザのみ実施し、
ES5に対応しているブラウザでの無駄な変換処理や、上書き処理を減らしています。

これにより無駄がなくなり早くなるようです。
※他にもやってるみたいですが

また制約も緩やかになるため、使えるライブラリも増えるようです。

まとめ

携帯から書いたので乱文になりましたが
とりあえず、NATIVEモードを使ってみて下さい。

なお、実験的な機能なので使う場合は自己責任でお願い致します。

8
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?