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
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
1.9k
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
非定型業務をAI slackbotで自動化する ~ 社内要望を自動壁打ちするbotを作った ~/automating-ad-hoc-work-with-ai-slackbot
shibayu36
0
550
チームで進めるAI駆動アジャイル×ウォーターフォール
kumaiu
0
140
MCP Appsを作ってみよう
iwamot
PRO
4
360
あなたの AI ワークスペースに、 専門コーダーを連れてくる - Amazon Quick Desktop 最新情報
kawaji_scratch
1
130
ChatworkとBPaaS 異なる特性で学んだAI機能開発の ベストプラクティス
kubell_hr
2
3.4k
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
540
GoとSIMDとWasmの今。
askua
3
520
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
500
エンジニアリング戦略の作り方 / Crafting Engineering Strategy
iwashi86
18
6.1k
Agentic ERPをどう設計するか ー 受発注エージェントを動かす、現場の知見と設計思想ー
recerqainc
1
2.1k
自律型AIエージェントは何を破壊するのか
kojira
0
140
AIを「創る」と「使う」の循環 — HRテックが実践するリアルなAI組織実装
taketo957
0
1.9k
Featured
See All Featured
Accessibility Awareness
sabderemane
1
130
Balancing Empowerment & Direction
lara
6
1.2k
Being A Developer After 40
akosma
91
590k
How to train your dragon (web standard)
notwaldorf
97
6.7k
GitHub's CSS Performance
jonrohan
1033
470k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
220
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
140
Exploring anti-patterns in Rails
aemeredith
3
400
Odyssey Design
rkendrick25
PRO
2
690
Automating Front-end Workflow
addyosmani
1370
210k
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