Slide 1

Slide 1 text

©2024 Social Databank, Inc. Piniaの現状と今後 ソーシャルデータバンク株式会社 若原 緑

Slide 2

Slide 2 text

2 ©2024 Social Databank, Inc. 名前 ● 若原 緑 趣味 ● ポメラニアンと散歩 自己紹介

Slide 3

Slide 3 text

©2024 Social Databank, Inc. 00 会社紹介

Slide 4

Slide 4 text

©2024 Social Databank, Inc.

Slide 5

Slide 5 text

©2024 Social Databank, Inc. 01 Piniaの紹介

Slide 6

Slide 6 text

©2024 Social Databank, Inc. ?

Slide 7

Slide 7 text

©2024 Social Databank, Inc.

Slide 8

Slide 8 text

©2024 Social Databank, Inc.

Slide 9

Slide 9 text

10 ©2024 Social Databank, Inc. 下記の特徴を持つ、Vue公式推薦の状態管理ライブラリ ● 💡 Intuitive ● 🔑 Type Safe ● ⚙ Devtools support ● 🔌 Extensible ● 🏗 Modular by design ● 📦 Extremely light Pinia🍍とは https://github.com/vuejs/pinia?tab=readme-ov-file#pinia

Slide 10

Slide 10 text

11 ©2024 Social Databank, Inc. ● Piniaの状態がDevtoolsで見れる ● 状態をJSONで読み書きができる ⚙ Devtools supportとは

Slide 11

Slide 11 text

12 ©2024 Social Databank, Inc. ⚙ Nuxt上のDevtools support

Slide 12

Slide 12 text

13 ©2024 Social Databank, Inc. ● ストアに新しいプロパティや関数を追加する ● 「自動的にLocal Storageに同期する」のような 副作用を追加できる https://pinia.vuejs.org/core-concepts/plugins.html ● 例 ○ pinia-orm ○ persistedstate 🔌 Extensibleとは

Slide 13

Slide 13 text

©2024 Social Databank, Inc. 02 Piniaの使い方

Slide 14

Slide 14 text

15 ©2024 Social Databank, Inc. ① 導入

Slide 15

Slide 15 text

©2024 Social Databank, Inc. 16 Setup Store ● 型安全 ● injectやwatchを使 える ● 柔軟にコードがかけ る Options Store 2種類のStore ● 型安全

Slide 16

Slide 16 text

17 ©2024 Social Databank, Inc. ② ストアの定義 (Setup Store)

Slide 17

Slide 17 text

18 ©2024 Social Databank, Inc. ②′ ストアの定義 (Options Store)

Slide 18

Slide 18 text

19 ©2024 Social Databank, Inc. ③ 利用

Slide 19

Slide 19 text

©2024 Social Databank, Inc. 03 Piniaの中の実装

Slide 20

Slide 20 text

21 ©2024 Social Databank, Inc. Piniaを構成するVueの要素 Provide / Inject effectScope

Slide 21

Slide 21 text

22 ©2024 Social Databank, Inc. Provide / Inject とは? Provide / Inject https://ja.vuejs.org/guide/components/provide-inject どこでも状態の受け渡しができます 受け渡しをアプリケーション全体か、子 孫コンポーネント限定に設定できます

Slide 22

Slide 22 text

23 ©2024 Social Databank, Inc. これだけでいいのでは? Provide / Inject https://ja.vuejs.org/guide/components/provide-inject そんなことない! provide / injectでは、computedや watchができないです!

Slide 23

Slide 23 text

24 ©2024 Social Databank, Inc. 通常Vueが自動的に作成し、破棄する watchやcomputedのスコープを、 自分で制御するための関数です effectScopeとは? effectScope https://vuejs.org/api/reactivity-advanced.html#effectscope

Slide 24

Slide 24 text

25 ©2024 Social Databank, Inc. 1. effectScope()でスコープオブジェクトを作成 2. 開発者が作成したStoreを保存するオブジェクト を作成 3. 1,2をアプリケーションレベルでprovide ざっくりcreatePinia

Slide 25

Slide 25 text

©2024 Social Databank, Inc.

Slide 26

Slide 26 text

27 ©2024 Social Databank, Inc. ● 初期化の場合、 1. Storeの中身はeffectScopeで囲う 2. Piniaのオブジェクトをinjectし、Storeを保存 3. Storeの内容を返す ● 初期化ではない場合、 1. Piniaのオブジェクトをinjectし、Storeを取り 出し内容を返す ざっくりdefineStore

Slide 27

Slide 27 text

©2024 Social Databank, Inc.

Slide 28

Slide 28 text

©2024 Social Databank, Inc.

Slide 29

Slide 29 text

30 ©2024 Social Databank, Inc. createSetupStoreの流れ 1. 内部状態の初期化(scope や isListening などの内部変数を初期化し、ストア内の状態変更やアクションに 関連するリスナーを管理します。) 2. $patchを定義($patch 関数は、状態を変更するためのメソッドです。オブジェクト全体を部分的にマージ したり、関数を使って状態を更新できます。この変更は、定義された購読リスナーに通知されます。) 3. $disposeを定義(このStoreのscopeを停止し、このStoreに関するsubscriptionを停止、Store自体をPinia のStoreから削除する) 4. $resetを定義(ただし、Setup Store且つ開発用ビルドならばエラーをだし、SetupStore且つ本番用ビルド なら何もしない) 5. アクションの定義(action 関数は、ストア内で定義されたアクションをラップし、実行時にそのアクショ ンが呼び出されたことを追跡できるようにしています。 $onAction メソッドを通じて、アクションが実行 された際にフックを追加できるようにします。) 6. createPiniaで呼んだEffectScopeを用いて、開発者がdefineStoreで渡した関数の中身をキャプチャーす る 7. Pinia内部のStoreに保存する 8. 1-6の内容をオブジェクトにまとめて、オブジェクトにして返す

Slide 30

Slide 30 text

©2024 Social Databank, Inc.

Slide 31

Slide 31 text

©2024 Social Databank, Inc. 作者謹製の学習コンテンツ https://masteringpinia.com/

Slide 32

Slide 32 text

©2024 Social Databank, Inc. 04 Piniaを使用する上での注意点

Slide 33

Slide 33 text

34 ©2024 Social Databank, Inc. ● stateの直接のgetterは不要 ● stateは必ず公開 ● $resetはOptions Storeのみ ● 分割代入に注意 Piniaを使用する上での注意点

Slide 34

Slide 34 text

35 ©2024 Social Databank, Inc. 󰢄 NOT GOOD 󰢄 ① stateの直接のgetterは不要

Slide 35

Slide 35 text

36 ©2024 Social Databank, Inc. 󰢐 GOOD 󰢐 ① stateの直接のgetterは不要

Slide 36

Slide 36 text

37 ©2024 Social Databank, Inc. 󰢄 BAD 󰢄 ② stateは必ず公開

Slide 37

Slide 37 text

38 ©2024 Social Databank, Inc. DevToolsのstateに表示されず、gettersも上の リロードボタンを押さないと最新の値にならない ② stateは必ず公開

Slide 38

Slide 38 text

39 ©2024 Social Databank, Inc. 隠したいstate等はStoreをネストさせる ② stateは必ず公開

Slide 39

Slide 39 text

40 ©2024 Social Databank, Inc. ⚠ ATTENTION ⚠ ③ $resetはOptions Storeのみ Options Storeでしか使えません

Slide 40

Slide 40 text

41 ©2024 Social Databank, Inc. ③ $resetはOptions Storeのみ 🤔 自分で作成する 🤔

Slide 41

Slide 41 text

42 ©2024 Social Databank, Inc. 󰢄 BAD 󰢄 ④ 分割代入に注意

Slide 42

Slide 42 text

43 ©2024 Social Databank, Inc. 󰢐 GOOD① 󰢐 ④ 分割代入に注意

Slide 43

Slide 43 text

44 ©2024 Social Databank, Inc. 󰢐 GOOD② 󰢐 ④ 分割代入に注意

Slide 44

Slide 44 text

45 ©2024 Social Databank, Inc. 󰢐 EXCELLENT!? 󰢐 ④ 分割代入に注意 https://zenn.dev/ytr0903/articles/18fe28b963a07c

Slide 45

Slide 45 text

©2024 Social Databank, Inc. 05 今後

Slide 46

Slide 46 text

©2024 Social Databank, Inc.

Slide 47

Slide 47 text

48 ©2024 Social Databank, Inc. フレキシブルにデータを取得して キャッシュしてくれる素敵なライブラリーです https://github.com/posva/pinia-colada https://uvr.esm.is/data-loaders/colada/ Pinia-collada

Slide 48

Slide 48 text

©2024 Social Databank, Inc. 完 ご清聴ありがとうございました ソーシャルデータバンクは エンジニアを募集しています!