Google Apps Script の V8 エンジンを動かしてみています。

疑問がわきました。  
GASのエンジンはV8か、Rhino かがあると思いますが、この２つはどのように判定するのがよいでしょうか？

また、あるコードが、普通の node で動いているのか、Google Apps Script で動いているのか、を判定するにはどうしたらよいでしょうか？

また、さらには、Google Apps Script でも、Google SpreadSheet
からの呼び出しか、そうではないのか、という判定方法も知りたいです。

いくつかの質問になってしまっていますが、つまりは、実行環境を判定する方法はGASの場合どうするのでしょうか？ということになります。

ブラウザかNodeか、あるいは、どんなブラウザなのか、を判定する方法はネットでよく見かけたのですが、GASの場合はそのようなコードを見かけませんでした。

よろしくお願いします。
CC BY-SA 4.0
2020-02-11T07:29:35.627
62952
2020-06-20T16:17:06.427
21047
question
google-apps-script
Google Apps Script での実行環境判定
調べました所、公式ページからの情報でなんとかなりました。

詳細な情報は下記の2つの所に記載があります。

V8 Runtime Overview | Apps Script | Google Developers  
<https://developers.google.com/apps-script/guides/v8-runtime>

Migrating scripts to the V8 runtime | Apps Script | Google Developers  
<https://developers.google.com/apps-script/guides/v8-runtime/migration>

たいていのコードは一方がエラーで、他方がエラーではない、というものでそちらで判定するのもよさそうなのですが、判定処理に例外を混ぜたくなかったので(おそらく低速ですから)、例外以外の差異はないかな、とみてたところ

Object.prototype.toSource の有無みたいな事が書かれていました。

実際に動かしてみたところ

```

      console.log(typeof Object.toSource === 'undefined')
    
```

これが、Rhinoの場合は、false 、V8の場合は、true になるのがわかりましたのでこれで判定しておこうと思います。

他にもあると思いますが、これがとりあえずは簡単かな、と思います。

こちらの自作のライブラリでは、deno, node.js, 各ブラウザ, GoogleAppsScript などの環境判定しています。gas
かどうか自体は、グローバルの Browser オブジェクトの存在判定をしています。

<https://github.com/standard-
software/partsjs/blob/v6.0.0/source_code/platform/platform.js>

ここにRhinoかV8かの判定も近々組み込む予定です。
CC BY-SA 4.0
2020-06-20T16:17:06.427
67842
2020-06-20T16:17:06.427
21047
62952
answer