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
Vue.js + Firebaseで作るリアルタイムアンケート / real time que...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
masahito.ando
June 19, 2019
Technology
2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Vue.js + Firebaseで作るリアルタイムアンケート / real time questionnaire
masahito.ando
June 19, 2019
Other Decks in Technology
See All in Technology
1万名の社員が使う認証基盤で どう信頼性を担保するか?
kairim0
0
220
Deep Data Security 機能解説
oracle4engineer
PRO
2
740
契約書画像からの情報抽出に特化した視覚接地モデルを育てる話
sansantech
PRO
1
160
自作バイナリを動かす「入口」8選
puhitaku
1
1.2k
FactoryBotアンチパターン / factory_bot anti-patterns
toshimaru
0
140
SDDの運用にめげずに向き合った話
sansantech
PRO
1
140
TinyGoでオブザーバビリティ?OpenTelemetryはTinyGoで使えるのか / Is OpenTelemetry available in TinyGo environment?
ymotongpoo
2
130
メルペイ 会計システム概要と歴史
mewuto
0
200
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
640
継続的なAIコスト最適化
bgpat
1
270
freeeらしさをAIとともに作る / Creating the freee Experience with AI
ymrl
0
220
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
340
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Building AI with AI
inesmontani
PRO
1
1.3k
A better future with KSS
kneath
240
18k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
Building Applications with DynamoDB
mza
96
7.2k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
740
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Leo the Paperboy
mayatellez
10
2.4k
Transcript
Vue.js + Firebaseで作るリアルタイム アンケート ZOZOテクノロジーズMeetup #10 for Frontend Engineer 株式会社ZOZOテクノロジーズ
開発部 安藤 正人 Copyright © ZOZO Technologies, Inc.
© ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ 開発部 安藤 正人 アパレル販売 ↓ 受注web制作会社
↓ ZOZOグローバル事業部 ↓ ZOZOTOWN開発部(検索改善チーム) 2 プロフィール
© ZOZO Technologies, Inc. 先日、ZOZOTOWNに出店いただいているブランド様655社1206名の 方にお集まり頂いただき 日頃の感謝とブランドの皆様と共に創っていきたい未来についての 共有を目的とした ZOZOTOWN Brand
Conference 2019というカンファレンスを開催し ました。 3 ZOZOTOWN Brand Conference 2019
© ZOZO Technologies, Inc. 4 その中の一コンテンツとして リアルタイムアンケートを実施したので その実装方法の一部を紹介します。
© ZOZO Technologies, Inc. 詳しくは https://techblog.zozo.com/entry/firebase-realtime-questionnaire
5 実はこのアンケート使用するの 2回目なんです。
© ZOZO Technologies, Inc. • 技術選定理由 • 各画面について • Cloud
Firestoreのデータ構造 • FirestoreとVuex Storeの連携 • 実装を通して思ったこと • 今後の改善点 6 Vue.js + Firebaseで作るリアルタイムアンケートの実装方法 今日のテーマ
© ZOZO Technologies, Inc. 7 • Firebase ◦
手軽にリアルタイムリスナーが使用できる(Firestore) ◦ この規模なら無料枠(Sparkプラン)で収まりそう ◦ 手軽にホスティングが可能 • Vue.js ◦ 他のフレームワークより学習コストが低い ◦ その分スピーディーに開発ができそう ◦ データ駆動設計 + Tweenライブラリ = 状態アニメーションが容易に実装可能 技術選定理由
© ZOZO Technologies, Inc. 8 各画面について
© ZOZO Technologies, Inc. 9 各画面について スタンバイ画面 回答中の画面 回答締切画面 User画面
質問内容は非公開のため画像を加工しています
© ZOZO Technologies, Inc. 10 各画面について 回答中の画面 結果画面 Screen画面 質問内容は非公開のため画像を加工しています
© ZOZO Technologies, Inc. 11 各画面について Admin画面 質問内容は非公開のため画像を加工しています
© ZOZO Technologies, Inc. 12 Cloud Firestoreのデータ構造
© ZOZO Technologies, Inc. 13 Cloud Firestoreのデータ構造
© ZOZO Technologies, Inc. 14 FirestoreとVuex Storeの連携
© ZOZO Technologies, Inc. 15 { "status": {
"current": { "questionIndex": 0, "deadlineTimeStamp": 1560487021599 } }, "votes": { "00mLbY71Rm88Nz11gxAA": { "questionIndex": 0, "selectedAnswerIndex": 0 }, "021tVyGd46luzFmrkeQp": { "questionIndex": 0, "selectedAnswerIndex": 1 }, "02GH3o3FUuS110IO5ZFX": { "questionIndex": 1, "selectedAnswerIndex": 1 },... } } コンポーネント内で扱いやすいように Vuex Storeとの連携の際に データ構造を変換 → statusCollection → statusModule votesCollection → questionModule Cloud Firestore { status: { currentQuestionIndex: 0, deadlineTimeStamp: 1560487021599 }, question: { questions: [ { text: '質問テキスト1', answers: [ { votesCount: 0, text: 'YES' }, { votesCount: 0, text: 'NO' } ] }... ] } } Vuex Store FirestoreとVuex Storeの連携
© ZOZO Technologies, Inc. 16 import { VuexModule,
Action, Mutation, Module, getModule } from 'vuex-module-decorators'; import store from '@/store/index'; import firestore from '@/firestore'; @Module({ dynamic: true, store, name: 'question', namespaced: true }) class Question extends VuexModule { // state questions = initializeQuestions();// stateの初期化を行う // mutation @Mutation updateQuestions(vote) { this.questions[vote.questionIndex].answers[vote.selectedAnswerIndex].votesCount++; } // actions @Action observeVotes() { firestore.collection('votes').onSnapshot((snapshot) => { snapshot.docChanges().forEach((change) => { const vote = change.doc.data(); this.updateQuestions(vote); }); }); } } export const questionStore = getModule(Question); questionModule FirestoreとVuex Storeの連携 vuex-module-decoratorsを使用 • クラス形式で記述できる • 型補完、インテリセンスが効く • thisを使ってお互いを呼び出せる メンバ変数 → State @Mutation + メンバ関数 → Mutation @Action + メンバ関数 → Action
© ZOZO Technologies, Inc. 17 実装を通して思ったこと
© ZOZO Technologies, Inc. 18 • 自身によるサーバ構築が不要、フロントエンドの知識のみでリアルタイムリスナーを使用したア プリケーションが作成できる • 参加規模にもよるが(1000人位のアンケートなら)
基本無料(Firebase Spark プラン)でアプリ ケーションが作成できる • 充実した日本語ドキュメント + 単一ファイルコンポーネント(.vue)で学習コストが低いうえ開発ス ピードが爆速 • Vue.js(データ駆動設計) + TweenMaxは状態のトランジション制御が楽に行えるし、ロジックとア ニメーションコードを分離しやすい 実装を通して思ったこと
© ZOZO Technologies, Inc. 19 • アンケート開始のタイミングや結果発表画面のへの切り替えを登壇 者のクリッカーでコントロールしたい •
アンケートの内容をその場で決定し反映したい • カウントダウン中にsoundをつけたい 今後の改善点(イベント運営チームからの要望)
© ZOZO Technologies, Inc. 20 ご静聴ありがとうございました!
None