0Pricing
Vue Academy · レッスン

PiniaとVuex:移行する理由

mutations不要、TypeScriptの型推論、devtools対応、よりシンプルなAPI、デフォルトでモジュール化

「PiniaとVuex:移行する理由」はCoddyKit上の無料Vue Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはVue Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Vue Academyコースには全4レッスンが含まれています。

Pinia が Vuex に取って代わった理由

Pinia は Vue 3 の公式状態管理ライブラリで、Vuex よりも推奨されています。Vuex の優れた部分を残しながら、ボイラープレートや TypeScript と相性の悪かった部分を取り除いています。

ミューテーションは不要

Vuex では、状態を変更する唯一の方法として mutations が必要でした。Pinia ではこれらが完全になくなり、actions が状態を直接変更します。手続きが減り、ファイル数も少なくなりますが、同じように Devtools で追跡できます。

// Vuex: state -> mutation -> action (3 steps)
// Pinia: action mutates state directly (1 step)
actions: {
  increment() {
    this.count++ // direct, no commit needed
  }
}

TypeScript の型推論を標準で利用できる

Vuex ではストアの型付けが難しく、複雑なラッパーが必要でした。Pinia は state、getters、actions から型を自動的に推論するため、追加の型付けレイヤーは必要ありません。

const store = useCounterStore()
store.count       // inferred as number
store.doubled     // inferred from getter
store.increment() // fully typed action

設計上モジュール化されている

Vuex では、ネストされた modules を持つ単一のストアを使用し、名前空間の扱いにも悩まされました。Pinia は本質的にモジュール化されています。ストアごとに1ファイルを用意し、それぞれを独自の defineStore で作成します。中央での登録は不要です。

// stores/counter.js
export const useCounterStore = defineStore(...)

// stores/user.js
export const useUserStore = defineStore(...)

名前空間は不要

各ストアは独立しており、使用する場所でインポートするため、管理すべきグローバル名前空間はありません。必要なストアをインポートし、関数として呼び出すだけです。

import { useUserStore } from '@/stores/user'
const user = useUserStore()

Devtools をサポート

Pinia は Vuex と同じように Vue Devtools と統合できます。ミューテーションを記述しなくても、アクションのタイムライン、状態の検査、タイムトラベルデバッグを利用できます。

バンドルサイズが小さい

Pinia は Vuex よりおよそ1KB 小さく、ツリーシェイキングにも対応しています。インポートしていないストアは最終的なバンドルに含まれません。

よりフラットな API

mapState、mapGetters、mapActions のようなボイラープレートはありません。setup 内でストアのコンポーザブルを呼び出し、返されたオブジェクトを直接使用します。

const counter = useCounterStore()
// access state, getters, and actions on one object

どちらの API にも対応

Pinia は Options API と Composition API の両方をサポートしています。ストアを記述する2つのスタイルはオプションストア(オブジェクト)とセットアップストア(関数)で、このコースの後半で扱います。

Pinia をインストールする

インスタンスを作成してプラグインとして登録することで、アプリに Pinia を追加します。以降は、どのコンポーネントからでも任意のストアを使用できます。

import { createPinia } from 'pinia'
import { createApp } from 'vue'
import App from './App.vue'

createApp(App).use(createPinia()).mount('#app')

Pinia を使うタイミング

多くのコンポーネント間で状態を共有する必要がある場合、ルート変更後も状態を維持したい場合、または Devtools で状態を検査したい場合は Pinia を使用します。1つのコンポーネント内だけで使う状態なら、通常の ref のほうが簡単です。

クイックチェック

Pinia が Vuex に取って代わった理由を理解できているか確認しましょう。

まとめ

Pinia は Vue 3 の状態管理における現代的な選択肢です。

  • ミューテーションは不要で、actions が状態を直接変更します。
  • TypeScript の型推論が自動的に行われ、ラッパーは不要です。
  • モジュール化されており、ファイルごとに1つのストアを用意し、名前空間も不要です。
  • Devtools を完全にサポートし、バンドルサイズも約1KB 小さくなります。

よくある質問

「PiniaとVuex:移行する理由」レッスンは無料ですか?

はい。「PiniaとVuex:移行する理由」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Vue Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Vue Academyコースには全4レッスンが含まれています。

「PiniaとVuex:移行する理由」で何を学びますか?

mutations不要、TypeScriptの型推論、devtools対応、よりシンプルなAPI、デフォルトでモジュール化 ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Vue Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのVue Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「PiniaとVuex:移行する理由」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このVue Academyレッスンでコードを書いて実行できますか?

はい。すべてのVue Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. PiniaとVuex:移行する理由
  2. defineStore:State、Getters、Actions
  3. ストアの組み合わせとストア間アクセス
  4. Piniaの永続化とDevtools
← Vue Academyに戻る