質問: Google Apps Script の V8 エンジンを動かしてみています。 疑問がわきました。 GASのエンジンはV8か、Rhino かがあると思いますが、この2つはどのように判定するのがよいでしょうか? また、あるコードが、普通の node で動いているのか、Google Apps Script で動いているのか、を判定するにはどうしたらよいでしょうか? また、さらには、Google Apps Script でも、Google SpreadSheet からの呼び出しか、そうではないのか、という判定方法も知りたいです。 いくつかの質問になってしまっていますが、つまりは、実行環境を判定する方法はGASの場合どうするのでしょうか?ということになります。 ブラウザかNodeか、あるいは、どんなブラウザなのか、を判定する方法はネットでよく見かけたのですが、GASの場合はそのようなコードを見かけませんでした。 よろしくお願いします。
回答: 調べました所、公式ページからの情報でなんとかなりました。 詳細な情報は下記の2つの所に記載があります。 V8 Runtime Overview | Apps Script | Google Developers Migrating scripts to the V8 runtime | Apps Script | Google Developers たいていのコードは一方がエラーで、他方がエラーではない、というものでそちらで判定するのもよさそうなのですが、判定処理に例外を混ぜたくなかったので(おそらく低速ですから)、例外以外の差異はないかな、とみてたところ Object.prototype.toSource の有無みたいな事が書かれていました。 実際に動かしてみたところ ``` console.log(typeof Object.toSource === 'undefined') ``` これが、Rhinoの場合は、false 、V8の場合は、true になるのがわかりましたのでこれで判定しておこうと思います。 他にもあると思いますが、これがとりあえずは簡単かな、と思います。 こちらの自作のライブラリでは、deno, node.js, 各ブラウザ, GoogleAppsScript などの環境判定しています。gas かどうか自体は、グローバルの Browser オブジェクトの存在判定をしています。 ここにRhinoかV8かの判定も近々組み込む予定です。