#V8対応なのでクラス書いてみてハマった点
しばらくやらないとまた忘れそうなのでメモ的に書いてみる
1.ES6対応
そもそもGASでいっぱいやろうとしたらファイルが膨大になっちゃったので、クラス化したいな〜。と思ってたら、V8エンジンになってES6対応したそうな。詳しい記事はGAS V8でググると出てくる
2.ファイルを分割
GASのエディターでFile→New→スクリプト、で用途別にファイルを分割してた
3.クラスを分けて継承してみたらエラー
ベースのクラスをTXXというファイルに、派生クラスをCXXXファイルに書いたところリファレンスエラーが発生。
class BaseClass {
constructor(){
}
}
class ExtendedClass extend BaseClass {
constructor(){
}
}
ReferenceError: BaseClass is not defined
ベースクラスを参照できてない模様。いろいろググると、
関数はファイルの順番に参照される
らしい。
この場合、ファイルの順番とは、「GASエディターの左にあるファイルのリスト」とあった。
しかし、ベースクラスのあるファイルTXXXは、エディターでは一番上。ハテ?
4.Claspを使っていた
参照した記事が間違いなのか、それ以外の要素があるのか。
・ベースクラスをいろんなファイルに移動した
・ファイル名をいろいろ変えてみた
が、原因もわからず途方にくれてた。
ふと、VSCodeのpushスクリプトの実行結果を見ると、なんか
アルファベット順
に並んでる。
上にもあるようにTXXXファイルだから順番はCXXXファイルの後ろになる。
とりあえず、AAXXXXファイルをつくってそこにベースのクラスを移すと、
リファレンスエラーおこらず
Claspでpushする順番がエディターのリストより優先されている仕様っぽい。
(あくまで現段階なので来週にかわってても驚かない)
5..clasp.jsonというファイル
普段はクラスIDが入ってるだけのファイルと思ってたら、
"filePushOrder": [ ]
という設定項目があった。
こちらに順番を書いてみたらどうだろう、と
"filePushOrder": [
"TXX.js",
"CXX.js"
]
としたら、リファレンスエラーは出なくなった。
マークダウンはしばらく書かないとさっぱり忘れるな〜