要約
本稿では以下のことについて説明する。
- GAS(Google Apps Script)のTypeScriptはファイルを1つにしないといけないので、長くなって困っていた
- 以下のように書けば、org-modeで拡縮できて便利
/*
* 箇条書き見出し */
- これだけで分かった人は読む必要ナシ。
前提
GAS(Google Apps Script)をclasp+Emacs+TypeScriptで開発するシリーズ。
GASはデフォルトではWeb上で開発するが、Google謹製のツールclaspを使うと、ローカルのテキストエディターで開発できる。
VSCodeが人気だと思うけど、ぼくはEmacsの奴隷だからEmacsでやっている。
GASはデフォルトではJavaScriptだが、claspを使うとTypeScript(以下TS)でも開発できる。
Emacsでtide.elというのを使うと、文法エラーが発生した時点でオンザフライでエラー(赤い波線アンダーライン)や警告(緑の波線アンダーライン)が表示されて便利だ。
また、companyというのを使うと、TypeScriptの予約語やGASのクラス/メソッド等はもちろん、自分で作ったクラスやタイプも途中まで書いてTABで補完してくれる。
タイプが楽なだけでなく、タイプミスも起きないので、手放せない。
GASのTSには弱点があって、ソースを分割できない。
分割してもいいのだが、別のファイルのクラスや変数や関数を参照すると「そんな名前ありません」とtide.elに怒られる。
TSの機能でimportというのを使えばいいのだが、現状GAS/clasp/TSでは対応していないので、数百行以上にも渡る長大なソースファイルを編集することになる。
困る。
outlineはいまいち
ワークアラウンドとして、outlineモードを使って折りたたんでいた。
outlineモードは好きな記号を箇条書き記号に登録できるので、TS的にコメントになる//@、//@@、//@@@を使っていた。
ある程度使えるのだが、微妙にバグっているみたいで、うまくいかないことがある。
(でもこの考え方は逆にclass、type、functionなどを箇条書き記号に指定して拡縮することが出来る)
org-modeを使いたい
Emacsでアウトライナーと言えばorg-modeであって、これがEmacsが手放せない理由である。
ぼくは.emacs.d/init.elもorg-modeで管理している。
有名な方法だが、要するにmy-init.orgというファイルの中でelispのコードを
#+BEGIN_SRC emacs-lisp :exports both
(elispのコード)
#+END_SRC
というブロックに書いて、編集が済んだらelisp以外を全部削除してinit.elを置き換えるみたいな感じ。
だが、この #+BEGIN_SRC〜#+END_SRC
というブロックを使ってコードを書くやりかたは、GASのTSでは使えなかった。
ブロックごとに違うソースファイルとして認識されるので、あるブロックで定義した名前を別のブロックで参照すると怒られるのである。
そこで。。
ここで、本稿の要旨であるバッドハックを紹介する。要するに、
/*
** 箇条書きの見出し */
という形式で、アスタリスクで始まるorg-modeの見出しを /*〜*/
形式のコメントにしてしまえばいいのである。
これで、慣れ親しんだorg-modeのキーバインドで拡縮、編集できる。
使いやすさも、安定度も、ourlineモードより数段上である。
現状の問題
は、Emacsの機能でインデントすると、見出しもインデントの対象になって先頭に空白が入ってしまうのである。
カッコイイ直し方があると思うけど、現状は indent-region
したら M-x replace-regexp
で " +*"を "*" に置換している。
恥ずかしいバッドハックだが、便利に使っているので紹介した。
他にも、過去記事でGAS+clasp+TypeScript+Emacsの悪戦苦闘の歴史を書いているので参考にしてください。
(この項終わり)