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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
ブラウザアプリの継続的パフォーマンスモニタリング (序) / Continuous Browser Application Performance Monitoring; Act 1
moznion
0
110
データエンジニアの困りごとをDevinと一緒に解消する
10xinc
2
860
PfEingのアプローチで働こう
rindrics
0
200
【視聴者参加型!】AWSセキュリティアンチパターンクイズ
syoshie
0
460
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
240
生成AI時代の クレデンシャルとパーミッション設計
nrinetcom
PRO
4
1.6k
KPIだけでは評価できないプロダクトが考えるべき Evalsという第二の評価系 / Beyond KPIs: Evals as a Second Evaluation Framework for Products #PdEConf
aki_iinuma
4
3.7k
推論の観測、できていますか? 〜 Google Cloud Gemini Enterprise Agent Platformで 3つの Gemini モデルを実測して踏んだ、評価の罠 〜
shukob
PRO
0
170
Amazon Quick on DesktopがIAM Identity Centerで動かない理由
yukiogawa
0
110
Sigmaユーザーのための有用リソース一挙公開 & Sigmaで使えるMCP #sigma_ucj /useful-resources-for-sigma-computing-users-and-mcps-with-sigma
shinyaa31
0
160
bet_ai_day_2026_session02
agenticsec
2
1.3k
AIで仕事のやり方を変える
matsu7874
2
980
Featured
See All Featured
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
How to Talk to Developers About Accessibility
jct
2
540
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
310
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
290
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
270
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
240
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