テーマなしひとりアドベントカレンダーあと少し。

Vanilla JSっていう言い方がある。初めてみたのは、「jQueryを使わない」という文脈だったと思う。特に何のフレームワークもなしでそのままブラウザで動作する「素のJavaScript」みたいな意味だと言って良いだろうか。

私は「できればVanillaで」みたいな感覚をぼんやり持っている。標準で十分なのであれば標準を使いたい、という感覚だ。こう書いてみると当たり前かもしれない。

例えばRubyだったら、標準ライブラリの範囲でできることはやりたい。rspecよりminitestを使い、NokogiriよりREXMLを選ぶ、という感覚だ。以前はそう思っていなかったようで、10年くらい前に実装を始めたgepubではrspecとNokogiriを使っている。REXMLでも動くようにしたいと思っているが、かなり大きなコード変更になりそうで躊躇している。

JavaScriptではここ数年はjQueryを避けるている。これは、ブラウザの標準JavaScriptでできることがかなり多くなってきて、jQueryなしでも大変ということはなくなったからという理由の方が大きいかもしれない。

しかしモダンなJavaScript開発だと、「標準を選ぼう」と呑気に言っていられれない。そもそも基本的な開発環境のデファクトスタンダードが定まっていない。

ある程度の規模のものであれば、ブラウザ向けであってもpackage.jsonは書くだろう。だからnpmはデファクトスタンダード。と言いたいところだけれども、手元で使うツールとしては今はyarnもポピュラーだ。さらに、はなんらかのバンドラを使うことになる。今はWebpackが多そうだけれども、RollupやPercelも見かける。さらにgulpやgruntみたいなタスクランナーが使われることも多い。テストのツールもかなり多い。今だとjestがポピュラーなのだろうか。そして、JavaScriptというプログラミング言語界隈なのに、言語処理系どころかプログラミング言語自体にも色々ある。CoffeeScript・Dart・TypeScript。DeNAのJSXというのもあったけれど、もうアップデートされていないようだ。

最近、仕事で新規にJavaScriptのコードを書き始めるにあたって、いろいろ調べたり悩んだりした。「まずは標準的な方法でやろう」が通じないとここで時間を食ってしまう。

いろいろ悩んだり調べた結果、まずはTypeScript・npm・rollupで小さくはじめている。テスティングフレームワークはまだ選べていない。少し前の私だったらTypeScriptを選ぶことはまずなかったと思う。積極的に選びにいったのはなんでだろうと考えている。ここ2年ほどRustをちょこちょこいじっていて、言語処理系がチェックしてくれることの安心感を改めて思い知ったのも大きいけれども、Vanillaでないことの不安感を今のところあまり感じないのだった。

開発環境を含めた標準は、最近出てきたプログラミング言語だと最初から整えていることが多い。GoやRustはコードフォーマッタから標準で用意している。作るものの性能や機能に直結するライブラリはともかく、開発環境の道具選択に悩まず済むのはありがたいし、標準のコードフォーマッタがあると不毛な争いが起きづらくなって良い。しかしJavaScript界隈が今からそうなるのは難しいだろうし、ブラウザで動作する言語が他のものにガラッと変わる可能性も当分はないだろう。Web向けの開発では、こういう状況がしばらくは続くのだろうな。