Vue3 ブログプロジェクト
この章では、ゼロから Vite を使って Vue3 ブログプロジェクトを作成し、プロジェクト内の各ファイルの役割を理解します。
環境準備
始める前に、コンピューターに Node.js がインストールされていることを確認する必要があります。
Node.js は JavaScript のランタイム環境であり、ブラウザの外で JS コードを実行できるようにします。
Vue3 の開発ツールチェーン(Vite、npm)はすべて Node.js に依存しています。
Node.js がインストールされているか確認する
ターミナル(Windows は CMD または PowerShell、Mac はターミナル)を開き、次のコマンドを入力します:
$ node -v v20.10.0
バージョン番号(v16 以上を推奨)が表示されれば、インストールされています。
ない場合は、次のサイトへnodejs.orgLTS バージョンをダウンロードしてインストールしてください。
Node.js をインストールすると、npm(Node パッケージマネージャー)も自動的に付属します。
確認コマンド:
npm -v
Vue3 プロジェクトを作成する
Vue 公式が推奨するcreate-vueスキャフォールディングツールを使ってプロジェクトを初期化します。
ターミナルでプロジェクトを保存したいディレクトリに移動し、以下を実行します:
npm create vue@latest blog-app
実行すると一連のオプションが表示されるので、次のように選択します:
| オプション | 選択 | 説明 |
|---|---|---|
| Add TypeScript? | No | 初心者はまず純粋な JS を使う |
| Add JSX Support? | No | テンプレート構文の方が直感的 |
| Add Vue Router? | Yes | 後でルーティングを使う |
| Add Pinia? | Yes | 状態管理、後で使う |
| Add Vitest? | No | テストは今は不要 |
| Add ESLint? | No | 初心者は今は使わない |
選択が完了したら、プロンプトに従って順に実行します:
$ cd blog-app $ npm install $ npm run dev
このときブラウザが自動的に http://localhost:5173 を開き、Vue のデフォルトのウェルカムページが表示されれば、プロジェクトの起動成功です。
npm installpackage.json に基づいてすべての依存パッケージが node_modules ディレクトリにダウンロードされます。この手順はネット接続が必要で、初回は数分かかる場合があります。
プロジェクトディレクトリ構造の詳細
blog-app フォルダーを開くと、次の構造が表示されます:
blog-app/ ├── index.html # 入口 HTML 文件 ├── package.json # 项目配置与依赖列表 ├── vite.config.js # Vite 构建工具配置 ├── public/ # 不经过编译的静态资源 ├── src/ │ ├── main.js # JS 入口,创建并挂载 Vue 应用 │ ├── App.vue # 根组件,所有页面的外壳 │ ├── assets/ # 需要编译的静态资源(CSS、图片) │ ├── components/ # 可复用的 Vue 组件 │ ├── views/ # 页面级组件(路由对应的页面) │ ├── router/ # 路由配置 │ └── stores/ # Pinia 状态管理
コアファイルの役割
index.html— ブラウザからアクセスされるエントリーファイル。
Vite が自動的に src/main.js をこのファイルに注入するため、手動で JS を読み込む必要はありません。
src/main.js— Vue アプリケーションの起動ファイル。
Vue アプリケーションのインスタンスを作成し、プラグイン(ルーター、状態管理)を登録し、アプリケーションを HTML ページにマウントする役割を担います。
src/App.vue— ルートコンポーネント。
すべてのページの最外層のコンテナーであり、通常はナビゲーションバー、フッター、ルーターアウトレットを含みます。
単一ファイルコンポーネント(SFC)
Vue では各.vueファイルは「単一ファイルコンポーネント」(Single File Component)と呼ばれます。
同じコンポーネントのテンプレート、ロジック、スタイルを1つにカプセル化し、1つのファイルが独立した機能単位になります。
SFC三段構成
例
// 第三部分:ロジック — ここに JS を書きます
const message = 'Hello Vue3!'
</script>
<template>
<!-- 第一部分:テンプレート — ここに HTML を書きます -->
<h1>{{ message }}</h1>
</template>
<style scoped>
/* 第二部分:スタイル — ここに CSS を書きます */
h1 {
color: #427DB8;
}
</style>
これらの3つのタグの順序は自由に並べられますが、業界の慣例は次のとおりです:script → template → style。
| ブロック | 役割 | 一言で理解 |
|---|---|---|
<script setup> | JS ロジックを書き、データとメソッドを定義する | コンポーネントが何をするかを制御する |
<template> | HTML 構造を書き、データをバインドする | コンポーネントの見た目を制御する |
<style scoped> | CSS スタイルを書く | コンポーネントの見た目の良し悪しを制御する |
scopedこの属性により、現在のコンポーネントのスタイルは自身にのみ適用され、他のコンポーネントを汚染しません。これは Vue 単一ファイルコンポーネントの核となる特性の1つです。
テンプレート構文 vs JSX
Vue はデフォルトでテンプレート構文を使ってインターフェースを記述します。
テンプレート構文とは、<template>の中に書かれる、Vue の特別なディレクティブを持つ HTML です。
| 特徴 | テンプレート構文 | JSX |
|---|---|---|
| 構文形式 | HTML + Vue ディレクティブ | JavaScript で HTML 風のものを書く |
| 学習コスト | 低い、ネイティブ HTML に近い | JSX のコンパイルメカニズムを理解する必要がある |
| 柔軟性 | 中程度、宣言的 | 高い、JS で自由に操作できる |
| Vue のおすすめ度 | デフォルトで推奨 | オプションでサポート |
| 適用シーン | ほとんどのページ開発 | 複雑なロジックで UI を動的生成する必要がある |
本チュートリアルではすべてテンプレート構文を使用します。Vue にとって最も自然で、初心者に最適な書き方だからです。
実践:テンプレートを空にしてブログの骨組みを書く
デフォルトで生成された App.vue の内容を空にして、ブログの基本骨組みに置き換えます。
例
// 後でここにロジックを追加します
</script>
<template>
<div id="app">
<!-- 上部ナビゲーションバー -->
<header class="navbar">
<h1>My Blog</h1>
<nav>
<a href="/">ホーム</a>
<a href="#">概要</a>
</nav>
</header>
<!-- メインコンテンツエリア -->
<main class="container">
<p>ブログの内容はここに表示されます</p>
</main>
<!-- フッター -->
<footer class="footer">
<p>© 2024 My Blog. Powered by Vue3.</p>
</footer>
</div>
</template>
<style>
/* グローバルリセット */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: #f5f5f5;
color: #333;
}
/* ナビゲーションバー */
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16px 40px;
background: #fff;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.navbar h1 {
font-size: 24px;
color: #427DB8;
}
.navbar a {
margin-left: 20px;
text-decoration: none;
color: #333;
}
/* メインコンテンツエリア */
.container {
max-width: 960px;
margin: 40px auto;
padding: 0 20px;
}
/* フッター */
.footer {
text-align: center;
padding: 20px;
color: #999;
border-top: 1px solid #eee;
}
</style>
保存すると、ブラウザが自動的に更新され、クリーンなブログの骨組みが表示されます:上部ナビゲーションバー + 中央のコンテンツエリア + 下部フッター。
これが今後のすべての章の出発点です。
本章のまとめ
この章では3つのことを達成しました:Vite を使って Vue3 プロジェクトを作成し、ディレクトリ構造と SFC の三段構成を理解し、ブログの基本 HTML 骨組みを書きました。
核心的な収穫:1つの.vueファイルが template / script / style の3つの部分で構成されていること、そして Vue プロジェクトを起動する方法を理解しました。