1.

Vue.js 入門 — フロントエンドフレームワーク完全ガイド

編集
この記事の要点
  • Vue.js は Evan You が 2014 年に公開したプログレッシブな JavaScript フレームワーク
  • 現行は Vue 3 (2020 年〜、Composition API + Vite ベース)。Vue 2 は 2023/12/31 EOL
  • SFC (Single File Component) 1 ファイルに <template> / <script> / <style> をまとめる
  • エコシステム: Vue Router (ルーティング) / Pinia (状態管理) / Vite (ビルド) / Nuxt (SSR/SSG)
  • React と Angular の中間: 学習曲線が緩く、SFC の構造が分かりやすい

Vue.js とは

Vue.js はユーザーインターフェース構築のための JavaScript フレームワークです。HTML のテンプレート構文をベースに、リアクティブなデータバインディング、コンポーネント指向、SFC (単一ファイルコンポーネント) を提供します。

項目内容
初版2014 年 (Evan You)
現行版Vue 3.x (2020〜)
ライセンスMIT
公式サイトhttps://ja.vuejs.org
GitHub Stars約 210k (2025 時点)
主要採用企業GitLab / Nintendo / Adobe (Portfolio) / Alibaba

最小サンプル

<div id="app">
  <p>{{ message }}</p>
  <button @click="count++">押された: {{ count }} 回</button>
</div>

<script type="module">
  import { createApp, ref } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';
  createApp({
    setup() {
      const message = ref('Hello Vue 3');
      const count = ref(0);
      return { message, count };
    }
  }).mount('#app');
</script>

主要コンセプト

コンセプト説明
リアクティブシステムref() / reactive() で値が変わると DOM 自動更新
テンプレート構文{{ ... }} 補間、v-bindv-on (@)v-modelv-ifv-for
コンポーネントUI を部品化。props で親から子へ、emit で子から親へ通信
SFC.vue 拡張子に template / script / style を集約
Composition API関数的にロジックを組み立てる。<script setup> が現代の標準
computed / watch派生値の自動再計算、副作用の監視
ライフサイクルonMounted / onUnmounted / onUpdated

Single File Component の構造

<!-- TodoItem.vue -->
<script setup>
import { ref, computed } from 'vue';

const props = defineProps({
  title: String,
  completed: Boolean,
});
const emit = defineEmits(['toggle']);

const classes = computed(() => ({
  done: props.completed,
}));
</script>

<template>
  <li :class="classes">
    <input type="checkbox"
           :checked="completed"
           @change="emit('toggle')">
    {{ title }}
  </li>
</template>

<style scoped>
.done { text-decoration: line-through; color: #999; }
</style>

Composition API: ref / reactive / computed / watch

import { ref, reactive, computed, watch, onMounted } from 'vue';

// ref: プリミティブ値をリアクティブに
const count = ref(0);
count.value++;             // .value でアクセス
console.log(count.value);  // テンプレート内では自動 unwrap

// reactive: オブジェクトをリアクティブに
const state = reactive({
  user: { name: 'taro', age: 25 },
  todos: [],
});
state.user.age = 26;

// computed: 派生値 (依存変化時のみ再計算)
const doubled = computed(() => count.value * 2);

// watch: 副作用
watch(count, (newVal, oldVal) => {
  console.log(`${oldVal} → ${newVal}`);
});

// ライフサイクル
onMounted(() => {
  console.log('component mounted');
});

エコシステム

ライブラリ役割
Vite開発サーバ + ビルド (Vue 公式推奨)
Vue Router 4クライアントサイドルーティング (SPA)
Pinia状態管理 (Vuex 後継、TypeScript フレンドリー)
Vuex 4旧状態管理。新規は Pinia 推奨
Nuxt 3SSR / SSG / フルスタックフレームワーク
VueUsecomposable ユーティリティ集 (useFetch, useStorage 等)
Vitestユニットテスト
Element Plus / Vuetify / PrimeVueUI コンポーネント集

React / Angular との比較

項目Vue 3React 18+Angular 17+
テンプレートHTML ベース (SFC)JSXHTML テンプレート + TS
学習曲線低 〜 中
状態管理PiniaRedux / Zustand / ContextRxJS / NgRx
ルーティングVue RouterReact Router同梱
型安全TypeScript 対応TypeScript 対応TypeScript 標準
規模中規模が得意大規模も可大規模エンタープライズ
SSR フレームワークNuxtNext.jsAngular Universal

Vue 2 と Vue 3 の主な違い

  • Composition API が公式に追加 (Vue 2.7 にもバックポートあり)
  • 仮想 DOM のリライト (高速化、Tree-shaking)
  • Multiple root nodes (Fragments) サポート
  • Teleport (旧 portal) / Suspense 標準
  • TypeScript サポート強化
  • Vue 2 の filter / EventBus は廃止
  • ビルドツールは Vue CLI から Vite

学習ロードマップ

  1. HTML / CSS / JavaScript ES2015+ の基本
  2. CDN で Hello World → リアクティブとイベント
  3. create-vue で SFC を書く
  4. Composition API + <script setup>
  5. Vue Router で SPA、Pinia で状態管理
  6. Nuxt 3 で SSR / SSG
  7. Vitest でテスト、Vue DevTools でデバッグ

FAQ

Q: Vue は廃れる?
A: 2025 年時点で GitHub stars 210k、Nuxt は急成長、State of JS でも上位。エンタープライズ採用 (GitLab 等) も継続。

Q: React か Vue か
A: 求人数は React > Vue。学習しやすさは Vue > React。日本国内の中規模 SaaS で Vue 採用が多い。

Q: Vue 2 プロジェクトの移行
A: 公式の Vue 2.7 (Naruto) で Composition API を使い、その後 Vue 3 へ。vue-demi も有効。

📸 参考画像

※ 旧バージョンから引き継いだ参考画像です。手順・図解の補助としてご覧ください。

参考画像

編集
Post Share
子ページ
  1. インストール(ファイルのダウンロード)
  2. npmを使用したプロジェクトの作成
  3. for 繰り返し処理
  4. ifの条件分岐とtemplateを用いたグループ化
  5. クリック時のイベント処理(on:click)
  6. modelとdata フォーム入力値とDOMへの即時反映
  7. computed(算出プロパティ)と使い方とdataとの違い
  8. ライフサイクルフック(created / mounted / updated / destroyedの使い方)
  9. $nextTickの使い方(ライフサイクルフック)
  10. メソッドの定義方法
  11. エラー一覧
  12. ルーティング設定
  13. aリンクの貼り方と動的URLの作成
  14. Mixinを利用した共通処理の記述方法
  15. v-bindによるデータ連携
  16. ヘッダー/フッターの共通コンポーネント
  17. ナビゲーションの現在ページをハイライトする方法
  18. 画面サイズの取得方法
同階層のページ
  1. Vue.js
  2. React
  3. Express

最近更新/作成されたページ