Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Nuxt 3ではじめるテスト導入戦略と初手
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
hacomono Inc.
PRO
November 22, 2024
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Nuxt 3ではじめるテスト導入戦略と初手
hacomono Inc.
PRO
November 22, 2024
More Decks by hacomono Inc.
See All by hacomono Inc.
マルチプロダクトを支えるSelf-service基盤構築の軌跡
hacomono
PRO
0
49
師匠と弟子が「現場」で戦う —フルリモート時代のプロダクトエンジニアJEDI育成プログラムの全貌
hacomono
PRO
0
630
10人は喜んでも、10万人は喜ばない。 10万人の”来たい”を、構造で作る。
hacomono
PRO
0
110
正しく凹む技術:運動で感情を GC(ガベージコレクション )しよう
hacomono
PRO
1
290
開発者の認知負荷軽減を目指して選んだCrossplane - Self-serviceの理想と現実
hacomono
PRO
0
430
クラウドネイティブ DB はいかにして制約を 克服したか? 〜進化歴史から紐解く、スケーラブルアーキテクチャ設計指針〜
hacomono
PRO
8
2k
AI ネイティブな開発プロセスを目指して ~田中のローカルmac編~
hacomono
PRO
1
110
新規事業×QAの挑戦:不確実性を乗りこなす!フェーズごとに求められるQAの役割変革
hacomono
PRO
0
710
テストプロセスにおけるAI活用 :人間とAIの共存
hacomono
PRO
0
660
Featured
See All Featured
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
540
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Six Lessons from altMBA
skipperchong
29
4.5k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Transcript
Nuxt 3で始めるテスト導入戦略と初手 Vue Fes Japan 2023 スポンサーセッション 野崎 才門 1
野崎 才門 / Saimon Nozaki • 株式会社 hacomono プロダクト開発本部 POSグループ
• hacomonoは2社目 • 前職から一貫して金融・決済サービス の開発に関わっています 自己紹介 2
section 0 hacomonoについて 3
4
5
None
None
section 1 hacomonoが提供するPOSレジ 8
hacomonoが提供するPOSレジ 予約決済 商品購入 予約 売上確認 会員 サイト 管理者 サイト POS
レジ 9
レジ バーコード リーダー レシート プリンター キャッシュド ロワー 10
section 2 アプリケーション構成 11
アプリケーション構成 iOS フロントエンド バックエンド ユーザ 構成の詳しい説明は、弊社ブログに記載 Capacitorプラグインで実現する、 Nuxt 3のハードウェア連携 Nuxt
3 WebView 経由 12
アプリケーション構成 useMember - selectMember - unselectMember - current … SearchMember
Modal plan.vue 状態の操作だけでなく 純粋な関数も含む - useState<’member’> Components Composables Pages API Issue Tracker HardWares … 13
アプリケーション構成 14 composablesは ”知識” の単位で分割されている member license cart purchase goodsItem
componentsやpagesから 関数呼び出しを通じて オブジェクトを取得するだけ 15 アプリケーション構成
section 3 課題感とアクション 16
課題感とアクション • hacomonoと共用する会計金額の計算 • 売上のCRUD • 点検・精算など各種締め処理 … • 入力・確認モーダルの制御
• 条件に応じたコンポーネントの活性制御 • データのフェッチと変換 … 17 「テスト不足」フロントエンドとバックエンドで少し違う
課題感とアクション • hacomonoと共用する会計金額の計算 • 売上のCRUD • 点検・精算など各種締め処理 … • 入力・確認モーダルの制御
• 条件に応じたコンポーネントの活性制御 • データのフェッチと変換 … 「テスト不足」フロントエンドとバックエンドで少し違う パターンをできるだけ 網羅したい! テストがない!できない! 18
課題感とアクション composablesにユニットテストを書けるようにする • フロントエンドにも状態の操作や値のチェック、表示の制御に使うロジック など 「ドメイン知識」をcomposablesに寄せる アーキテクチャ • composablesにテストが書かれていることで主要な操作に対する リグレッションの保護をかけることができるようになるはず
19
section 4 composablesへの ユニットテストの導入 20
composablesへのユニットテストの導入 VitestでNuxt 3のなにがしかのモジュールをテストしたい 場合、Nuxtの提供するAuto-importsの仕組みを突破・回避する 必要がある 従前よりNuxtの環境でもcomposablesやserverにテストを書きたいNuxtユーザがいたらしい。 2023年10月時点でもOpenになっている。 21
composablesへのユニットテストの導入 @danielroe 氏によって開発されたnuxt-vitestがNuxt 3でも 3.6.2にて導入されたため、試すことに https://github.com/danielroe/nuxt-vitest 22
composablesへのユニットテストの導入 https://github.com/nuxt/nuxt/pull/21884 https://github.com/nuxt/nuxt/releases/tag/v3.6.2 弊社では、nuxt-vitestの検証時にNuxt 3のバージョンを3.6.2以 上にアップデートする対応も含めていた 23
登場するテストコードなどのサンプル一式 composablesへのユニットテストの導入 https://github.com/simonNozaki/nuxt-unit-testing 24
補足: Why Vitest? composablesへのユニットテストの導入 • Nuxt 3はViteでバンドルや dev server起動を行っている ため、Vitestを少ない設定で
導入できる。 • テストの実行や結果確認に 便利なvitest-uiを 簡単に入れられる 25
nuxt-vitestはパッケージの追加と簡単なconfigのみで導入可能 composablesへのユニットテストの導入 vitest.config.ts 26
composablesのテストを追加(一般的なVitestと同じ書き方) composablesへのユニットテストの導入 useMember.spec.ts 27 useMember.spec.ts useMember.ts
apiコールも registerEndpoint でモックできる composablesへのユニットテストの導入 28
composablesへのユニットテストの導入 とはいえ、少しだけトラブルも... • composablesの中で依存している、他のcomposablesをモックする際に mockImportがうまく動かないときがある 29
composablesへのユニットテストの導入 vitestの vi.mock を素で書いて回避! 30
composablesへのユニットテストの導入 とはいえ、少しだけトラブルも... • 2023年10月時点ではvitest 0.34.0 以上とは互換性がない ◦ vitest 0.33.xとの組み合わせ に固定する必要がある
31
section 5 テスト導入のその先 32
1. 修正に対する心理的な負担感が小さくなった テスト導入のその先 • CIでもデータパターンを確認でき、「なんとなく壊れてそうで不 安」の懸念がぐっと減った! 33
2. 「フロントエンドでもテストを書く」機運が高まった テスト導入のその先 • 全社的な文脈も相まって、新規実装でも「テストをかけるなら 書き足すべき」という機運が高まった! 34
3. テストピラミッドが構築できる テスト導入のその先 • 意図せずテストピラミッドを積み上げる初手になった! (ユニットテストは実行速度と決定性に優れ、特にコスパが高い) E2E インテグレーション ユニット composables
35
インタラクションテストの導入をやる!!! テスト導入のその先 • composablesに対するユニットテストは、ドメインの色をもったロジックに対 するテストがスコープ • あるアクションをした際の表示や表示の制御に対するテストは別の方法 (具体的にはStorybook)でアプローチ予定 36
37