はじめに
Vue 3 では新しい Composition API が導入され、より柔軟で再利用しやすいコードを書くことができるようになりました。本記事では、Vue 2 の Options API との違いや、Composition API の基本的な使い方、実践例について解説します。
Vue 2 と Vue 3 の違い
Vue 2 の Options API と Vue 3 の Composition API の違い
Vue 2 では Options API を使用し、data, methods, computed, watch などを分けて記述していました。
Vue 2 の Options API の例
export default {
  data() {
    return {
      count: 0
    };
  },
  methods: {
    increment() {
      this.count++;
    }
  }
};
Vue 3 では Composition API を導入し、setup() 関数内でロジックをまとめて記述できます。
Vue 3 の Composition API の例
<script setup>
import { ref } from 'vue';
const count = ref(0);
const increment = () => {
  count.value++;
};
</script>
Composition API を導入するメリット
- ロジックをまとめて記述できるため、可読性が向上
 - コードの再利用がしやすく、複数のコンポーネントで同じロジックを簡単に使い回せる
 - TypeScript との相性が良く、型のサポートが強化されている
 
Vue 3 での開発の基本的な流れ
- Vue 3 プロジェクトの作成 (
create-vueまたはviteを使用) - setup() 関数を活用してデータや関数を管理
 - ライフサイクルフックやリアクティブな状態管理を組み込む
 
setup() 関数の使い方
setup() 関数の基本構造と役割
setup()は Vue コンポーネントの 最初に実行される関数 で、データや関数を定義する役割を持ちます。thisを使用せずにデータを扱える のが特徴。
基本の setup() の構造
<script setup>
import { ref } from 'vue';
const message = ref('Hello Vue 3');
</script>
<template>
  <p>{{ message }}</p>
</template>
setup() でデータを管理する方法(ref() や reactive() の活用)
ref() と reactive() を使用して、リアクティブなデータを管理できます。
リアクティブとはVue では、データが変更されたときに 自動的に UI(画面)を更新 する仕組みです。これにより、手動で DOM を更新する必要がなくなり、より直感的な開発が可能になります
ref() の例(単一の値をリアクティブにする)
<script setup>
import { ref } from 'vue';
const count = ref(0);
</script>
reactive() の例(オブジェクトや配列をリアクティブにする)
<script setup>
import { reactive } from 'vue';
const user = reactive({
  name: 'Taro',
  age: 25
});
</script>
setup() 内で computed() や watch() を使う方法
Vue 3 の computed() と watch() はどちらもリアクティブデータを使いますが、役割や動作の仕組みが異なります。
computed() を使った動的なデータ処理
<script setup>
import { ref, computed } from 'vue';
const price = ref(1000); // 商品の価格
const taxRate = ref(0.1); // 税率(10%)
const totalPrice = computed(() => price.value * (1 + taxRate.value)); // 税込み価格を計算
</script>
<template>
  <div>
    <p>商品価格: {{ price }} 円</p>
    <p>税込価格: {{ totalPrice }} 円</p>
  </div>
</template>
仕組みの詳細
priceやtaxRateが変更されると、自動的にtotalPriceが再計算されるtotalPriceの値がキャッシュされ、依存データ (priceやtaxRate) が変わらない限り無駄な再計算が行われない- テンプレート内では 
totalPriceを通常の変数のように扱える 
watch() を使った動的なデータ処理
watch() は、指定したリアクティブなデータの変更を 監視(ウォッチ) し、その変更に応じて特定の処理を実行するのに使われます。
たとえば、API の再取得や、特定の処理をデータの変更に応じて実行する 場合に便利です。
watch() の基本的な使い方
<script setup>
import { ref, watch } from 'vue';
const count = ref(0);
watch(count, (newVal, oldVal) => {
  console.log(`count が ${oldVal} から ${newVal} に変更されました`);
});
</script>
<template>
  <div>
    <p>カウント: {{ count }}</p>
    <button @click="count++">増やす</button>
  </div>
</template>
watch() の仕組み
countの値が変更されるたびにwatch()のコールバック関数が実行される。watch(count, (newVal, oldVal) => {...})の第1引数newValには新しい値、第2引数oldValには変更前の値が入る。- ボタンをクリックすると 
countの値が増え、コンソールに変更が表示される。 
computed()とwatch()の違い
| computed() | watch() | |
|---|---|---|
| 主な用途 | 動的な計算結果を作成 | データの変更を検知して処理を実行 | 
| キャッシュ | あり(無駄な計算を防ぐ) | なし(変更のたびに実行) | 
| テンプレート内で直接使えるか | 使える | 使えない(関数として処理を実行) | 
| 実行タイミング | 依存データが変更されたときのみ再計算 | データ変更をトリガーに毎回実行 | 
| 具体的な用途 | 価格計算、フィルタリング、合計値など | API の再取得、ローカルストレージ更新、ログ記録など | 
ref() と reactive() を使った状態管理
ref() を使った単純なリアクティブデータの管理
<script setup>
import { ref } from 'vue';
const message = ref('Hello Vue 3');
</script>
reactive() を使ってオブジェクトや配列をリアクティブにする方法
<script setup>
import { reactive } from 'vue';
const user = reactive({ name: 'Taro', age: 25 });
</script>
ref() と reactive() の違いと使い分け
ref()→ 単一の値に適用(数値・文字列・真偽値など)reactive()→ オブジェクトや配列に適用
Composition API の実践例
カウンターアプリを作成して ref() を使った状態管理を体験する
<script setup>
import { ref } from 'vue';
const count = ref(0);
const increment = () => {
  count.value++;
};
</script>
<template>
  <button @click="increment">カウント: {{ count }}</button>
</template>
フォーム入力のバインディングと reactive() を使った状態管理の例
<script setup>
import { reactive } from 'vue';
const form = reactive({ name: '', email: '' });
</script>
<template>
  <input v-model="form.name" placeholder="名前を入力" />
  <input v-model="form.email" placeholder="メールアドレスを入力" />
  <p>名前: {{ form.name }}</p>
  <p>メール: {{ form.email }}</p>
</template>
まとめ
- Vue 3 の Composition API は、より柔軟で再利用しやすいコードを実現する
 - setup() 内で 
ref()やreactive()を使い、リアクティブなデータを管理できる computed()はキャッシュされる計算プロパティ、watch()はデータ変更時に処理を実行するために使う- Composition API を活用すると、コードの可読性・再利用性が向上し、大規模なアプリ開発にも適している
 
Composition API を活用し、よりモダンで効率的な Vue 3 の開発を始めましょう!
  
  
  
  

コメント