Vue3 ディレクトリ構造
前の章では npm を使用してプロジェクトをインストールしました(Vue-cli と Vite)。IDE(Vscode、Atom など)でそのディレクトリを開くと、構造は以下のようになります。
コマンドラインツール vue-cli(サンプル-vue3-test):

Vite(サンプル-vue3-test2)

標準的な Vue 3 プロジェクトは、通常3つの階層に分けられます:
- プロジェクトルートディレクトリ:ビルドツールとプロジェクト構成
- public ディレクトリ:ビルドに参加しない静的リソース
- src ディレクトリ:ほぼすべてのビジネスコードがここにあり、普段の開発は基本的にこのディレクトリ内で行います。
典型的な Vue プロジェクト構造:
vue-project/ ├── public/ # 静态资源,直接复制到构建输出目录 │ └── favicon.ico # 网站图标 ├── src/ │ ├── assets/ # 静态资源(如图片、字体、CSS) │ │ └── logo.png │ ├── components/ # 可复用的通用组件 │ │ └── CommonHeader.vue │ ├── composables/ # 可复用的 Composition API 逻辑(可选) │ │ └── useFetch.js │ ├── router/ # 路由配置 │ │ └── index.js │ ├── stores/ # Pinia 状态管理(或 store/ 用于 Vuex) │ │ └── index.js │ ├── utils/ # 工具函数(如请求封装、格式化) │ │ └── request.js │ ├── views/ # 页面级组件(对应路由页面) │ │ ├── HomeView.vue │ │ └── AboutView.vue │ ├── App.vue # 根组件 │ └── main.js # 入口文件(创建 Vue 应用) ├── index.html # HTML 入口模板 ├── vite.config.js # Vite 配置文件 ├── package.json # 项目依赖与脚本 ├── .gitignore # Git 忽略文件 ├── .env # 环境变量(开发) ├── .env.production # 环境变量(生产) └── README.md # 项目说明
ディレクトリ解説
| パス | 説明 |
|---|---|
| public/ | ビルドツールで処理されない静的リソースを置きます。dist ディレクトリに直接コピーされ、主に favicon、robots.txt などに使用されます。 |
| public/favicon.ico | サイトアイコン(favicon) |
| src/ | プロジェクトのソースコードのメインディレクトリで、すべての開発コードをここに置きます。 |
| src/assets/ | 画像、フォント、グローバル CSS などの静的リソースを置きます。Vite で処理されます(インポート対応)。 |
| src/components/ | 再利用可能な汎用コンポーネント(ボタン、カード、レイアウトコンポーネントなど)を置きます。 |
| src/composables/ | 再利用可能な Composition API ロジック関数を置きます(Vue 3 推奨のコード再利用方法)。 |
| src/router/ | Vue Router 設定ディレクトリ。通常 index.js にルーティングテーブルを定義します。 |
| src/stores/ | Pinia 状態管理ディレクトリ(Vue 3 公式推奨)。各 store モジュールを置きます。 |
| src/utils/ | ユーティリティ関数(axios ラッパー、日付フォーマット、定数など)を置きます。 |
| src/views/ | ページレベルのコンポーネントを置きます。通常ルートと1対1で対応します(ルートページ)。 |
| src/App.vue | Vue アプリケーションのルートコンポーネントです。以下を含みます:<router-view>などのエントリレンダリングポイント |
| src/main.js | プロジェクトのエントリファイルです。Vue アプリケーションインスタンスを作成し、プラグイン(router、pinia など)をマウントして #app にマウントします。 |
| index.html | HTML テンプレートファイルです。以下を含みます:<div></div>マウントポイント |
| vite.config.js | Vite ビルドツール設定ファイルです。プラグイン、エイリアス、プロキシなどをカスタマイズできます。 |
| package.json | プロジェクトの依存関係、スクリプトコマンド(dev、build、preview など) |
| .gitignore | Git の無視ファイルです。通常 node_modules、dist、.env などを無視します。 |
| .env / .env.production | 環境変数ファイルです。異なる環境で API アドレスなどを設定するために使用します(Vite では VITE_ で始まる変数)。 |
| README.md | プロジェクト説明ドキュメント |
プロジェクトが大きくなるにつれて、以下のフォルダを追加する必要があるかもしれません:
- src/layouts/:異なるページレイアウト(例:AdminLayout.vue、GuestLayout.vue)。
- src/plugins/:カスタム Vue プラグイン(例:グローバルコンポーネントの自動登録)。
- src/directives/:カスタムディレクティブ(例:v-loading)。
- src/types/:グローバル TypeScript 型定義。
- tests/ 或 tests/:ユニット/E2E テスト(Vitest + Vue Test Utils)。
- src/api/:API 呼び出しモジュールを分離(utils/request よりも細かい粒度)。
次に、サンプル-vue3-test2 を例として、ディレクトリ内の src/APP.vue ファイルを開きます。コードは以下のとおりです(説明はコメント内にあります):
src/APP.vue ファイルコード
<!-- 表示テンプレート -->
<template>
<img alt="Vue logo" src="./assets/logo.png" />
<HelloWorld msg="Hello Vue 3.0 + Vite" />
</template>
<!-- Vue コード -->
<script>
/* src/components/HelloWorld.vue から HelloWorld コンポーネントをインポート */
import HelloWorld from './components/HelloWorld.vue'
export default {
name: 'App',
components: {
HelloWorld
}
}
</script>
<template>
<img alt="Vue logo" src="./assets/logo.png" />
<HelloWorld msg="Hello Vue 3.0 + Vite" />
</template>
<!-- Vue コード -->
<script>
/* src/components/HelloWorld.vue から HelloWorld コンポーネントをインポート */
import HelloWorld from './components/HelloWorld.vue'
export default {
name: 'App',
components: {
HelloWorld
}
}
</script>
次に、初期化されたプロジェクトを変更してみましょう。src/APP.vue を以下のコードに変更します:
src/APP.vue ファイルコード
<template>
<img alt="Vue logo" src="./assets/logo.png" />
<HelloWorld msg="サンプルへようこそ!" />
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'
export default {
name: 'App',
components: {
HelloWorld
}
}
</script>
<img alt="Vue logo" src="./assets/logo.png" />
<HelloWorld msg="サンプルへようこそ!" />
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'
export default {
name: 'App',
components: {
HelloWorld
}
}
</script>
ページを開くhttp://localhost:3000/、通常、変更後は自動的にリフレッシュされ、表示は以下のようになります:
