AST本の感想、そしてASTについて

先日の技術書典3で@erukitiさんが頒布した「簡単JavaScript AST入門」(AST本)について書きます。自分は、レビューという形で関わらせて頂きました。こういった経験ははじめてで、面白かったです。なにより、ものすごいペースで加筆されていってすごいなという感じでした。
最終的によい本が出来上がりよかったです。


内容と感想

さて内容ですが、一言で言うと、Babel Pluginのための本です。
よく使われるツールの紹介から、実際にBabel Pluginを作成してみるといった実践的なことまで書かれてています。
個人的に嬉しいのは、入門者向けと謳いつつも、リファレンス本として機能する点です。Babel Pluginを実際に自分で書くときに重宝するでしょう。
自分もAST本からの知見を公開してるプラグインに反映しました。

個人的に特によかったなと思うのが、5章や6章です。
これらは、えるきちさんが独自に調べた内容を文書化しています。
具体的には、NodePathのそれぞれの関数やScopeやBinding、またFlowやTSについて書かれています。

これらについて、日本語の資料は皆無であり、海外の資料でさえ稀です。そして、案外そういうところにほしい情報というのがあります。

そして、これから読む人についてアドバイスですが、必ず手を動かしながら読んだ方がよいです。https://astexplorer.net/ や babel-logで出力を確認しながら進めるのをオススメします。


AST本を読んだ人が次に何を作るべきか

個人的には、ASTまわりでほしいものは無限にあるのですが、もしかすると、AST本を読んでも、まだアイデアが出ない人もいるかも知れません。
参考までに、自分がこれまで作ったものを含め、いくつか例を紹介します。

s2s
まずは、s2sです。本でも紹介して頂きました。(レビューをしようと読み始めたら3ページ目に厨二くさい自分のツイートのキャプチャが張ってあり、なるほど、発言には注意して生きていこうと姿勢を正したのは、ここだけの秘密です)。s2sは以下のようなことを可能にします。

詳しくは、Qiitaの記事を読んで下さい。

さて、s2sのプラグインは独自のものではなく、BabelPluginのエコシステムに全乗っかりです。ほとんどプラグインはテストのカバレッジを100%にしてあるので、テストを含めて参考になれば幸いです。基本的に70行あるかないかぐらいの小さいコードです。

https://github.com/akameco/s2s-plugins/tree/master/packages

babel-macros
https://github.com/kentcdodds/babel-macros

tc39のメンバーのkentcdoddsが書いたツールです。
JSにマクロを持ち込みます。

babel-plugin-react-intl-auto
https://github.com/akameco/babel-plugin-react-intl-auto

コンパイル時にファイルベースのプレフィックスを付加することで、i18nの面倒なidの管理から開放します。

babel-react-optimize
https://github.com/thejameskyle/babel-react-optimize

コンパイル時に様々なReactの最適化を行うプラグインです。AST的には、SFCとPureなComponentに違いはなくなります。

jest-codemods
https://github.com/skovhus/jest-codemods

AVAやMochaで書かれたテストをJestのテストに変換します。codemods系は色々あるので自分で書き換える前に一度探してみるといいと思います。

babel-plugin-api-over-console
https://github.com/akameco/babel-plugin-api-over-console

おふざけライブラリですが、CLIアプリをバベルとWebアプリとなって出てきます。process.argsにも対応してます。console.logだけでAPIが出来ます。


こんな感じで、本当に無限につくるもの、出来るもの、可能になることがあります。AST本を読めば、だいたいのやりたいことは実現できるかと思います。是非、新しいツールを作ってみると楽しいと思います。

最後になりますが、えるきちさん、ステキな本をどうもありがとうございました。

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.