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
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Vue.js + Firebaseで作るリアルタイムアンケート / real time que...
Search
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
振り返りこそエンジニアの本領
negima
0
350
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
0
1.1k
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
4
2.7k
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
260
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
1
440
AI時代のAPI品質を支えるガードレール / API Guardrails for API quality in the AI era
yokawasa
1
190
enechainの内製セルフサービスプラットフォーム
hiyosi
0
150
V8コントリビュート超入門
riyaamemiya
0
160
Tab5をRubyで動くパソコンにする
kishima
2
280
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
130
GuardDuty 検知対応を DevOps Agent で効率化しようとしている話 / GuardDuty Investigations with DevOps Agent
masahirokawahara
1
340
GoにおけるFFIのこれまでとこれから
goccy
4
1.4k
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.8k
Producing Creativity
orderedlist
PRO
348
41k
Practical Orchestrator
shlominoach
191
12k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
490
BBQ
matthewcrist
89
10k
Technical Leadership for Architectural Decision Making
baasie
3
560
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
780
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
RailsConf 2023
tenderlove
30
1.5k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
310
ラッコキーワード サービス紹介資料
rakko
1
4.8M
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