UNPKG

vue-sfc-inspector

Version:
283 lines (208 loc) 7.82 kB
# Vue SFC Inspector <div align="center"> 日本語 | [English](./README.md) </div> Vue Single File Component (SFC) の `<script setup>` 採用状況を解析するCLIツール ## 概要 Vue SFC Inspector は、プロジェクト内の Vue SFC ファイルを走査し、以下の分類で統計を表示します: - **`<script setup>`**: Vue 3.2+ の Composition API シンタックスシュガー - **Composition API (setup() in `<script>`)**: 従来の `setup()` 関数を使用 - **Options API**: Vue 2 スタイルの Options API ## クイックスタート ```bash npx vue-sfc-inspector ``` ## インストール ### グローバルインストール(オプション) ```bash # npm npm install -g vue-sfc-inspector # yarn yarn global add vue-sfc-inspector # pnpm pnpm add -g vue-sfc-inspector ``` ### ローカルインストール ```bash # npm npm install --save-dev vue-sfc-inspector # yarn yarn add -D vue-sfc-inspector # pnpm pnpm add -D vue-sfc-inspector ``` ## 使用方法 ### CLI コマンド ```bash # カレントディレクトリを解析 npx vue-sfc-inspector # 特定のディレクトリを解析 npx vue-sfc-inspector ./src # プロジェクトルートを解析 npx vue-sfc-inspector . # 詳細表示(ファイル一覧付き) npx vue-sfc-inspector ./src --details ``` ### 出力例 ``` ◐ Analyzing Vue SFC files... ✔ Analysis completed! ╭───────────────────────────────╮ │ │ │ 📊 Vue SFC Analysis Results │ │ │ ╰───────────────────────────────╯ ℹ 📝 <script setup>: 2 ℹ 🔧 Composition API (setup() in <script>): 4 ℹ ⚙️ Options API: 1 ℹ 📁 Total Files: 7 ╭──────────────────────────╮ │ │ │ 📊 Vue SFC Composition │ │ │ ╰──────────────────────────╯ ████████████████████████████████████████████████████████████████████████████████ 📝 <script setup> (2) 28.6% 🔧 Composition API (4) 57.1% ⚙️ Options API (1) 14.3% ``` ### 詳細表示オプション `--details` または `-d` フラグを使用すると、各カテゴリのファイル一覧も表示されます: ```bash npx vue-sfc-inspector ./src --details ``` ``` ╭───────────────────╮ │ │ │ 📋 File Details │ │ │ ╰───────────────────╯ ℹ 📝 <script setup> (2 files): ℹ • ./src/components/Header.vue ℹ • ./src/components/Footer.vue ℹ 🔧 Composition API (4 files): ℹ • ./src/components/UserProfile.vue ℹ • ./src/components/ProductList.vue ℹ • ./src/components/SearchForm.vue ℹ • ./src/components/Modal.vue ℹ ⚙️ Options API (1 files): ℹ • ./src/components/LegacyComponent.vue ``` ## プログラマティック API ```typescript import { classifyVueFiles } from 'vue-sfc-inspector' const result = await classifyVueFiles('./src') console.log(result) // { // scriptSetup: 2, // compositionAPI: 4, // optionsAPI: 1, // total: 7, // withSetup: 2, // 後方互換性 // withoutSetup: 5 // 後方互換性 // } // 詳細情報付きで取得 const detailedResult = await classifyVueFiles('./src', { includeDetails: true }) console.log(detailedResult.files) // [ // { path: './src/Header.vue', type: 'scriptSetup' }, // { path: './src/UserProfile.vue', type: 'compositionAPI' }, // ... // ] ``` ### 型定義 ```typescript interface ScanResult { // 詳細分類 scriptSetup: number // <script setup> の件数 compositionAPI: number // setup() 関数使用の件数 optionsAPI: number // Options API の件数 total: number // 総ファイル数 // 後方互換性 withSetup: number // scriptSetup と同じ withoutSetup: number // compositionAPI + optionsAPI } interface DetailedScanResult extends ScanResult { files?: FileClassification[] } interface FileClassification { path: string type: 'scriptSetup' | 'compositionAPI' | 'optionsAPI' } ``` ## 判定ロジック ### `<script setup>` の判定 - `@vue/compiler-sfc``descriptor.scriptSetup` プロパティの存在 ### Composition API の判定 - `setup()` 関数の存在 - `defineComponent()` の使用(TypeScript での型サポート目的も含む) - Composition API 関数のインポート (`ref`, `reactive`, `computed`, `watch`, `onMounted` など) ### Options API の判定 - 上記に該当しない `<script>` ブロック ## 特徴 ### 🎨 美しい視覚的出力 - GitHubスタイルのセグメント化されたプログレスバー - 色分けされた統計表示 - エモジとアイコンによる直感的な表示 ### 📊 詳細な分析 - 3つのカテゴリでの正確な分類 - ファイル単位での詳細情報 - TypeScript プロジェクトにも対応 ### ⚡ 高速処理 - `fast-glob` による高速ファイル検索 - 大規模プロジェクトでも効率的な処理 ### 🔧 開発者フレンドリー - 直感的なCLIインターフェース - プログラマティックAPI - TypeScript 型定義完備 ## 技術スタック - **[@vue/compiler-sfc](https://github.com/vuejs/core/tree/main/packages/compiler-sfc)** - Vue SFC パーサー - **[fast-glob](https://github.com/mrmlnc/fast-glob)** - 高速ファイル検索 - **[consola](https://github.com/unjs/consola)** - エレガントなコンソール出力 - **[citty](https://github.com/unjs/citty)** - CLI フレームワーク - **[unbuild](https://github.com/unjs/unbuild)** - ユニバーサルビルドツール ## 開発 ### セットアップ ```bash # 依存関係のインストール npm install # 開発モードで実行 npm run dev # ビルド npm run build # テスト実行 npm test # リンティング npm run lint ``` ### テスト ```bash # 全テスト実行 npm test # ウォッチモード npm run test:watch # カバレッジ付き npm run test:coverage ``` ### プロジェクト構造 ``` src/ ├── cli.ts # CLI エントリーポイント ├── core.ts # コア解析ロジック ├── index.ts # API エクスポート ├── cli.test.ts # CLI テスト ├── core.test.ts # コア機能テスト └── utils/ ├── segmented-progress-bar.ts # プログレスバーユーティリティ └── segmented-progress-bar.test.ts # プログレスバーテスト fixtures/ # テスト用フィクスチャ ├── setup.vue # <script setup> サンプル ├── composition.vue # Composition API サンプル ├── options.vue # Options API サンプル ├── empty-define-component.vue # defineComponent({}) サンプル └── ... ``` ## 関連リンク - [Vue.js 公式ドキュメント - `<script setup>`](https://vuejs.org/api/sfc-script-setup.html) - [Vue.js 公式ドキュメント - Composition API](https://vuejs.org/guide/extras/composition-api-faq.html) - [Vue.js 公式ドキュメント - Single File Components](https://vuejs.org/guide/scaling-up/sfc.html) ## ライセンス MIT License © 2025 2nofa11