# ER図

## 概要

本ドキュメントは、Babelプロジェクトのエンティティ関連図（ER図）を記載するものです。

**注意**: Babelはデータベースを使用しないプロジェクトのため、従来のER図は該当しません。

代わりに、Babelの内部データ構造（AST: 抽象構文木）の概念的な関係を示します。

## Babel AST ノード構造（概念図）

以下は、Babelが処理するAST（抽象構文木）の主要ノード間の関係を示す概念図です。これはデータベーステーブルではなく、インメモリで処理されるデータ構造です。

```mermaid
erDiagram
    File ||--|| Program : contains
    Program ||--o{ Statement : body
    Program {
        string sourceType
        array body
        array directives
    }

    Statement ||--o| Declaration : "is-a"
    Statement ||--o| Expression : "is-a"

    Declaration ||--o| VariableDeclaration : "is-a"
    Declaration ||--o| FunctionDeclaration : "is-a"
    Declaration ||--o| ClassDeclaration : "is-a"

    VariableDeclaration ||--|{ VariableDeclarator : declarations
    VariableDeclaration {
        string kind
        array declarations
    }

    VariableDeclarator {
        Identifier id
        Expression init
    }

    FunctionDeclaration ||--o| BlockStatement : body
    FunctionDeclaration ||--o{ Identifier : params
    FunctionDeclaration {
        Identifier id
        array params
        BlockStatement body
        boolean async
        boolean generator
    }

    ClassDeclaration ||--o| ClassBody : body
    ClassDeclaration {
        Identifier id
        Expression superClass
        ClassBody body
    }

    ClassBody ||--o{ ClassMethod : body
    ClassBody ||--o{ ClassProperty : body

    Expression ||--o| CallExpression : "is-a"
    Expression ||--o| MemberExpression : "is-a"
    Expression ||--o| BinaryExpression : "is-a"
    Expression ||--o| Identifier : "is-a"
    Expression ||--o| Literal : "is-a"

    CallExpression {
        Expression callee
        array arguments
    }

    MemberExpression {
        Expression object
        Expression property
        boolean computed
    }

    BinaryExpression {
        Expression left
        Expression right
        string operator
    }

    Identifier {
        string name
    }

    Literal ||--o| StringLiteral : "is-a"
    Literal ||--o| NumericLiteral : "is-a"
    Literal ||--o| BooleanLiteral : "is-a"
    Literal ||--o| NullLiteral : "is-a"

    BlockStatement ||--o{ Statement : body
    BlockStatement {
        array body
        array directives
    }
```

## ノード説明

| ノード名 | 説明 |
| --- | --- |
| File | ソースファイル全体を表すルートノード |
| Program | プログラム本体、ステートメントの配列を保持 |
| Statement | 文（宣言、式文、制御構造など）の基底型 |
| Declaration | 宣言文（変数、関数、クラスなど） |
| Expression | 式（値を返す構造） |
| VariableDeclaration | 変数宣言（const, let, var） |
| FunctionDeclaration | 関数宣言 |
| ClassDeclaration | クラス宣言 |
| Identifier | 識別子（変数名、関数名など） |
| Literal | リテラル値（文字列、数値、真偽値など） |

## 備考

- この図はBabelのASTノード構造の一部を示しており、完全なノード型は@babel/typesパッケージで定義されています
- ASTはパース時にメモリ上に構築され、変換後は破棄されるため、永続的なストレージには保存されません
- 各ノードは`type`プロパティを持ち、ノードの種類を識別します
- ノード間の関係は親子関係（contains, body等）で表現されます
