ものぐささんのためのTypeScriptを使いつつGASでも使えるライブラリ開発環境
面倒くさがり屋のためのTypeScript環境 (2024-11-30) | あーありがち
の続編。
ツールリスト
こんなんでイケると思う。
- Deno
- Vitest
- TypeScript
.d.ts が tsc じゃないと作れないので - Rollup
- rollup-plugin-google-apps-script
- import / export を消せる
個人的に JavaScript の coding style は Standard に寄せているので
も入れてみているけど、もう止まってそうなので、そのうち考え直さないといけないかもしれない。あとお好みで
- power-assert
など。自分は Vitest から動かしてるので Node.js 向けのパッケージを使ったけど、Deno に直接対応しているものもあるらしい。
ポイント
- 設定が少なく速いこと
- Deno, Vitest
- テスティングフレームワークに Deno 標準のものを使わないのは他の開発と合わせるためなので、普段他のフレームワーク使ってないなら標準のものに寄せてもよい
- Deno, Vitest
- 結局 tsc が必要
- type を strip できる処理系はいくつかあるけど、d.ts を出力できるのは tsc だけ
- JavaScript 環境向けに JavaScript に変換しつつ .d.ts を求めるならこれしかない
- CommonJS は無視した
- CommonJS 形式でないと動作させられない環境もあるにはあるけど、それこそ rollup とか使って変換して使ってくれ、ということにした。もういいんじゃないすかね。ダメですか。
Google Apps Script対応をにらむ
Google Apps Script は JavaScript のみ対応で、Script Editor は JSDoc annotation を解釈できるので、
- TypeScript のコンパイラと language server のために type annotation を書く
- Google Apps Script のために JSDoc annotation も書く
ここは頑張る。で、
- tsc での出力の際に
"declaration": true
しておく
加えて、class を作っていた場合はインスタンスを作る create function も用意しておく。
export class Xxx {
}
import { Xxx } from 'xxx'
export function createXxx () {
return new Xxx()
}
みたいな感じ。これを rollup-plugin-google-apps-script で createXxx() 側のコードを entrypoint にして変換する。
するとできあがりのコードは UMD 寄せになるけど、UMD 対応周りのコードは不要なので、ガッと awk でカットすることにした。詳しくはこの辺を見てもらうといいと思う。
kintone-tabulax/bin/prepare-gas at main · wtnabe/kintone-tabulax
自分の書いているコードに適当にマーカーをセットして、そのマーカーを頼りに前後の不要なコードをカットしている。これで Google Apps Script では対応していない import / export のないコードができあがる。
ついでにEmacsでDenoをlanguage serverに
TypeScript に対しては lsp-mode は基本的に typescript-language-server を要求してくるんだけど、Node.js はバージョンアップが早くてそのたびにいちいちインストールするのが面倒くさいなと思っていた。deno lsp
がその代わりになるのは知ってたんだけど、Emacsでの設定が面倒くさくて放置していた。(面倒くさがりすぎ)
今回設定を見つけたので、
how to use emacs-lsp’s deno lsp server instead of ts-ls
.dir-locals.el
((typescript-mode . ((lsp-enabled-clients . (deno-ls)))))
を設定して解決。