目次

はじめに

対象読者
本書のサポート
ソースコードの扱い
表記関係について
免責事項
底本について

第1章 JavaScript ASTがなぜ簡単なのか?

1.1 ASTでできること
1.2 導入する
1.3 ASTを実際にさわってみる

第2章 AST解説

2.1 ASTを実際に眺めてみよう
2.2 Babylon
2.3 実際にASTを使ってみよう

第3章 Babel系エコシステム弾丸ツアー

3.1 babel-core
3.2 babel-generator
3.3 prettier
3.4 babel-traverse
3.5 babel-types
3.6 参照リンク

第4章 Babelプラグイン

4.1 作り方
4.2 traverseを叩いたときのstateとの違い
4.3 プラグインオプションの取得方法
4.4 BabelプラグインとしてInjectorプラグインを作ってみる
4.5 Babelプラグインをパッケージ化する
4.6 npm publish
4.7 Babelプラグインの自動テスト
4.8 require hack

第5章 最適化プラグインを簡単に作ってみよう

5.1 超お手軽実装編
5.2 変数の静的解析情報を使って、もう少しがんばってみる

著者紹介

はじめに

 この本は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」で頒布されたものを底本としています。


試し読みはここまでです。
この続きは、製品版でお楽しみください。