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における設計
Search
Sigma
October 10, 2022
Programming
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Nuxtにおける設計
Sigma
October 10, 2022
More Decks by Sigma
See All by Sigma
Proxmox_VE.pdf
seiyasugimoto
0
230
Stable Diffusionで遊んでみた
seiyasugimoto
1
150
EVAフレームワーク
seiyasugimoto
0
120
SSR+SPA
seiyasugimoto
0
170
Atomic Designを ディレクトリ以外で表現
seiyasugimoto
0
94
throttleすげぇぇぇ
seiyasugimoto
0
89
スマホでPythonしたい
seiyasugimoto
0
76
平文で保存するな!
seiyasugimoto
0
100
ソースコードを読もう
seiyasugimoto
0
100
Other Decks in Programming
See All in Programming
Family mrubyの進捗
kishima
1
120
Java 27新機能 / Java 27 new features
kishida
2
140
SREの越境 / SRE Collaboration
y0hgi
0
110
自分的「カンファレンスの楽しみ方」
syumai
0
200
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
0
280
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
140
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
110
Security issues being discussed on Web Platforms
petamoriken
0
940
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
100
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
190
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
210
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
140
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
41k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Building Adaptive Systems
keathley
44
3.2k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
420
sira's awesome portfolio website redesign presentation
elsirapls
0
410
Bash Introduction
62gerente
615
220k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
230
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
590
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Why Our Code Smells
bkeepers
PRO
340
58k
Transcript
Nuxtにおける設計 Composition APIの影響
プロフィール • 25歳 • 男性 • シニア・エンジニア ◦ フロントエンド ◦
株式会社エヌエルプラス • 開発案件の初期から関わって設計から入ることが多い ◦ ファッション通販サイトのコミュニティサービス ◦ 医療関係の B to B to C サービス
現代のフロントエンドには設計が必要なんだ • フロントエンドは年々リッチになってきている。 ◦ ブラウザの性能が向上した。 ◦ アプリケーションのような UIのWebサービスを提供する企業が増加し、エンドユーザーもお客さんも そういったWebサービスを使っている。 •
フロントエンドでサービスを統合することも増えている。 ◦ Firebaseの各種サービスをフロントエンドから使う。 ◦ チャットシステムをフロントエンドから使う。 ◦ ヘッドレスCMSをフロントエンドから使う。 ◦ WebRTC関係のソリューションをフロントエンドから使う。
Nuxtにおける設計とCompositionAPIの影響 • Option API から Composition API • Nuxt とディレクトリ構造の考え方
• Composition API の設計への影響
ついに Nuxt3 が来た • Vue3 ベースの Nuxt3 がようやくパブリックベータになった! • ビルドツールとして
Vite が標準になった他、ようやく Nuxt で Composition API が 正式に使えるようになる🎉
Option API から Composition API に変わる • 言い換えれば ◦ Option
API: Vue のオブジェクトを拡張することで機能を実現する方法 ◦ Composition API: Vue オブジェクトに対する DI によって機能を実現する方法 • 現状よく使われている vue class decorator により近い Class API を提供する方法 も考えられたらしい ◦ stage2 proposal の Decorator を使う必要があり不確実らしい ◦ TSXサポートに課題が出てくるらしい ◦ rfcs/0013-composition-api.md at master · vuejs/rfcs · GitHub ◦ tc39/proposals: Tracking ECMAScript Proposals
template で使う変数や関数を setup() を通じて注入する
• テスタブル ◦ 純粋な TypeScript のコードを注入するので、注入するコードの単体テストが書きやすい • リユーザブル ◦ 純粋な
TypeScript のコードを注入するので、使い回しやすい • TypeScript サポート ◦ 外部ライブラリに頼らない TypeScript サポートを実現 Composition API の特徴
Nuxtを使ったフロントエンドのディレクトリ構造(抜粋) • layouts/ Nuxt の標準 layouts/default.vue は pages/ 以下のページコンポーネントにデフォルトで適用される。 •
components/ Nuxt の標準 • pages/ Nuxt の標準 pages/ 以下のディレクトリ構造に従って Vue Router のルーティングが生成される。 • services/ View を責務とするコンポーネント群を、 API スキーマやロジックの変更の影響から隔離するためのサービス層。 ◦ api/ それぞれの API 関係の関数、共通処理等 ◦ dataTransfer/ API スキーマからコンポーネントの要求するデータ型への変換 ◦ linkBuilder/ ID 等からリンクを生成するコード ◦ logic/ サービスロジック等 • errors/ フロントエンドのエラー処理 • validations/ バリデーションのルールとエラー • @types/ 型を置く • typeGuards/ 型ガードを置く
考え方 • layouts/ pages/ components/ 以下に直接書かれるロジックを最小限にする。これ らは View に関心を持っている。 •
components/ 以下のディレクトリ構造はコンポーネントの役割に基づいたものにす る。 ◦ atomic design 等に基づく粒度等の情報はドキュメント等に記載する。 • 上記以外のディレクトリは横断的関心事に基づいていることが多い。 ◦ コンポーネント内で起こるエラーのエラー処理 ◦ フォーム関係のコンポーネントのバリデーション ◦ API呼び出しとそれに関する共通処理
Composition API の設計への影響 • components/ 等 Vue のコンポーネントを記述するディレクトリでテストが書きやす い。 ◦
component/Hoge/Fuga.vue ◦ component/Hoge/FugaSetup.ts ◦ component/Hoge/FugaSetup.spec.ts ◦ というような形で単体テストが書ける • Vue のコンポーネントからロジックを剥がしやすい ◦ setupを書いている.tsファイルから切り出すだけ • 既存の方針を強化するように働いている
まとめ • Vue3 ベースの Nuxt3 がようやくリリース間近になったことで、 Nuxt にも Composition API
の波が来た • これまでの Nuxt では、 Vue のコンポーネントを書く場所とそれ以外を分けて考え、 横断的関心事を関数として切り出して特定のディレクトリにまとめる方法を取ってき た • Composition API はそういった方針を強化すると考えられる