AST
ソースコードの構文構造をツリー形式で表現したデータ構造
AST とは
AST (Abstract Syntax Tree、抽象構文木) は、ソースコードの構文構造をツリー形式で表現したデータ構造である。コンパイラ、トランスパイラ、リンター、フォーマッターなど、コードを解析・変換するツールの基盤技術だ。
ソースコードから AST へ
ソースコードから AST へのコード例を示す。
// ソースコード
const x = 1 + 2;
// AST (簡略化)
// VariableDeclaration (const)
// └── VariableDeclarator
// ├── Identifier: "x"
// └── BinaryExpression (+)
// ├── NumericLiteral: 1
// └── NumericLiteral: 2
AST を使うツール
AST を使うツールを以下に示す。
| ツール | AST の用途 |
|---|---|
| TypeScript | 型チェック、JS への変換 |
| ESLint | コードの静的解析、ルール違反の検出 |
| Prettier | コードのフォーマット |
| Babel | ES6+ → ES5 のトランスパイル |
| SWC | 高速トランスパイル (Rust 製) |
| webpack / Vite | import の依存関係解析 |
| jscodeshift | 大規模なコード変換 (codemod) |
ESLint カスタムルール
ESLint カスタムルールのコード例を示す。
// no-console ルールの簡略版
module.exports = {
create(context) {
return {
// AST ノードの種類で訪問するノードを指定
CallExpression(node) {
if (node.callee.object?.name === 'console') {
context.report({ node, message: 'console の使用は禁止です' });
}
},
};
},
};
ESLint はソースコードを AST に変換し、各ノードをルールに渡す。ルールはノードの種類と内容を検査し、違反を報告する。
AST Explorer
AST Explorer で、ソースコードがどのような AST に変換されるかをブラウザ上で確認できる。ESLint ルールや Babel プラグインの開発に必須のツールだ。
コンパイルのパイプライン
コンパイルのパイプラインを図で示す。
ソースコード → 字句解析 (トークン列) → 構文解析 (AST) → 変換 → コード生成
- 字句解析 (Lexer): ソースコードをトークン列に分割
- 構文解析 (Parser): トークン列を AST に変換
- 変換 (Transform): AST を操作 (最適化、型チェック)
- コード生成 (Codegen): AST からコードを出力
AST の関連書籍も参考になる。
この記事は役に立ちましたか?
関連用語
トランスパイラ
ある言語のソースコードを別の言語や同じ言語の異なるバージョンに変換するツール
ESLint
JavaScript/TypeScript のコード品質と一貫性を自動検証する静的解析ツール
TypeScript
JavaScript に静的型付けを追加した言語で、大規模開発の安全性と生産性を向上させる
コンパイラ
人間が書いたソースコードを機械が実行できる形式に一括変換するプログラム
ETL
データを抽出 (Extract)、変換 (Transform)、ロード (Load) するデータパイプライン
JIT コンパイル
プログラムの実行時にコードをネイティブコードにコンパイルし、パフォーマンスを向上させる技術
関連する記事
DevOps 本ガイド - CI/CD とインフラ自動化を学ぶ技術書の選び方
DevOps の文化・原則から CI/CD、IaC、オブザーバビリティまで学べる技術書の選び方と学習順序を紹介します。
あの有名 OSS のコードは、この本の影響を受けている
広く使われているオープンソースソフトウェアの設計には、特定の技術書の影響が色濃く反映されています。OSS のコードと技術書の関係を知ると、両方の理解が深まります。
月曜朝イチのコードが金曜夕方より美しい理由
週の始まりに書くコードと終わりに書くコードでは、品質に明確な差があります。この現象の原因と、コード品質を週を通じて維持するための読書習慣を考えます。