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
Nuxtにおける設計
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
87
スマホでPythonしたい
seiyasugimoto
0
76
平文で保存するな!
seiyasugimoto
0
99
ソースコードを読もう
seiyasugimoto
0
100
Other Decks in Programming
See All in Programming
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
220
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
160
T3DD26: From RAGs to Riches
martinhelmich
0
100
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
220
Go 1.27 における memory allocation の高速化
andpad
0
340
Flow は今どうなっているか
mizdra
PRO
0
740
Press start. Python's next generation.
willingc
PRO
3
220
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
700
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
5
540
FastAPI の並行処理モデルを完全に理解する
hoto17296
8
3.1k
信頼性の目標を誰も求めてない
shubox
0
130
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.2k
Featured
See All Featured
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
Exploring anti-patterns in Rails
aemeredith
3
470
WCS-LA-2024
lcolladotor
0
810
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Code Reviewing Like a Champion
maltzj
528
40k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
670
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
500
How to Talk to Developers About Accessibility
jct
2
530
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
220
Designing for Timeless Needs
cassininazir
1
450
Speed Design
sergeychernyshev
33
2k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
290
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 はそういった方針を強化すると考えられる