ものぐささんのためのTypeScriptを使いつつGASでも使えるライブラリ開発環境

面倒くさがり屋のためのTypeScript環境 (2024-11-30) | あーありがち

の続編。

ツールリスト

こんなんでイケると思う。

個人的に JavaScript の coding style は Standard に寄せているので

も入れてみているけど、もう止まってそうなので、そのうち考え直さないといけないかもしれない。あとお好みで

  • power-assert

など。自分は Vitest から動かしてるので Node.js 向けのパッケージを使ったけど、Deno に直接対応しているものもあるらしい。

ポイント

  • 設定が少なく速いこと
    • Deno, Vitest
      • テスティングフレームワークに Deno 標準のものを使わないのは他の開発と合わせるためなので、普段他のフレームワーク使ってないなら標準のものに寄せてもよい
  • 結局 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)))))

を設定して解決。

More