Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
VuexからPinia移行に向けて
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ツノ
March 21, 2023
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
VuexからPinia移行に向けて
ツノ
March 21, 2023
More Decks by ツノ
See All by ツノ
エンジニア達の_完全に理解した_-コードでの契約ってなんだ_.pdf
2nofa11
1
200
Vite完全に理解した その1
2nofa11
2
310
年末年始に「chibivue」で Vueヂカラをつけた
2nofa11
0
290
「世界一流のエンジニアの思考法」 を完全に理解した
2nofa11
1
330
書籍「プログラマー脳」を完全に理解した
2nofa11
0
89
一か月半かけて、TypeScript本を写経した話
2nofa11
0
870
VueTestUtilbrのキホンの『キ』
2nofa11
0
180
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
400
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
Become a Pro
speakerdeck
PRO
31
6k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Transcript
Vuex から Pinia 移行に向けて ツノ:@2nofall
Pinia の前に:Vue の現状 多くのチームが Vue3 移行に悩むはず CLI ツール(VueCLI → Vite)
UI フレームワーク(Vuetify) 状態管理ライブラリ(Vuex → Pinia) その他の破壊的変更... 今回は状態管理ライブラリについて Vuex:Vue 公式のライブラリ(Vuex4 まで) Pinia:Vuex5 として開発
What's Pinia? Vue.js の直観的なストア※として、 公式では以下が挙げられています。 直感的 型 セーフ 開発ツールのサポート 拡張
設計によるモジュール式 非常に軽い ※ただし認知度が低い
Pinia の現状:認知度 LINE のフロントエンドエンジニアの技術調査アンケートでは、 Pinia はリリースされてしばらくたつが、「聞いたことがない」が半分近く Experience with libraries for
StateManagement in Vue:(UITSurvey2022)
Pinia の現状:利用度 「Vue での状態管理のためのライブラリの使用」の項目では、 10%程度となかなか浸透されていない状態 Usage of libraries for state
management in Vue :(UITSurvey2022)
Pinia を使ってみて:Store 定義 Vue の Options や Composition っぽい書き方ができる Store、Getter、Action
を定義できる 例:Composition での書き方 export const useCounterStore = defineStore("counter", () => { const count = ref<number>(0); // Store const doubleCount = computed(() => count.value * 2); // Getter function increment() { count.value++; // Action } return { count, doubleCount, increment }; });
Pinia を使ってみて:Store 呼び出し Store を import して呼び出すだけで利用できる Store をリアクティブに使いたい場合は storeToRefs(store)
を利用 <script setup lang="ts"> import { useCounterStore } from "./HelloWorld.store"; const store = useCounterStore(); </script> <template> <h1 v-text="store.name" /> <button type="button" @click="store.increment()"> count is {{ store.count }} </button> </template>
Pinia を使ってみて:テスト @pinia/testing の createTestingPinia をマウント時に定義 Action のみ Mock したりできる。Vuex
より柔軟にテストが書けそう。 const wrapper = mount(HelloWorld, { global: { plugins: [ createTestingPinia({ initialState: { counter: { count: 100 } } }), ], }, }); const store = useCounterStore(); // Store呼び出し const incrementSpy = vi.spyOn(store, "increment"); // モック化 incrementSpy.mockImplementation(() => (store.count += 2)); wrapper.find("button").trigger("click"); expect(wrapper.text()).toContain("count is 102");
Pinia を使ってみて:所感 わかった点 Mutation が廃止され、直観的な操作に IDE による入力補完が便利 テストの幅が広がる キャラに愛着が沸く 難しかった点
日本語の情報が少ない(公式含む) Vuex と違いすぎて戸惑う部分がある
Vuex から Pinia への移行 手順 公式 Options にマイグレーションを推奨 → Options
への移行はステップごとに説明 Mutation 廃止によるモジュール再構築発生 懸念点 グローバルな状態を移行する影響範囲怖い テスト作る工数に時間とられそう
EOF