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.jsでCompositionAPIを使う
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
kubotak
February 25, 2020
Programming
1.1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Nuxt.jsでCompositionAPIを使う
Roppongi.vue#5 LT
kubotak
February 25, 2020
More Decks by kubotak
See All by kubotak
ハーネスエンジニアリング白書
kubotak
0
54
Laravelにはdeleted_atがありますけど?
kubotak
2
94
PHPでWebSocketサーバーを実装しよう2025
kubotak
0
2.1k
情報漏洩させないための設計
kubotak
6
3.1k
Svelteコンポーネントの依存関係に秩序を〜
kubotak
0
230
DMARCレポート可視化ツールを SvelteKitで作った話
kubotak
2
660
Superforms本番投入で分かった良さとハマりどころ
kubotak
0
1.1k
Storybookを書くだけでリグレッションテストが 実行される世界へようこそ
kubotak
31
12k
(うまくいった||いかなかった) 技術選定は何を考えていたか
kubotak
1
1.5k
Other Decks in Programming
See All in Programming
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
290
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
130
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.4k
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.4k
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
6.9k
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
900
The NotImplementedError Problem in Ruby
koic
1
880
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
800
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
260
Agentic UI
manfredsteyer
PRO
0
190
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
180
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
210
Featured
See All Featured
Marketing to machines
jonoalderson
1
5.5k
Statistics for Hackers
jakevdp
799
230k
The Pragmatic Product Professional
lauravandoore
37
7.3k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Tell your own story through comics
letsgokoyo
1
960
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
150
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
160
The Cost Of JavaScript in 2023
addyosmani
55
10k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Deep Space Network (abreviated)
tonyrice
0
210
Transcript
Copyright © M&A Cloud All rights reserved. Roppongi.vue #5 @KenjiroKubota
Nuxt.jsでCompositionAPIを使う 1
Copyright © M&A Cloud All rights reserved. Profile 2 久保田
賢二朗 kubotak-is kubotak_public kenjiro.kubota 株式会社M&Aクラウド所属 PHP JavaScript Go Scala
Copyright © M&A Cloud All rights reserved. 3 PR
Copyright © M&A Cloud All rights reserved. 前置き 4 LaravelからNuxt.jsへ
Laravel(PHP)で作られたサイトをNuxt.jsに移行 LaravelでHTTP APIを作成し、Nuxt.jsでフロントエンドを作る ❏ フロントエンドはVue.jsを使っていたので学習コストが低いだろうと Nuxt.jsを選定 ❏ 型安全の恩恵を受けるためにTypescriptで開発 ❏ Vue.js version3で導入が決まっているCompositionAPIを利用
Copyright © M&A Cloud All rights reserved. 前置き 5 Composition
APIについては詳しく話さない もうみんな耳にタコができるくらい聞いていると思うのでCompositionAPIについ ては詳しく話しません。
Copyright © M&A Cloud All rights reserved. お品書き Nuxt.js +
CompositionAPI 6 1 Nuxt.js + Typescript + Composition API 2 Nuxt.js + Vuex 3 Vuex + CompositionAPI
Copyright © M&A Cloud All rights reserved. Nuxt.js + Typescript
7 Typescript Nuxt.jsをTypescriptで開発する ためにNuxt Typescriptを利用し てスケルトンを作成
Copyright © M&A Cloud All rights reserved. Nuxt.js + Composition
API 8
Copyright © M&A Cloud All rights reserved. Nuxt.js + Composition
API 9 pluginsディレクトリにこんな感じのファイルを作成
Copyright © M&A Cloud All rights reserved. Nuxt.js + Composition
API 10 nuxt.config.tsのpluginsに作成したファイルを指定
Copyright © M&A Cloud All rights reserved. Nuxt.js + Composition
API 11
Copyright © M&A Cloud All rights reserved. Nuxt.js + Composition
API 12 SFCで普通にComposition APIが利用できる ※2020/02現在ではCompositionAPIライブラリが必須
Copyright © M&A Cloud All rights reserved. Nuxt.js + Composition
API 13 @nuxt/types/app/vue.d.tsにNuxt.js特有のSFCプロパティ の定義があるのでTypescriptの恩恵を受けられる
Copyright © M&A Cloud All rights reserved. 14 (o`・ω・´σ)σ 普通に使えそうやん と思ったが
Copyright © M&A Cloud All rights reserved. 15 (o`・ω・´σ)σ 普通に使えそうやん と思ったが
そんなことはなかった _:(´ཀ`」 ∠):
Copyright © M&A Cloud All rights reserved. Nuxt.js + Composition
API 16 Nuxt.js + Composition APIの問題点 Nuxtはサーバーサイドレンダリングの際に、サーバーサイドで取得し たデータをHTMLのscriptタグにwindow.__NUXT__.~に出力して、ク ライアントサイドでステートをマッピングすることができるが CompositionAPIを利用した際にはうまく出力されなかった・・・ (書き方を間違えているかもしれないのでホントはできるぞという方は 後で連絡ください)
Copyright © M&A Cloud All rights reserved. Nuxt.js + Composition
API 17 Nuxt.js + Composition APIの問題点 templateに埋め込んでHTMLとしてサーバーサイドレンダリングはされ るのでSEOとしては利用できるが、その出力した変数情報は空になって しまうのでAPI通信などでデータ取得してる場合はクライアントサイド でも再度取得しなければならない・・・
Copyright © M&A Cloud All rights reserved. 18 ( ー`дー´) ならばVuex
Copyright © M&A Cloud All rights reserved. Nuxt.js + Vuex
19 Nuxt.jsにはVuexコアが組み込まれている Vuexについてはみなさんもうご存知と思うので詳しく説明しません。 Nuxt.jsではstoreディレクトリにあるファイルをVuexとしてインポート する仕組みを持っている。 ここで状態管理がされたステートはwindow.__NUXT__.~を利用してク ライアントサイドでステートを引き継ぐことができる
Copyright © M&A Cloud All rights reserved. Nuxt.js + Vuex
20 VuexとTypescript Nuxt.jsでVuexをTypescriptで扱う場合は大きく以下の2パタンある • クラスベース • Vanilla
Copyright © M&A Cloud All rights reserved. Nuxt.js + Vuex
21 クラスベース vuex-module-decorators を利用する
Copyright © M&A Cloud All rights reserved. Nuxt.js + Vuex
22 Vanilla Vuexに用意されている型 定義を利用して素朴に記 述する
Copyright © M&A Cloud All rights reserved. 23 クラスベースに慣れてないので Vanillaを採用
Copyright © M&A Cloud All rights reserved. Nuxt.js + Vuex
24 nuxt-typed-vuex Vuexで型定義の恩恵を受けられるライブラリがあるらしいが検証でき てない(懇親会があったら聞きたかった・・・!)
Copyright © M&A Cloud All rights reserved. 25 ( ゚д゚
)あれ? Composition APIは?
Copyright © M&A Cloud All rights reserved. Vuex + Composition
API 26 SFC Composition API Vuex SFCから直接Vuexにdispatchやgettersを実行せず、CompisitionAPI側 にVuexとの接続を隠蔽
Copyright © M&A Cloud All rights reserved. Vuex + Composition
API 27 なぜCompositionAPIを挟むのか • 現状でVuexとのやりとりが文字ベースなので型情報が失われるの でCompositionAPIで型を定義し直す ◦ nuxt-typed-vuexで解決するかも • SFCが依存するものをCompositionAPIだけに制限したい • 将来的にサーバーとクライアントのステート共有が CompositionAPIだけになったらいいなという期待 • クライアントサイドだけで非同期通信して値を取得する場合は Vuexを使わず、CompositionAPIだけで完結させている
Copyright © M&A Cloud All rights reserved. Vuex + Composition
API 28
Copyright © M&A Cloud All rights reserved. Vuex + Composition
API 29 Vuexを利用している場合はCompositionAPIは右から左に バケツリレーするだけ
Copyright © M&A Cloud All rights reserved. Vuex + Composition
APIのテスト 30 先程の構成のCompositionAPIをテストする(Jest)
Copyright © M&A Cloud All rights reserved. Vuex + Composition
APIのテスト 31 LocalVueにVuexとCompositionAPIを登録
Copyright © M&A Cloud All rights reserved. Vuex + Composition
APIのテスト 32 VuexStoreの登録
Copyright © M&A Cloud All rights reserved. Vuex + Composition
APIのテスト 33 モジュールモードで登録されるように加工
Copyright © M&A Cloud All rights reserved. Vuex + Composition
APIのテスト 34 APIレスポンスのモックを作成
Copyright © M&A Cloud All rights reserved. Vuex + Composition
APIのテスト 35 モックの差し込み
Copyright © M&A Cloud All rights reserved. Vuex + Composition
APIのテスト 36 簡単でしたね?
Copyright © M&A Cloud All rights reserved. まとめ 37 まとめ
• Nuxt.js+CompositionAPIはサーバーサイドとクライアントサイド でのステート共有においてまだ使えないが、既存の仕組み(Vuex) と組み合わせることで問題なく使える • 懇親会で色々聞きたかった人生
Copyright © M&A Cloud All rights reserved. 38