はじめに
第1章 JavaScript ASTがなぜ簡単なのか?
第2章 AST解説
第3章 Babel系エコシステム弾丸ツアー
第4章 Babelプラグイン
第5章 最適化プラグインを簡単に作ってみよう
著者紹介
この本はJavaScript ASTを使ったメタプログラミングの入門・実践書です。ASTとはソースコードを扱いやすいように加工されたデータ構造のこと。ASTを操作するとソースコードの変更・削除・挿入や解析ができます。メタプログラミングというのはプログラムそのものに手を加えることで、つまり本書はJavaScriptのソースコード自体を加工するための本です。
JavaScriptにおいてはASTは難しいものではありません。ASTを使ってお手軽にJavaScriptをハックできるツールを作ってみましょう。
簡単!専門知識不要!
JavaScriptをハックして生産性をあげたい人、同じようなコードを毎回手で書くのに飽きた人向けの本です。
本書の中ではあまり高度なことは書かないように努めています。コンパイラ関係の本といえばかなり難解なものばかりなので、お手軽なガイドブックとして書いてみたかったのが執筆のモチベーションです。特にBabelに関して体系だった本やWeb上での資料が無いため、一冊の本としてまとめ上げたかったのです。
本書でのソースコードに関してはECMAScript2017(ECMA-262 8版)を前提に記述しています。言語仕様については本書の範疇を超えるため説明をしません。筆者による「最新JavaScript開発 ES2017対応モダンプログラミング」(インプレスR&D・技術書典シリーズ)https://nextpublishing.jp/book/8958.htmlという本ではECMAScript2017について詳しく解説しています。興味がある方はこちらも参照してください。
JavaScriptの処理系に関しては、コマンドラインで動くNode.jsを使います。Node.jsのインストールに関しても本書では特に説明はしません。バージョンは、執筆時点(2017/11/09)における最新安定版であるv8.9.0を対象としています。
「メタ」とは、高次元・超越などを意味する接頭語で、本来の枠組みから外れたより高次元なものを指します。「メタプログラミング」を直訳すれば、プログラミングを超えたプログラミング、でしょうか。プログラムでプログラムを作ったり、加工したり、解析するものです。
C言語のプリプロセッサ、C++のテンプレート、Scalaのマクロ、Lispの言語拡張的な考え方や、RubyのようなLL言語でリフレクションと呼ばれる機能を使った言語拡張などが、メタプログラミングに該当します。
メタプログラミングを活用すると、本来ならば実行時にコストが必要だったことが事前に処理できたり、愚直に書いたのでは不可能なほどの生産性の向上が得られます。
ただ実際には、メタプログラミングは混乱の元になりかねない“黒魔術”であることも多いのが実情です。Cのプロプロセッサを悪用して意味不明なくらい読みづらくなった醜いコードコンテスト1、などというものがあるくらいです。
本書では極力そういった黒魔術には触れずに、秩序立ち、それでいて生産性を向上するためのテクニックを紹介します。
https://rabbit-house.tokyo/books/javascript-astにて本書のサポートを行います。感想や間違いの指摘などございましたらerukiti@gmail.com宛までメールを送るか、https://twitter.com/erukiti宛にメンションを飛ばすなどしていただけたら幸いです。
この本に登場するソースコードはCC02とします。つまり自由にソースコードを使って構いません。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。
本書籍は、技術系同人誌即売会「技術書典3」で頒布されたものを底本としています。