1
2

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 3 years have passed since last update.

GoogleAppsScript 勉強中

Last updated at Posted at 2020-02-25

#V8対応なのでクラス書いてみてハマった点

しばらくやらないとまた忘れそうなのでメモ的に書いてみる

1.ES6対応
そもそもGASでいっぱいやろうとしたらファイルが膨大になっちゃったので、クラス化したいな〜。と思ってたら、V8エンジンになってES6対応したそうな。詳しい記事はGAS V8でググると出てくる

2.ファイルを分割
GASのエディターでFile→New→スクリプト、で用途別にファイルを分割してた

3.クラスを分けて継承してみたらエラー
ベースのクラスをTXXというファイルに、派生クラスをCXXXファイルに書いたところリファレンスエラーが発生。

TXX.js
class BaseClass {
  constructor(){
  }
}
 CXX.js
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": [ ]

という設定項目があった。
こちらに順番を書いてみたらどうだろう、と

.clasp.json
"filePushOrder": [
"TXX.js",
"CXX.js"
]

としたら、リファレンスエラーは出なくなった。

マークダウンはしばらく書かないとさっぱり忘れるな〜

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?