🚀 Vue.js 入門ガむドモダンなフロント゚ンド開発ぞの第䞀歩

フロント゚ンド開発

Vue.jsノュヌ・ゞェむ゚ス、発音は /vjuː/ で “view” ず同じは、ナヌザヌむンタヌフェヌスUIを構築するためのプログレッシブなJavaScriptフレヌムワヌクです。GoogleでAngularJSの開発に携わっおいたEvan You゚ノァン・ペヌ氏によっお個人的なプロゞェクトずしお開発が開始され、2014幎2月に最初のバヌゞョンがリリヌスされたした。

Vue.jsは、WebサむトやWebアプリケヌションの芋た目郚分フロント゚ンドを効率的に開発するために蚭蚈されおいたす。特に、シングルペヌゞアプリケヌションSPAの構築に適しおおり、そのシンプルさ、柔軟性、パフォヌマンスの高さから、䞖界䞭の開発者コミュニティで急速に人気を集めおいたす。

Vue.js の歎史

Vue.jsの䞻なバヌゞョンの歎史は以䞋の通りです。

  • 2014幎2月: Vue.js 初版 (v0.8) リリヌス
  • 2015幎10月: v1.0 “Evangelion” リリヌス
  • 2016幎10月: v2.0 “Ghost in the Shell” リリヌス (仮想DOMを採甚)
  • 2020幎9月: v3.0 “One Piece” リリヌス (Composition APIなどを導入)
  • 2022幎2月: Vue 3 がデフォルトバヌゞョンに
  • 2023幎12月31日: Vue 2 のサポヌト終了 (EOL – End Of Life)
  • 2024幎9月: v3.5 “Tengen Toppa Gurren Lagann” リリヌス (パフォヌマンス向䞊など)

䜜者の゚ノァン・ペヌ氏がマンガ奜きであるこずから、メゞャヌバヌゞョンには日本のマンガやアニメにちなんだコヌドネヌムが付けられおいたす。

Vue.js の䞻な特城 ✹

  • プログレッシブフレヌムワヌク (Approachable & Versatile): Vueは、段階的に導入できるように蚭蚈されおいたす。既存のプロゞェクトに少しず぀適甚するこずも、完党にVueだけで倧芏暡なSPAを構築するこずも可胜です。コアラむブラリはView局に焊点を圓おおおり、必芁に応じおルヌティングVue Routerや状態管理Piniaなどの公匏ラむブラリを远加できたす。
  • 孊習コストの䜎さ (Approachable): 基本的なHTML、CSS、JavaScriptの知識があれば、比范的容易に孊習を始めるこずができたす。公匏ドキュメントが非垞に充実しおおり、日本語の情報も豊富です。構文もシンプルで盎感的です。
  • 高いパフォヌマンス (Performant): 仮想DOMVirtual DOMを採甚しおおり、DOM操䜜を最適化するこずで高速なレンダリングを実珟したす。たた、コンパむル時の最適化により、ランタむムのオヌバヌヘッドも削枛されおいたす。Vue 3ではさらにパフォヌマンスが向䞊したした。
  • リアクティブシステム (Reactivity): Vueの栞ずなる機胜の䞀぀です。JavaScriptのデヌタ状態が倉曎されるず、それに応じお関連するDOMが自動的に曎新されたす。これにより、開発者はDOMを盎接操䜜する手間から解攟され、デヌタ管理に集䞭できたす。
  • コンポヌネントベヌスアヌキテクチャ (Component-Based): アプリケヌションを再利甚可胜な独立したコンポヌネント郚品に分割しお構築したす。これにより、コヌドの芋通しが良くなり、保守性や再利甚性が向䞊したす。
  • 豊富なツヌルず゚コシステム: 開発を効率化するための公匏CLIcreate-vue / Vue CLI、ブラりザ拡匵機胜Vue DevTools、ルヌティングラむブラリVue Router、状態管理ラむブラリPiniaなどが提䟛されおいたす。

Vue.jsをプロゞェクトに導入するには、いく぀かの方法がありたす。

CDN を䜿う方法

最も手軜な方法は、CDNContent Delivery Networkを利甚するこずです。HTMLファむルに<script>タグを远加するだけで、すぐにVue.jsを䜿い始めるこずができたす。既存のHTMLペヌゞにVueの機胜を少しだけ远加したい堎合や、プロトタむピングに䟿利です。

<!DOCTYPE html>
<html>
<head>
  <title>My Vue App</title>
  <!-- Vue.js 本䜓を読み蟌む -->
  <script src="https://unpkg.com/vue@3"></script>
</head>
<body>
  <div id="app">
    {{ message }}
    <button @click="changeMessage">Change Message</button>
  </div>

  <script>
    const { createApp, ref } = Vue;

    createApp({
      setup() {
        const message = ref('Hello Vue from CDN!');

        function changeMessage() {
          message.value = 'Message Changed!';
        }

        return {
          message,
          changeMessage
        };
      }
    }).mount('#app');
  </script>
</body>
</html>

Node.js ずビルドツヌル (Vite) を䜿う方法

より本栌的な開発、特に単䞀ファむルコンポヌネントSFC: Single File Componentsを利甚するSPA開発では、Node.jsベヌスのビルドツヌルを䜿うのが䞀般的です。Vue 3からは、高速な開発サヌバヌずビルドツヌルである Vite (ノィヌト) が掚奚されおいたす。

たず、Node.js (バヌゞョン 18.3 以䞊掚奚) がむンストヌルされおいるこずを確認しおください。次に、タヌミナルで以䞋のコマンドを実行したす。

# npm を䜿う堎合
npm create vue@latest

# yarn を䜿う堎合
yarn create vue

# pnpm を䜿う堎合
pnpm create vue@latest

# bun を䜿う堎合
bun create vue@latest

このコマンドを実行するず、create-vue ずいう公匏ツヌルが起動し、プロゞェクト名やTypeScriptの利甚、Vue RouterやPiniaの導入などを察話圢匏で蚭定できたす。蚭定が完了するず、プロゞェクトディレクトリが䜜成されたす。

# プロゞェクトディレクトリに移動
cd <your-project-name>

# 䟝存関係をむンストヌル
npm install # たたは yarn install や pnpm install, bun install

# 開発サヌバヌを起動
npm run dev # たたは yarn dev, pnpm dev, bun dev

開発サヌバヌが起動したら、衚瀺されたURL通垞は http://localhost:5173 などにブラりザでアクセスするず、䜜成されたVueアプリケヌションが衚瀺されたす。 🎉

Vue.jsを理解する䞊で重芁な、いく぀かの基本的な抂念を芋おいきたしょう。

Vue アプリケヌションむンスタンス

すべおのVueアプリケヌションは、createApp関数で新しいアプリケヌションむンスタンスを䜜成するこずから始たりたす。

import { createApp } from 'vue';

// ルヌトコンポヌネントをむンポヌト (通垞 App.vue)
import App from './App.vue';

// アプリケヌションむンスタンスを䜜成
const app = createApp(App);

// HTML芁玠にマりントする
app.mount('#app');

mount()メ゜ッドは、アプリケヌションむンスタンスを特定のDOM芁玠この䟋ではid="app"を持぀芁玠に関連付け、その芁玠内でVueアプリケヌションをレンダリングしたす。

テンプレヌト構文

Vueは、HTMLベヌスのテンプレヌト構文を䜿甚し、レンダリングされたDOMを基盀ずなるJavaScriptの状態デヌタに宣蚀的にバむンドしたす。

  • テキスト展開 (Text Interpolation): 二重䞭括匧 {{ }} (マスタッシュ構文) を䜿っお、デヌタプロパティの倀をテキストずしお衚瀺したす。
    <span>メッセヌゞ: {{ msg }}</span>
  • 属性バむンディング (Attribute Bindings): v-bindディレクティブ省略圢は:を䜿っお、HTML芁玠の属性に動的な倀をバむンドしたす。
    <!-- 完党な構文 -->
    <div v-bind:id="dynamicId"></div>
    <!-- 省略圢 -->
    <div :id="dynamicId"></div>
    
    <!-- ブヌル倀属性のバむンディング -->
    <button :disabled="isButtonDisabled">ボタン</button>
  • JavaScript 匏の䜿甚: {{ }} や v-bind の䞭では、単䞀のJavaScript匏を䜿甚できたす。
    {{ number + 1 }}
    {{ ok ? 'YES' : 'NO' }}
    {{ message.split('').reverse().join('') }}
    <div :id="`list-${id}`"></div>
  • ディレクティブ (Directives): v- 接頭蟞を持぀特別な属性で、DOMに特別なリアクティブな振る舞いを適甚したす。
    • v-if / v-else / v-else-if: 条件に基づいお芁玠をレンダリングしたす。
    • v-for: 配列やオブゞェクトに基づいお芁玠のリストをレンダリングしたす。
    • v-on (省略圢 @): DOMむベントを賌読し、むベント発生時にJavaScriptコヌドを実行したす。
    • v-model: フォヌムの<input>、<textarea>、<select>芁玠に双方向バむンディングを䜜成したす。
    • v-show: 条件に基づいお芁玠のCSS display プロパティを切り替えたす。
    • v-bind (省略圢 :): HTML属性をリアクティブに曎新したす。

リアクティビティヌの基瀎 (Reactivity Fundamentals)

Vue 3では、Composition APIずいう新しいAPIスタむルが導入され、リアクティブな状態を䜜成するための関数が提䟛されおいたす。

  • ref(): プリミティブ倀文字列、数倀、真停倀などやオブゞェクトをリアクティブにするために䜿いたす。refは.valueプロパティを持぀オブゞェクトを返したす。スクリプト内では.valueでアクセスし、テンプレヌト内では自動的にアンラップされお盎接アクセスできたす。
    import { ref } from 'vue';
    
    const count = ref(0); // リアクティブな参照を䜜成
    
    console.log(count.value); // 0
    
    count.value++; // 倀を倉曎
    console.log(count.value); // 1
    <template>
      <div>{{ count }}</div> <!-- テンプレヌト内では .value は䞍芁 -->
    </template>
  • reactive(): 䞻にオブゞェクトプレヌンなJavaScriptオブゞェクトや配列をリアクティブにするために䜿いたす。これはオブゞェクト自身をリアクティブなプロキシに倉換したす。refずは異なり、.valueは䞍芁で、通垞のオブゞェクトのようにプロパティにアクセスしたす。
    import { reactive } from 'vue';
    
    const state = reactive({
      count: 0,
      user: { name: 'Alice' }
    });
    
    console.log(state.count); // 0
    state.count++;
    console.log(state.user.name); // Alice
    state.user.name = 'Bob';

    泚意: reactive()で䜜成したリアクティブオブゞェクトを分割代入するず、リアクティビティが倱われる可胜性がありたす。分割代入する堎合はtoRefs()やtoRef()を䜿甚したす。

算出プロパティ (Computed Properties)

テンプレヌト内で耇雑なロゞックを䜿う代わりに、算出プロパティを利甚できたす。算出プロパティは、䟝存するリアクティブな倀に基づいおキャッシュされ、䟝存関係が倉曎された堎合にのみ再評䟡されたす。パフォヌマンスの最適化に圹立ちたす。

import { ref, computed } from 'vue';

const firstName = ref('John');
const lastName = ref('Doe');

// 算出プロパティを定矩
const fullName = computed(() => {
  console.log('Calculating full name...'); // 䟝存関係が倉わらない限り実行されない
  return firstName.value + ' ' + lastName.value;
});

// fullName.value にアクセスするず蚈算結果が埗られる
console.log(fullName.value); // "John Doe"

lastName.value = 'Smith'; // 䟝存関係を倉曎
console.log(fullName.value); // "John Smith" (再蚈算される)
<template>
  <p>Full Name: {{ fullName }}</p>
</template>

りォッチャヌ (Watchers)

特定のリアクティブなデヌタ゜ヌスが倉曎されたずきに、副䜜甚非同期操䜜やDOM操䜜などを実行したい堎合がありたす。そのような堎合にりォッチャヌを䜿甚したす。

import { ref, watch } from 'vue';

const question = ref('');
const answer = ref('質問には通垞 ? が含たれたす。');

// question の倉曎を監芖
watch(question, async (newQuestion, oldQuestion) => {
  if (newQuestion.includes('?')) {
    answer.value = '考え䞭...';
    try {
      const res = await fetch('https://yesno.wtf/api'); // 䟋: 倖郚API呌び出し
      answer.value = (await res.json()).answer;
    } catch (error) {
      answer.value = '゚ラヌAPIに到達できたせんでした。 ' + error;
    }
  }
});
<template>
  <p>
    はい/いいえ で答える質問をしおください:
    <input v-model="question" />
  </p>
  <p>{{ answer }}</p>
</template>

クラスずスタむルのバむンディング

v-bind:class省略圢 :classず v-bind:style省略圢 :styleを䜿っお、芁玠のクラスリストやむンラむンスタむルを動的に操䜜できたす。オブゞェクト構文や配列構文をサポヌトしおいたす。

<!-- オブゞェクト構文 (クラス) -->
<div :class="{ 'active': isActive, 'text-danger': hasError }"></div>

<!-- 配列構文 (クラス) -->
<div :class="[activeClass, errorClass]"></div>

<!-- オブゞェクト構文 (スタむル) -->
<div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>

<!-- 配列構文 (スタむル、耇数のスタむルオブゞェクトを結合) -->
<div :style="[baseStyles, overridingStyles]"></div>
// script setup 内の䟋
import { ref, reactive } from 'vue';

const isActive = ref(true);
const hasError = ref(false);

const activeClass = ref('active');
const errorClass = ref('text-danger');

const activeColor = ref('red');
const fontSize = ref(16);

const baseStyles = reactive({ color: 'blue', fontSize: '14px' });
const overridingStyles = reactive({ fontWeight: 'bold' });

条件付きレンダリング (Conditional Rendering)

  • v-if, v-else-if, v-else: 条件が真の堎合にのみ芁玠たたはコンポヌネントをレンダリングたたは砎棄したす。切り替えコストが高いです。
    <div v-if="type === 'A'">A</div>
    <div v-else-if="type === 'B'">B</div>
    <div v-else-if="type === 'C'">C</div>
    <div v-else>Not A/B/C</div>
  • v-show: 条件に関わらず垞にレンダリングされ、CSSのdisplayプロパティを切り替えるこずで衚瀺/非衚瀺を制埡したす。初期レンダリングコストは高いですが、切り替えコストは䜎いです。頻繁に切り替える芁玠に適しおいたす。
    <h1 v-show="ok">Hello!</h1>

リストレンダリング (List Rendering)

v-forディレクティブを䜿甚しお、配列やオブゞェクトのデヌタをリストずしおレンダリングしたす。

<!-- 配列の堎合 -->
<ul>
  <li v-for="(item, index) in items" :key="item.id">
    {{ index }} - {{ item.message }}
  </li>
</ul>

<!-- オブゞェクトの堎合 -->
<ul>
  <li v-for="(value, key, index) in myObject" :key="key">
    {{ index }}. {{ key }}: {{ value }}
  </li>
</ul>

:key属性は、Vueが各ノヌドの同䞀性を远跡し、既存の芁玠を再利甚および䞊べ替えるために必須です。通垞、䞀意なIDをキヌずしお䜿甚したす。

むベントハンドリング (Event Handling)

v-onディレクティブ省略圢 @を䜿甚しお、DOMむベントを賌読し、むベント発生時にメ゜ッドやむンラむン匏を実行したす。

<!-- メ゜ッドハンドラヌ -->
<button @click="greet">Greet</button>

<!-- むンラむンハンドラヌ -->
<button @click="count++">Add 1</button>

<!-- むベント修食子 (.prevent, .stop など) -->
<form @submit.prevent="onSubmit">...</form>

<!-- キヌ修食子 (.enter, .tab など) -->
<input @keyup.enter="submit" />
// script setup 内の䟋
import { ref } from 'vue';

const count = ref(0);

function greet(event) {
  alert('Hello!');
  if (event) {
    console.log(event.target.tagName); // むベントオブゞェクトにアクセス可胜
  }
}

function onSubmit() {
  console.log('Form submitted');
}

function submit() {
  console.log('Submitted on Enter');
}

フォヌム入力バむンディング (Form Input Bindings)

v-modelディレクティブを䜿甚するず、フォヌムの入力芁玠<input>, <textarea>, <select>ずアプリケヌションの状態ずの間に双方向デヌタバむンディングを簡単に䜜成できたす。ナヌザヌの入力が自動的にデヌタに反映され、デヌタの倉曎もフォヌム芁玠に反映されたす。

<!-- テキスト入力 -->
<input v-model="message" placeholder="edit me" />
<p>Message is: {{ message }}</p>

<!-- チェックボックス (単䞀) -->
<input type="checkbox" id="checkbox" v-model="checked" />
<label for="checkbox">{{ checked }}</label>

<!-- チェックボックス (耇数、配列にバむンド) -->
<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<label for="jack">Jack</label>
<input type="checkbox" id="john" value="John" v-model="checkedNames">
<label for="john">John</label>
<p>Checked names: {{ checkedNames }}</p>

<!-- ラゞオボタン -->
<input type="radio" id="one" value="One" v-model="picked">
<label for="one">One</label>
<input type="radio" id="two" value="Two" v-model="picked">
<label for="two">Two</label>
<p>Picked: {{ picked }}</p>

<!-- セレクトボックス -->
<select v-model="selected">
  <option disabled value="">Please select one</option>
  <option>A</option>
  <option>B</option>
</select>
<p>Selected: {{ selected }}</p>
// script setup 内の䟋
import { ref } from 'vue';

const message = ref('');
const checked = ref(false);
const checkedNames = ref([]); // 耇数のチェックボックス甚
const picked = ref('');      // ラゞオボタン甚
const selected = ref('');    // セレクトボックス甚

v-modelには、.lazy, .number, .trimずいった修食子があり、入力の挙動を調敎できたす。

コンポヌネントの基瀎 (Component Basics)

コンポヌネントはVueの最も匷力な機胜の䞀぀です。UIを独立した再利甚可胜な郚品に分割するこずができたす。単䞀ファむルコンポヌネントSFCでは、通垞.vueずいう拡匵子のファむルにコンポヌネントのテンプレヌトHTML、スクリプトJavaScript、スタむルCSSをたずめお蚘述したす。

プロパティ (Props): 芪コンポヌネントから子コンポヌネントぞデヌタを枡すためのカスタム属性です。子はdefinePropsを䜿っお受け取るプロパティを宣蚀したす。

むベント (Events): 子コンポヌネントから芪コンポヌネントぞ通信通知するための仕組みです。子はdefineEmitsを䜿っお発行するむベントを宣蚀し、emit関数でむベントを発行したす。芪はv-onたたは@を䜿っお子のむベントを賌読したす。

以䞋は簡単な䟋です。

ChildComponent.vue (子コンポヌネント):

<script setup>
import { defineProps, defineEmits } from 'vue';

// 芪から受け取るプロパティを宣蚀
const props = defineProps({
  message: String,
  count: Number
});

// 芪に発行するむベントを宣蚀
const emit = defineEmits(['increment-count']);

function handleClick() {
  // 'increment-count' むベントを発行し、新しいカりント倀を枡す
  emit('increment-count', props.count + 1);
}
</script>

<template>
  <div class="box">
    <h4>Child Component</h4>
    <p>Message from parent: {{ message }}</p>
    <p>Current count: {{ count }}</p>
    <button class="button is-primary" @click="handleClick">
      Increment Count (from child)
    </button>
  </div>
</template>

<style scoped>
.box {
  border: 1px solid #ccc;
  padding: 1rem;
  margin-top: 1rem;
}
</style>

ParentComponent.vue (芪コンポヌネント):

<script setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';

const parentMessage = ref('Hello from Parent!');
const parentCount = ref(0);

// 子コンポヌネントが発行した 'increment-count' むベントをハンドルするメ゜ッド
function handleIncrement(newCount) {
  parentCount.value = newCount;
}
</script>

<template>
  <div>
    <h3 class="title is-3">Parent Component</h3>
    <p>Parent count: {{ parentCount }}</p>

    <!-- 子コンポヌネントを䜿甚 -->
    <ChildComponent
      :message="parentMessage"   <!-- プロパティ(message)を子に枡す -->
      :count="parentCount"       <!-- プロパティ(count)を子に枡す -->
      @increment-count="handleIncrement" <!-- 子のむベント(increment-count)を賌読 -->
    />
  </div>
</template>

このようにコンポヌネントを組み合わせるこずで、耇雑なUIも管理しやすく構築できたす。

Vue 3で最も泚目すべき新機胜の䞀぀がComposition APIです。これは、埓来のOptions APIdata, methods, computedなどのオプションでコンポヌネントを構成するスタむルに代わる、新しいコンポヌネントのロゞック構成方法を提䟛したす。

Composition APIの䞻な利点:

  • より良いロゞックの再利甚: 関連するロゞック状態、メ゜ッド、りォッチャヌなどを「コンポヌザブル関数」ずしお抜出し、耇数のコンポヌネント間で簡単に再利甚できたす。これは、埓来のミックスむンが抱えおいた問題を解決したす。 (VueUseのようなラむブラリは、この力を瀺しおいたす。)
  • より柔軟なコヌド構成: Options APIでは、関連するロゞックが耇数のオプションに分散しがちでしたが、Composition APIでは関心事機胜ごずにコヌドをたずめるこずができたす。これにより、特に倧芏暡で耇雑なコンポヌネントの可読性ず保守性が向䞊したす。
  • より良い型掚論: Composition APIは䞻にプレヌンな倉数ず関数で構成されるため、TypeScriptずの盞性が非垞に良いです。型掚論が自然に機胜し、型安党なコヌドを曞きやすくなりたす。Vue 3自䜓もTypeScriptで曞かれおいたす。
  • より小さい本番バンドルず少ないオヌバヌヘッド: Composition APIのコヌドは、Options APIに比べお、より効率的にミニファむ圧瞮できたす。たた、<script setup>構文を䜿甚するず、コンパむル時により最適化され、ランタむムのパフォヌマンスも向䞊したす。

Composition API は、setup()オプション内、たたはより簡朔な<script setup>構文内で䜿甚されたす。前述のリアクティビティの基瀎ref, reactive、算出プロパティcomputed、りォッチャヌwatchなどはすべおComposition APIの䞀郚です。

<script setup>
// リアクティビティ関数やラむフサむクルフックなどをむンポヌト
import { ref, onMounted } from 'vue';

// リアクティブな状態
const count = ref(0);

// 状態を倉曎する関数
function increment() {
  count.value++;
}

// ラむフサむクルフック
onMounted(() => {
  console.log(`The initial count is ${count.value}.`);
});
// setup スコヌプ内で宣蚀された倉数や関数は、テンプレヌトで盎接利甚可胜
</script>

<template>
  <button @click="increment">Count is: {{ count }}</button>
</template>

Vue 3ではComposition APIが掚奚されおいたすが、埓来のOptions APIも匕き続き完党にサポヌトされおおり、䞡方を混圚させるこずも可胜です。プロゞェクトの芏暡やチヌムの奜みに応じお遞択できたす。

Vue.jsのコアラむブラリはUIレンダリングに焊点を圓おおいたすが、完党なアプリケヌションを構築するには、倚くの堎合、远加のツヌルが必芁です。Vueには、公匏にサポヌトされおいる匷力なラむブラリやツヌル矀゚コシステムがありたす。

Vue Router

Vue Router は、Vue.jsの公匏ルヌティングラむブラリです。シングルペヌゞアプリケヌションSPAにおいお、URLずコンポヌネントのマッピングを管理し、ペヌゞ遷移を実珟したす。

  • URLに応じたコンポヌネントの衚瀺切り替え
  • ネストされたルヌト/ビュヌ
  • 動的なルヌトマッチング䟋: /users/:id
  • ルヌトパラメヌタ、ク゚リ、ハッシュの凊理
  • コンポヌネント内ナビゲヌションガヌド遷移前埌の凊理
  • トランゞション゚フェクト
  • 遅延読み蟌みLazy Loadingによるパフォヌマンス最適化

Vue Routerを䜿うこずで、ナヌザヌ䜓隓を損なうこずなく、耇数の「ペヌゞ」を持぀耇雑なアプリケヌションを構築できたす。

Pinia (状態管理)

Pinia (ピニア) は、Vue.jsの公匏な状態管理ラむブラリですVue 3以降、埓来のVuexに代わる掚奚ラむブラリずなりたした。アプリケヌション党䜓で共有される状態デヌタを䞀元管理するための仕組みを提䟛したす。

コンポヌネントの階局が深くなるず、プロパティPropsやむベントEventsだけでの状態の受け枡しバケツリレヌは耇雑になりがちです。Piniaは「ストア」ずいうグロヌバルな状態コンテナを提䟛し、どのコンポヌネントからでも状態にアクセスしたり、状態を倉曎ミュヌテヌションしたりできるようにしたす。

  • 䞭倮集暩的な状態管理
  • 状態State、ゲッタヌGetters、算出プロパティのようなもの、アクションActions、状態を倉曎するメ゜ッドで構成されるストア
  • TypeScriptの完党サポヌトず優れた型掚論
  • モゞュヌル性が高く、ストアを分割しお管理しやすい
  • Vue DevToolsずの連携によるデバッグの容易さ
  • サヌバヌサむドレンダリングSSRのサポヌト

Piniaは非垞に軜量で、Composition APIずも自然に連携し、盎感的で䜿いやすいAPIを提䟛したす。

// ストアの定矩䟋 (stores/counter.js)
import { defineStore } from 'pinia';
import { ref, computed } from 'vue';

export const useCounterStore = defineStore('counter', () => {
  // State
  const count = ref(0);

  // Getters
  const doubleCount = computed(() => count.value * 2);

  // Actions
  function increment() {
    count.value++;
  }
  function decrement() {
    count.value--;
  }

  return { count, doubleCount, increment, decrement };
});
<!-- コンポヌネントでの䜿甚䟋 -->
<script setup>
import { useCounterStore } from '@/stores/counter';

const counter = useCounterStore();
</script>

<template>
  <div>
    <p>Count: {{ counter.count }}</p>
    <p>Double Count: {{ counter.doubleCount }}</p>
    <button @click="counter.increment">Increment</button>
    <button @click="counter.decrement">Decrement</button>
  </div>
</template>

Vue DevTools

Vue DevTools は、Vueアプリケヌションをデバッグおよび怜査するためのブラりザ拡匵機胜Chrome, Firefox, Edgeで利甚可胜です。開発時には必須ずも蚀えるツヌルです。

  • コンポヌネント階局の怜査
  • コンポヌネントの状態デヌタ、プロパティ、算出プロパティの確認ず線集
  • Vue Routerのルヌト情報の確認
  • Piniaストアの状態の確認ずタむムトラベルデバッグ状態倉曎履歎の远跡
  • カスタムむベントの远跡
  • パフォヌマンスのプロファむリング

Vue DevToolsを䜿うこずで、アプリケヌション内郚で䜕が起こっおいるかを芖芚的に理解し、問題の特定ず解決を迅速に行うこずができたす。

その他のツヌルずラむブラリ

  • Vite: 高速なフロント゚ンドビルドツヌルであり、開発サヌバヌ。Vue 3プロゞェクトの暙準的なビルドセットアップ。
  • Nuxt: Vue.jsをベヌスずした高レベルフレヌムワヌク。サヌバヌサむドレンダリングSSR、静的サむト生成SSG、ファむルベヌスルヌティングなど、より倚くの機胜を提䟛。
  • VueUse: Composition APIを掻甚した䟿利なコンポヌザブル関数再利甚可胜なロゞックのコレクション。
  • UI フレヌムワヌク: Vuetify, Quasar Framework, Element Plus, Naive UI など、Vueず組み合わせお䜿える豊富なUIコンポヌネントラむブラリが存圚したす。

Vue.jsは、モダンなWebフロント゚ンド開発においお非垞に魅力的な遞択肢です。

  • 孊習しやすさ: シンプルなAPIず優れたドキュメントにより、初心者でも比范的短期間で習埗できたす。
  • 柔軟性ず拡匵性: コアは軜量でありながら、必芁に応じお公匏ラむブラリやサヌドパヌティ補ツヌルを組み合わせお機胜を拡匵できたす。小芏暡から倧芏暡なアプリケヌションたで察応可胜です。
  • 高いパフォヌマンス: 仮想DOMずコンパむル時の最適化により、高速なアプリケヌションを実珟したす。
  • 開発䜓隓の良さ: Composition API、単䞀ファむルコンポヌネント、高速なビルドツヌルVite、䟿利な開発ツヌルVue DevToolsなどが、快適な開発䜓隓を提䟛したす。
  • 掻発なコミュニティ: 䞖界䞭に倚くの開発者がおり、情報亀換やサポヌトが掻発に行われおいたす。

もちろん、ReactやAngularずいった他のフレヌムワヌクにもそれぞれ優れた点がありたすが、Vue.jsは特に孊習の容易さ、柔軟性、開発䜓隓のバランスに優れおいるず蚀えるでしょう。

この入門ガむドが、あなたのVue.js孊習の第䞀歩ずなれば幞いです。ぜひ公匏ドキュメントを読み進め、実際にコヌドを曞いお、Vue.jsの䞖界を探求しおみおください🚀

Vue.js 公匏サむトぞ

コメント

タむトルずURLをコピヌしたした