typescriptの型情報のみを削ぎ落とす(GASでの利用想定)
https://scrapbox.io/files/6798ab0dc71e0c057927c137.png
## 動機
顧客の1社で、GASのスクリプトの維持管理や新規スクリプトの作成を依頼された。
ここで問題が2点。
1. 依頼者は情シスメンバーの方々であり、コードを書く習慣・経験がないため、初心者でも読みやすいフォーマット且つコメント等を意識して書かなければならない
2. GASをWebのUIで書くと、基本はJSなので補完機能が弱く、結構しんどい
ということで、ローカル環境ではtypescriptで書けて、尚且つJSへのトランスパイル時にminifyやauto formatがかからない仕組みを作りたい、となった(ts化したい、は私だけの勝手な思いなので、契約時間外で対応した。。。)。
tsの「トランスパイラ」というより「型情報だけを削ぎ落とす(strip downする)ツール」を探す必要がある。
## 候補
sucrase
swc
ts-blank-space
esbuild等のバンドラ
結論としてはsucraseを選んだが、いずれの選択肢も「理想通り」ではないが故に、消去法で決めた感が否めない。
### sucrase
英語だと「スクレイス」だが、カタカナでは「スクラーゼ」と読むべきか。
スクラーゼ(sucrase)とは、スクロースの1,2-グリコシド結合を加水分解する酵素である。
メリット
- 小1時間の調査の中で、要件を満たすことができたのはこれだけ
- 余計なフォーマットやminifyがかからず、元の改行やスペースなども綺麗に残してくれる
デメリット
- 執筆時点(2025年1月末)で、最後のアップデートから2年以上経過している(ただし、githubのissueには2024年8月頃だったかに作者の投稿があるので、アップデートが公開されていないだけで開発は進めている、という可能性もゼロではない)
- たまたま要件は達成できたが、細かな設定のオプション等は充実していない(それ故にドキュメントも充実してない)
### swc
denoのtype strippingに使われている模様。Rust製なので速いっぽい(ただ他も「速い推し」なので実際どうなのかは不明)
メリット
- 活発に開発が進んでいるので、安全安心
デメリット
- 今回の要件を満たすような設定方法が見つからなかった
- conifgの項目が多いが故にどこで何ができるのか不明
- さらにconfig自体がまだ完全な状態ではなく、vscodeの補完で"currently noop"と表示される項目が多数+どの項目で何ができるかまでの表示はしてくれない
### ts-blank-space
金融系メディアのbloombergが開発したtype stripper。
その名の通り、型情報の部分をスペースに置き換えるツール(この時点で要件から外れているが、オプションでなんとかならないかと期待して一応調べた)
メリット
- シンプル
- 開発自体は継続中
デメリット
- 今回の要件満たすような設定方法が見つからなかった
- 実験的なプロジェクト、という立ち位置っぽい
### esbuild等のバンドラ
とりあえずesbuildしか調べていない。
メリット
- 言わずもがな、安全安心
デメリット
- 今回の要件満たすような設定方法が見つからなかった
- その名の通り「バンドル」することが目的なので、「型情報を落とすだけ」というのは機能実装の優先順位的には低いのかな、という印象(プラグインとかで誰かが何か作っている可能性はある)