BabelのcompactはGoogle Apps Scriptと相性がよくない、そしてGASプロジェクトは壊れたら直らない
結論
..babelrc に以下のように書け
{
"preset": ["es2015", "gas"],
"compact": false
}
何が起きていたか
Babel の compact は 6.24.1 時点では 500KB 以上で適用されることとなっているが、これが適用されると eslint 的には OK だが Google Apps Script 的には NG なコードができあがる。ことがある。
Babel の compact は UglifyJS のようにアグレッシブなものではなく、本当に単純に white space を取り除いただけっぽく見える。読もうと思えば人間でも普通に読める。
ところがこれが適用されたコードで
(class)@294c297 is not function ...
みたいな謎のエラーが出るようになってしまった。該当箇所は Babel が compact したところのようだが、何が悪いのかは Script Editor は教えてくれない、何が function じゃないかも分からない。しかもどのようにコードをいじってもまったく同じエラーが出続ける。
そう、GAS プロジェクトそのものが壊れてしまったのだ。1
おいおい。
待て待て。おれは賢いツールを組み合わせて賢くコードを作ってるじゃないか。これ以上何を望むんだい、と思ったが後の祭り。GAS プロジェクトが壊れたら新規に作り直してコードをコピーし直すしかない。
ふーっ。オーケー、分かったよ。降参だ。作り直そう。幸い deploy は自動化されているんだ、新しいプロジェクトを作るから deploy 先の ID は変わっちまうが、先日作った仕組みの中の JSON の ID をちょっと書き換えるだけさ。たいした影響はない。プロパティの設定も飛んだし、依存ライブラリ(Node.jsじゃなくてGASのライブラリ)も飛んだし、実行時の権限確認もまっさらさ。たいした問題じゃない。ちょっと関係者にメールすればいいだけ。幸い、GAS なんだから、共有してる人は対象の Drive 上のオブジェクトが共有されている人たちだ。そうそう、 [ File ] → [ Email collaborators ] っと…
めんどうくさいわ!
勝手に壊れんなや!
実際には GAS プロジェクトが壊れたと気づくまでだいぶ試行錯誤を要したのは言うまでもない! ↩