# Vue.js Core (vuejs/core)

## 概要

Vue.js は、モダンな Web UI を構築するための段階的（Progressive）JavaScript フレームワークです。本リポジトリは Vue.js v3.5 系のコアソースコードであり、リアクティブシステム、テンプレートコンパイラ、ランタイムエンジン、サーバーサイドレンダリングなど、フレームワークの中核を構成する 12 の公開パッケージをモノレポ構成で管理しています。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| Reactivity システム | Proxy ベースのリアクティブデータバインディング（ref, reactive, computed, watch 等） |
| テンプレートコンパイラ | Vue テンプレート構文を JavaScript レンダリング関数へコンパイル（Static hoisting 最適化付き） |
| コンポーネントシステム | Options API / Composition API 両対応のコンポーネントモデル |
| ビルトインコンポーネント | Transition, TransitionGroup, Teleport, Suspense, KeepAlive |
| ビルトインディレクティブ | v-model, v-show, v-if, v-for, v-on, v-bind, v-cloak, v-text |
| SFC コンパイラ | Single File Component (.vue) の解析・コンパイル |
| サーバーサイドレンダリング | renderToString / renderToNodeStream による SSR、Hydration 対応 |
| Vue 2 互換モード | @vue/compat パッケージによる Vue 2 → Vue 3 段階的マイグレーション支援 |
| 開発者ツール | SFC Playground、Template Explorer、DevTools 統合 |

## 技術スタック

### コア

- フレームワーク: Vue.js 3.5.27
- 言語: TypeScript 5.6.2
- パッケージマネージャー: pnpm 10.28.2
- Node.js: >= 18.12.0
- モジュール形式: ESM / CommonJS / Global (IIFE)

### 主要ライブラリ

- Rollup 4.57.0（バンドラー）
- esbuild 0.27.2（トランスパイラ）
- @swc/core 1.15.11（ミニファイ）
- Vite 7.3.1（開発サーバー）
- Vitest 3.2.4（テストフレームワーク）
- @babel/parser（テンプレート式解析）
- estree-walker（AST トラバース）
- magic-string（ソースコード変換）
- source-map-js（ソースマップ生成）
- Puppeteer 24.36.1（E2E ブラウザ自動化）

## ディレクトリ構成

```
core-main/
├── packages/                   # 公開パッケージ（12個）
│   ├── vue/                    # フルビルド（コンパイラ + ランタイム）
│   ├── runtime-core/           # コア実行時エンジン
│   ├── runtime-dom/            # DOM 実行時
│   ├── runtime-test/           # テスト用実行時
│   ├── reactivity/             # リアクティブシステム
│   ├── compiler-core/          # テンプレートコンパイラコア
│   ├── compiler-dom/           # DOM コンパイラ
│   ├── compiler-sfc/           # SFC コンパイラ
│   ├── compiler-ssr/           # SSR コンパイラ
│   ├── server-renderer/        # サーバーサイドレンダリング
│   ├── shared/                 # 共有ユーティリティ
│   └── vue-compat/             # Vue 2 互換モード
├── packages-private/           # プライベートパッケージ
│   ├── sfc-playground/         # SFC オンラインプレイグラウンド
│   ├── template-explorer/      # テンプレート解析ビジュアライザー
│   ├── vite-debug/             # Vite デバッグツール
│   └── dts-test/               # 型定義テスト
├── scripts/                    # ビルド・リリース・開発スクリプト
├── changelogs/                 # バージョン別 CHANGELOG
├── .github/workflows/          # CI/CD ワークフロー
├── rollup.config.js            # Rollup ビルド設定
├── rollup.dts.config.js        # 型定義ビルド設定
├── vitest.config.ts            # テスト設定
├── eslint.config.js            # ESLint 設定
├── tsconfig.json               # TypeScript 設定
└── pnpm-workspace.yaml         # ワークスペース定義
```

## セットアップ

### 必要条件

- Node.js >= 18.12.0
- pnpm 10.28.2

### インストール手順

```bash
# リポジトリのクローン
git clone https://github.com/vuejs/core.git
cd core

# 依存関係のインストール
pnpm install

# 全パッケージのビルド
pnpm build
```

## 開発

### 開発モード

```bash
# Watch モードで開発（デフォルトは vue パッケージ）
pnpm dev

# 特定パッケージを指定して開発
pnpm dev -- --target reactivity
```

### テスト

```bash
# 全テスト実行
pnpm test

# ユニットテストのみ
pnpm test-unit

# E2E テスト
pnpm test-e2e

# 型定義テスト
pnpm test-dts

# カバレッジ測定
pnpm test-coverage
```

### コード品質

```bash
# ESLint 実行
pnpm lint

# コード整形（Prettier）
pnpm format

# TypeScript 型チェック
pnpm check

# バンドルサイズ確認
pnpm size
```

### コーディング規約

- **Prettier**: セミコロンなし、シングルクォート、アロー関数の単一引数は括弧省略
- **ESLint**: const enum 禁止、async/await 禁止（ES2016 ターゲット）、DOM グローバル直接参照禁止
- **Git Hooks**: pre-commit で lint-staged（ESLint + Prettier）と型チェックを自動実行
