Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

GoogleAppsScript 勉強中

More than 1 year has passed since last update.

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"
]

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away