Submit Search
Upload
はじめようVue3!とらのあなラボのフロントエンドを学ぶ(藤原)
•
0 likes
•
359 views
虎の穴 開発室
Follow
虎の穴ラボテックカンファレンスVol1での発表資料です。 サンプルソースはこちら https://github.com/toranoana/vue3-handson
Read less
Read more
Software
Report
Share
Report
Share
1 of 51
Download now
Download to read offline
Recommended
Vue3でアプリ開発してみて 困ったこと4選
Vue3でアプリ開発してみて 困ったこと4選
虎の穴 開発室
Prepositions
Prepositions
David Hughes
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
Harivansh rai bachchan
Harivansh rai bachchan
shalinishrivastava
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
Compound and complex sentence review
Compound and complex sentence review
misteralpert
ソフトウェアエンジニアに知ってほしいAerospike
ソフトウェアエンジニアに知ってほしいAerospike
株式会社ジオロジック
DDD Alliance レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡
DDD Alliance レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡
BIGLOBE Inc.
Recommended
Vue3でアプリ開発してみて 困ったこと4選
Vue3でアプリ開発してみて 困ったこと4選
虎の穴 開発室
Prepositions
Prepositions
David Hughes
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
Harivansh rai bachchan
Harivansh rai bachchan
shalinishrivastava
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
Compound and complex sentence review
Compound and complex sentence review
misteralpert
ソフトウェアエンジニアに知ってほしいAerospike
ソフトウェアエンジニアに知ってほしいAerospike
株式会社ジオロジック
DDD Alliance レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡
DDD Alliance レガシーなコードにドメイン駆動設計で立ち向かった5年間の軌跡
BIGLOBE Inc.
ドメイン駆動開発 勉強会 ①
ドメイン駆動開発 勉強会 ①
Kakeru Kikuchi
three.jsを「遅い」と思わせないデータの扱い方
three.jsを「遅い」と思わせないデータの扱い方
jey en
DynamoDBのテーブル設計手法.pptx
DynamoDBのテーブル設計手法.pptx
Tetsuya Wada
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Construindo um Context Map
Construindo um Context Map
Fabrício Rissetto
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
増田 亨
Syntax gerunds and infinitives
Syntax gerunds and infinitives
Ishisu Kurow
Django for IoT: From hackathon to production (DjangoCon US)
Django for IoT: From hackathon to production (DjangoCon US)
Anna Schneider
Bowtie: Interactive Dashboards
Bowtie: Interactive Dashboards
Jacques Kvam
Lewis brady engine_terminology (edited version)
Lewis brady engine_terminology (edited version)
LewisB2013
Unity3d scripting tutorial
Unity3d scripting tutorial
hungnttg
20210809 story book_driven_new_system_development_nuxtjs
20210809 story book_driven_new_system_development_nuxtjs
虎の穴 開発室
How to create your own Volto site!
How to create your own Volto site!
Rob Gietema
Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.
Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.
VitaliyMakogon
Testing of javacript
Testing of javacript
Lei Kang
Pure Functions and Immutable Objects
Pure Functions and Immutable Objects
Victor Rentea
JDD2015: Frege - Introducing purely functional programming on the JVM - Dierk...
JDD2015: Frege - Introducing purely functional programming on the JVM - Dierk...
PROIDEA
Buildout: creating and deploying repeatable applications in python
Buildout: creating and deploying repeatable applications in python
CodeSyntax
Game programming with Groovy
Game programming with Groovy
James Williams
JetBot basic motion
JetBot basic motion
PeiJia5
Volto Extensibility Story: Plone Conference 2018
Volto Extensibility Story: Plone Conference 2018
Rob Gietema
More Related Content
What's hot
ドメイン駆動開発 勉強会 ①
ドメイン駆動開発 勉強会 ①
Kakeru Kikuchi
three.jsを「遅い」と思わせないデータの扱い方
three.jsを「遅い」と思わせないデータの扱い方
jey en
DynamoDBのテーブル設計手法.pptx
DynamoDBのテーブル設計手法.pptx
Tetsuya Wada
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Construindo um Context Map
Construindo um Context Map
Fabrício Rissetto
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
増田 亨
Syntax gerunds and infinitives
Syntax gerunds and infinitives
Ishisu Kurow
What's hot
(8)
ドメイン駆動開発 勉強会 ①
ドメイン駆動開発 勉強会 ①
three.jsを「遅い」と思わせないデータの扱い方
three.jsを「遅い」と思わせないデータの扱い方
DynamoDBのテーブル設計手法.pptx
DynamoDBのテーブル設計手法.pptx
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Construindo um Context Map
Construindo um Context Map
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
Syntax gerunds and infinitives
Syntax gerunds and infinitives
Similar to はじめようVue3!とらのあなラボのフロントエンドを学ぶ(藤原)
Django for IoT: From hackathon to production (DjangoCon US)
Django for IoT: From hackathon to production (DjangoCon US)
Anna Schneider
Bowtie: Interactive Dashboards
Bowtie: Interactive Dashboards
Jacques Kvam
Lewis brady engine_terminology (edited version)
Lewis brady engine_terminology (edited version)
LewisB2013
Unity3d scripting tutorial
Unity3d scripting tutorial
hungnttg
20210809 story book_driven_new_system_development_nuxtjs
20210809 story book_driven_new_system_development_nuxtjs
虎の穴 開発室
How to create your own Volto site!
How to create your own Volto site!
Rob Gietema
Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.
Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.
VitaliyMakogon
Testing of javacript
Testing of javacript
Lei Kang
Pure Functions and Immutable Objects
Pure Functions and Immutable Objects
Victor Rentea
JDD2015: Frege - Introducing purely functional programming on the JVM - Dierk...
JDD2015: Frege - Introducing purely functional programming on the JVM - Dierk...
PROIDEA
Buildout: creating and deploying repeatable applications in python
Buildout: creating and deploying repeatable applications in python
CodeSyntax
Game programming with Groovy
Game programming with Groovy
James Williams
JetBot basic motion
JetBot basic motion
PeiJia5
Volto Extensibility Story: Plone Conference 2018
Volto Extensibility Story: Plone Conference 2018
Rob Gietema
HPC Examples
HPC Examples
Wendi Sapp
How to Use Telegraf and Its Plugin Ecosystem
How to Use Telegraf and Its Plugin Ecosystem
InfluxData
Dissecting BetaBot
Dissecting BetaBot
securityxploded
GDSC NCU Flutter
GDSC NCU Flutter
NCUDSC
Immutable infrastructure & Rethinking Configuration PREVIEW
Immutable infrastructure & Rethinking Configuration PREVIEW
rhirschfeld
Immutable infrastructure & Rethinking Configuration
Immutable infrastructure & Rethinking Configuration
RackN
Similar to はじめようVue3!とらのあなラボのフロントエンドを学ぶ(藤原)
(20)
Django for IoT: From hackathon to production (DjangoCon US)
Django for IoT: From hackathon to production (DjangoCon US)
Bowtie: Interactive Dashboards
Bowtie: Interactive Dashboards
Lewis brady engine_terminology (edited version)
Lewis brady engine_terminology (edited version)
Unity3d scripting tutorial
Unity3d scripting tutorial
20210809 story book_driven_new_system_development_nuxtjs
20210809 story book_driven_new_system_development_nuxtjs
How to create your own Volto site!
How to create your own Volto site!
Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.
Vitaliy Makogon: Migration to ivy. Angular component libraries with IVY support.
Testing of javacript
Testing of javacript
Pure Functions and Immutable Objects
Pure Functions and Immutable Objects
JDD2015: Frege - Introducing purely functional programming on the JVM - Dierk...
JDD2015: Frege - Introducing purely functional programming on the JVM - Dierk...
Buildout: creating and deploying repeatable applications in python
Buildout: creating and deploying repeatable applications in python
Game programming with Groovy
Game programming with Groovy
JetBot basic motion
JetBot basic motion
Volto Extensibility Story: Plone Conference 2018
Volto Extensibility Story: Plone Conference 2018
HPC Examples
HPC Examples
How to Use Telegraf and Its Plugin Ecosystem
How to Use Telegraf and Its Plugin Ecosystem
Dissecting BetaBot
Dissecting BetaBot
GDSC NCU Flutter
GDSC NCU Flutter
Immutable infrastructure & Rethinking Configuration PREVIEW
Immutable infrastructure & Rethinking Configuration PREVIEW
Immutable infrastructure & Rethinking Configuration
Immutable infrastructure & Rethinking Configuration
More from 虎の穴 開発室
FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化
虎の穴 開発室
Railsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認する
虎の穴 開発室
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴 開発室
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
虎の穴 開発室
toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明
虎の穴 開発室
Deno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介します
虎の穴 開発室
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
虎の穴 開発室
GCPの画像認識APIの紹介
GCPの画像認識APIの紹介
虎の穴 開発室
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
虎の穴 開発室
GitHub APIとfreshで遊ぼう
GitHub APIとfreshで遊ぼう
虎の穴 開発室
通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」
虎の穴 開発室
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
虎の穴 開発室
セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説
虎の穴 開発室
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
虎の穴 開発室
Amplify Studioを使ってみた
Amplify Studioを使ってみた
虎の穴 開発室
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!
虎の穴 開発室
【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ
虎の穴 開発室
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴 開発室
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
虎の穴 開発室
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴 開発室
More from 虎の穴 開発室
(20)
FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化
Railsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認する
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明
Deno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介します
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
GCPの画像認識APIの紹介
GCPの画像認識APIの紹介
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
GitHub APIとfreshで遊ぼう
GitHub APIとfreshで遊ぼう
通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
Amplify Studioを使ってみた
Amplify Studioを使ってみた
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!
【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
Recently uploaded
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
harshavardhanraghave
What is Binary Language? Computer Number Systems
What is Binary Language? Computer Number Systems
JheuzeDellosa
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
bodapatigopi8531
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
ABDERRAOUF MEHENNI
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
joe51371421
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
kaushalgiri8080
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
kalichargn70th171
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
OnePlan Solutions
DNT_Corporate presentation know about us
DNT_Corporate presentation know about us
Dynamic Netsoft
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
aagamshah0812
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
kalichargn70th171
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
anilsa9823
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
Jhone kinadey
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
SolGuruz
Software Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
Arshad QA
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
ThousandEyes
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Christina Lin
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
AxelRicardoTrocheRiq
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
kellynguyen01
Recently uploaded
(20)
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
What is Binary Language? Computer Number Systems
What is Binary Language? Computer Number Systems
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
DNT_Corporate presentation know about us
DNT_Corporate presentation know about us
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
Software Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
はじめようVue3!とらのあなラボのフロントエンドを学ぶ(藤原)
1.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. はじめようVue3! とらのあなラボのフロントエンドを学ぶ 虎の穴ラボ 藤原 佳顕 1
2.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. 2 Twitterへのご投稿は、 #とらラボ3 でお願いします! 質問、感想・コメント等 ※ LT内容に関する ご質問はYoutubeコメントにお願いします🙏
3.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. アジェンダ ● 自己紹介 ● なぜVue(3)か ● とらのあなラボでのVue(3)活用 ● 今回利用する環境について ● Vue3の紹介 ● まとめ 3
4.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. 自己紹介 ● 名前:藤原 佳顕 ● 所属:虎の穴ラボ ● やっていること:(Fantia、)新規サービス、社内ツール、ソースレビュー ● 好きなもの:RustとかClojureとかDenoとか ● 好きなもの2:STG、音ゲー、格ゲー 4
5.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. なぜVue3か ● 一時期のフレームワークが群雄割拠していた時代に比べて、ほぼReact、Vue、Angularの いずれかで安定している ● とはいえ、ライブラリ、フレームワーク自体のアップデートはそれなりに早い ○ ソースの記述が古くなる可能性が高い ○ 安定している or するだろうものであれば取り入れてしまったほうが良い ● 周辺ツールも同様の傾向 ○ Vue3から推奨ツールがvue cli→viteに 5
6.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. 虎の穴ラボでのVue(3)活用 6 ● 新規プロジェクト(Nuxt.js) ● 社内の稼働時間管理ツール(Vue2→Vue3) ○ Vue2(Vue class component)からVue3にアップデート ● 社内のプロジェクト管理ツール(Vue3) ○ 作成段階からcomposition apiを利用
7.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. 虎の穴ラボでのVue(3)活用 7
8.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. 虎の穴ラボでのVue(3)活用 8 https://github.com/toranoana/wbs-front, https://github.com/toranoana/wbs-back
9.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. 虎の穴ラボでのVue(3)活用 9
10.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. 今回利用する環境 10 ● macOS Big Sur ● TypeScript v4.1.3 ● Node.js 14.17.0 ● Vue 3.0.5 ● Vite 2.3.3
11.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. このセッションについて 11 ● 発表者が良いと思ったVue3の機能を紹介していきます ● メインの対象者 ○ フロントエンドあまり触ったこと無い方 ○ Vue2はやってたけどVue3についてはあまり知らない方 ● 目標 ○ 実際にVue3でアプリを作るときに大抵のことでは困らなくなる ● ソースコードはこちら ○ https://github.com/toranoana/vue3-handson
12.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. vue 12 1. コンポーネントの基本 2. Composition APIについて 3. Suspenseについて 4. Fragmentsについて 5. Teleportについて 6. jsxについて
13.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. コンポーネントの基本 13 ● Vue.jsはWebコンポーネントとVirtual DOMを軸にしたフレームワークです ○ Reactや、Angular(2以降)と似たフレームワークです ● *.vueという拡張子のファイルが画面の1パーツ(コンポーネント)となります。以下例です ○ Button.vue:ボタンのコンポーネント ○ Header.vue:ヘッダーのコンポーネント ○ App.vue:Button.vueとHeader.vueを組み合わせて画面を作るコンポーネント
14.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. コンポーネントの基本 14 <template> <div id="app"> <div id="nav"> <!-- router/index.tsにかかれているルーティング情報から自動で aタグを作る --> <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link> </div> <!-- ルーティングされたコンポーネントがここに描画される--> <router-view /> </div> </template> <script lang="ts"> import { defineComponent } from "vue"; export default defineComponent({ name: "App", }); </script>
15.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. コンポーネントの基本 15 App.vue router-link x 2 router-view HelloWorld.vue
16.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. 16
17.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. vue 17 1. コンポーネントの基本 2. Composition APIについて 3. Suspenseについて 4. Fragmentsについて 5. Teleportについて 6. jsxについて
18.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Composition APIについて ● setupメソッド ○ 各コンポーネントのエントリポイントとなるメソッド ○ 呼ばれた段階ではまだレンダリングされていない状態 ● reactive関数 ○ リアクティブなオブジェクトを作成できる ○ リアクティブな状態が変化するとビューが自動的に更新される ○ state.messageを更新すると、template側でstate.messageを使ってる部分も自動で変わる(後述) 18
19.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Composition APIについて <template> <div id="app"> <div id="nav"> <!-- 追加 --> <p>{{ state.message }}</p> <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link> </div> <router-view /> </div> </template> 19 <script lang="ts"> import { defineComponent, reactive } from "vue"; interface State { message: string; } export default defineComponent({ name: "App", setup() { const state = reactive<State>({ message: "Hello Sample" }); return { state }; } }); </script>
20.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. 20
21.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Composition APIについて 21 <script lang="ts"> import Vue from "vue"; interface State { message: string; } export default Vue.extend({ name: "App", data(): State { return { state: { message: "Hello Sample" } }; } }); </script> Vue2の場合
22.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Composition APIについて ● Vue2まではdataメソッドから返されるものが自動でreactiveになっていた ○ →reactive関数として明示的に定義するようになったのでわかりやすく ● setup関数内ですべての処理を完結できるようになった ○ Vue2までは暗黙のうちにthisにプロパティが生えていた ○ 単なる関数の実行になるので理解しやすくなった 22
23.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Composition APIについて ● 関数の作り方 ○ setup関数内で関数を作り、戻り値として返す ○ template内で@clickなどで関数をイベントを紐付けする ● 表示の更新について ○ reactiveで生成した変数を、関数内で更新すると自動でtemplate内の表示も変わる ○ element.innerHTMLなどを利用した直接的なDOM書き換えは不要 23
24.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Composition APIについて <template> <div id="app"> <div id="nav"> <p>{{state.message}}</p> <!-- 追加 --> <p> <button type="button" @click="onClick">メッセージを変更 </button> </p> <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link> </div> <router-view /> </div> </template 24
25.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Composition APIについて export default defineComponent({ name: "App", setup() { const state = reactive<State>({ message: "Hello Sample" }); const onClick = () => { state.message = "clicked"; }; return { state, onClick }; } }); 25
26.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Composition APIについて 26 <script lang="ts"> import Vue from "vue"; interface State { message: string; } export default Vue.extend({ name: "App", data(): State { return { state: { message: "Hello Sample" } }; }, methods: { onClick() { this.state.message = "clicked"; } } }); </script> Vue2の場合
27.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Composition APIについて ● 関数もsetup内でただの変数として定義できる ○ スコープがsetup関数内になるのでthisなどの暗黙のお約束ごとは出てこない ○ 同様にmethodsプロパティも不要 ○ 直感的 ● 関数と関数で扱う値をセットで他のファイルに書くこともできる(後述) ○ コンポーネントとロジックを分離することでソースファイルを整理できる 27
28.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Composition APIについて import { AppState, useAppState } from './utils'; type State = AppState export default defineComponent({ name: "App", components: { Sample, Async }, setup() { const [state, onClick] = useAppState(); return { state, onClick }; } }); 28 reactiveな値と、値を変更する処理を別ファイルに書くこともでき る例(utils.ts) import { reactive } from "vue"; export interface AppState { message: string; } export const useAppState = (): [AppState, () => void] => { const state = reactive<AppState>({ message: "Hello Sample", }); const onClick = () => { state.message = "clicked"; }; return [state, onClick]; };
29.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Composition APIについて ● computed ○ Vue2までのcomputed propertyと同様 ○ 監視対象から計算される値を作る関数をセットすることで、値が変わったときに自動で再実行してく れる ○ 値が変わらない間はキャッシュされるので何回呼び出しても大丈夫 ● watchEffect ○ 関数内で使ってる変数を全て自動的に監視し、変更があった場合に関数を再度実行する ● watch ○ 第1引数に与えた変数を監視し、第2引数の関数を呼び出す ○ 明示的にチェックする変数を決めたい場合はこちら ○ 他微妙に発火タイミング等の違いがある(特に初回) 29
30.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Composition APIについて <script lang="ts"> import { computed, watch, watchEffect, defineComponent, PropType, reactive, SetupContext, } from "vue"; interface State { localMessage: string; } export default defineComponent({ props: { parentMessage: { type: String, required: true, }, }, 30 値の監視をしたい場合 setup(props, { emit }: SetupContext) { const state = reactive<State>({ localMessage: "child component" }); const localFullMessage = computed( () => `localMessage: ${state.localMessage}` ); const parentFullMessage = computed( () => `parentMessage: ${props.parentMessage}` ); watchEffect(() => { alert(`localMessageかparentMessageが変更されました。 ${localFullMessage.value} ${parentFullMessage.value}` );}); watch(() => props.parentMessage, () => alert("parentMessageが変更されました。 ") ); return { state, emitClick, localFullMessage, parentFullMessage }; }, }); </script>
31.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Composition APIについて ● こちらも単なる関数(comuptedなど)の結果を変数として受けてそれを使うだけ ● watch系もコールバックをセットしているだけと考えれば理解しやすい ● computedで作った値をsetup関数内で扱うには.valueが必要なことは注意 ○ template内ではそのまま変数として使えるので混乱ポイント 31
32.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. vue 32 1. コンポーネントの基本 2. Composition APIについて 3. Suspenseについて 4. Fragmentsについて 5. Teleportについて 6. jsxについて
33.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Suspenseについて ● Suspense ○ レンダリング前の非同期処理を待ち受け、 待機中デフォルトテンプレートを表示する機能 ■ 主に非同期コンポーネントで利用(defineAsyncComponent) ○ ただし、まだ実験中の機能 ■ 安定したものを使いたい場合はasync/awaitではなくthenを使うなど工夫が必要 ● async setupについて ○ setup関数の事前処理などでAPIアクセスしたい場合かつawait使う場合に必要 ○ レンダリング前に発火されるので、setup関数自体の終了を待ち受けないといけない ■ Suspenseの利用が必要 33
34.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Suspenseについて <script lang="ts"> import { defineComponent, reactive } from "vue"; import axios from "axios"; export default defineComponent({ async setup() { const state = reactive<State>({ apiData: null }); const res = await axios.get<CurrentPrice>( "https://api.coindesk.com/v1/bpi/currentprice.json" ); state.apiData = res.data; return { state }; }, }); </script> 34 setup関数をasyncにしてawaitを使う場合は工夫が必要(Suspense) <template> <div id="app"> <!-- 略 --> <!-- Suspenseで囲むことで非同期コンポーネントの代替を表示--> <Suspense> <template #default> <async /> </template> <template #fallback> <div>loading...</div> </template> </Suspense> <!-- 略 --> </div> </template> (Async.vue) (App.vue)
35.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Suspenseについて ● フォールバックコンテンツを簡単に表示できるのはとても良い ○ シンタックスにも難しいところがない ● まだ安定してないのが最大の問題 ○ thenを使う ○ onMountedに寄せる 35
36.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. vue 36 1. コンポーネントの基本 2. Composition APIについて 3. Suspenseについて 4. Fragmentsについて 5. Teleportについて 6. jsxについて
37.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Fragmentsについて ● Fragmentsについて ○ Vue2ではコンポーネントのトップレベル要素は1つでなければいけなかった ○ Vue3からmulti-root nodeコンポーネントが作れるようになった ■ トップレベルに複数の要素があってもよい ○ 今まで暗黙のうちにトップレベルコンポーネントにバインドされてた要素は注意が必要 ■ classを親側から差し込むと自動で一番上位の要素に付いていたりなど 37
38.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Fragmentsについて <template> <img alt="Vue logo" src="../assets/logo.png" /> <HelloWorld v-bind="$attrs" msg="Hello Vue 3 + TypeScript + Vite" /> </template> <script lang="ts"> // 略 </script> 38 (Home.vue) <template> <div> <img alt="Vue logo" src="../assets/logo.png" /> <HelloWorld msg="Hello Vue 3 + TypeScript + Vite" /> </div> </template> <script lang="ts"> // 略 </script> (Vue2までのHome.vue)
39.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Fragmentsについて ● 不要な要素を入れる必要がなくなった ● デザイナーがcss書いている場合は考慮してもらわないといけなかったが不要に ● 自動で引き継がれていたプロパティは明示的にどのコンポーネントに付けるか指定が必要 ○ v-bind="$attrs"を付与する必要がある 39
40.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. vue 40 1. コンポーネントの基本 2. Composition APIについて 3. Suspenseについて 4. Fragmentsについて 5. Teleportについて 6. jsxについて
41.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Teleportについて ● Teleportについて ○ エレメントを指定した任意のエレメントの配下に移動できる ○ teleport要素が解釈されるときにteleport先のは存在していなければいけない ■ =Vueのコンポーネントを遷移先に指定することができない ■ mount済みかどうかでv-ifすることで一応回避できる 41
42.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Teleportについて 42 (TeleportSample.vue) <template> <teleport to="#app"> <div>id=appにテレポートされてきた要素 </div> </teleport> <script lang="ts"> import { computed, defineComponent, onMounted, reactive } from 'vue' export default defineComponent({ setup() { }, }) </script>
43.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Teleportについて 43 <template> <a v-if="state.isLink" href="https://yumenosora.co.jp/tora-lab" id="link-container" target="_blank" > <p>リンクになってる画像 </p> </a> <span v-else id="not-link-container"> <p>リンクになってない画像 </p> </span> <teleport v-if="state.isMount" :to="targetContainerId"> <img src="https://yumenosora.co.jp/wp-content/themes/theme/assets/images/tora-lab/top_recruit.jpg" alt="とらラボエンジニア募集 " /> </teleport> <button @click="state.isLink = !state.isLink">リンク入れ替え</button> </template> 状況によって画像をリンクにするかどうか切り替えた い場合
44.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Teleportについて 44 <script lang="ts"> import { computed, defineComponent, onMounted, reactive } from "vue"; interface State { isLink: boolean; isMount: boolean; } export default defineComponent({ setup() { const state = reactive<State>({ isLink: true, isMount: false }); const targetContainerId = computed<string>(() => state.isLink ? "#link-container" : "#not-link-container" ); onMounted(() => (state.isMount = true)); return { state, targetContainerId }; }, }); </script>
45.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Teleportについて 45
46.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. Teleportについて ● エレメントの位置関係によるスタイルの調整とかがしやすいように ○ modalおよび伴うz-indexの都合など ○ 親エレメントのpositionに左右されにくくなる ● フラッシュメッセージとかにも使えるかも? ● Vueコンポーネント内のエレメントにTeleportするのはイマイチかも 46
47.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. vue 47 1. コンポーネントの基本 2. Composition APIについて 3. Suspenseについて 4. Fragmentsについて 5. Teleportについて 6. jsxについて
48.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. JSXについて 48 import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; import vueJsx from "@vitejs/plugin-vue-jsx"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue(), vueJsx()] }); Viteのプラグインを導入することでjsx/tsxを使うことができます $ npm i @vitejs/plugin-vue-jsx -D vite.config.tsでプラグインを読み込み
49.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. JSXについて 49 <script lang="tsx"> import { defineComponent, reactive } from "vue"; interface State { message: string; clickCount: number; } Tsx.vueを作成 export default defineComponent({ setup() { const state = reactive<State>({message: "test", clickCount: 0}); const onClick = () => { state.clickCount += 1; state.message = `${state.clickCount}回clickされました`; }; return () => ( <div class="home"> {state.message} <button onClick={onClick}>カウントボタン</button> </div> ); }, }); </script>
50.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. JSXについて ● JSXの良いところ ○ テンプレート内でも型推論がされやすくなる ■ setup内の戻り値としてjsx返すだけなのである意味当然 ○ Vueの機能はそのまま使える ■ scoped css ■ composition apiなど ○ Reactやってきた人がすぐ入れそう ○ 普通のVueコンポーネントと混ぜて使える ● 微妙なところ ○ Vueである意味が薄くなる感がある 50
51.
Copyright (C) 2021
Toranoana Inc. All Rights Reserved. まとめ 51 ● Vue3と各機能について説明しました ○ 今までのVueをベースにより使いやすくなる機能が入っていると思います ○ 個人的なイチオシはTeleport ■ 外側のエレメントだけ変えたいときとかに使えるようになってくれると嬉しい ○ JSXもComposition APIと合わせて既存のVueの弱点であったTypeScriptとの連携がいまいちな点 を解消できるので注目 ○ ライブラリの対応がまだいまいち ■ Vuetify→2021Q3リリース目標 ■ Nuxt→対応中 ○ ますますVue使いやすくなってるのでぜひ使ってみてください
Download now