quiznowを支える技術 #yapcasia

75
Copyright (C) DeNA Co.,Ltd. All Rights Reserved. QuizNow をををををを DeNA Co., Ltd. Yosuke Furukawa 1

Upload: yosuke-furukawa

Post on 29-Jun-2015

1.583 views

Category:

Technology


0 download

DESCRIPTION

YAPCで話したQuizNowを支える技術の話です。

TRANSCRIPT

Page 1: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

1

QuizNow を支える技術

DeNA Co., Ltd.

Yosuke Furukawa

Page 2: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

2

自己紹介

Page 3: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

3

自己紹介

古川 陽介 (ふるかわ ようすけ) HN: @yosuke_furukawa

QuizNow 開発 Node.js コンサル 主な業務 : にぎやかし、ムードメーカー 肩書 ( 愛称 ): 会長

日本 Node.js ユーザーグループ代表

Page 4: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

4

この前テレビに出た

https://www.youtube.com/watch?v=LS-0-MmX9OM#t=5m30s

Page 5: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

5

orz

Page 6: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

6

今日の話

Page 7: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

7

QuizNow is 何

Page 8: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

8

コンセプト

Page 9: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

9http://omocoro.jp/kiji/2633/

Page 10: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

10http://omocoro.jp/kiji/2633/

Page 11: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

11http://omocoro.jp/kiji/2633/

知ってることは饒舌になる

し、誰よりも詳しくなろう

とする習性がある

Page 12: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

12

http://honto.jp/netstore/pd-book_02705279.html

Page 13: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

13

( ゚A゚;) ゴクリ

http://honto.jp/netstore/pd-book_02705279.html

Page 14: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

14

Page 15: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

15

クイズで競いながら好きなも

のを思う存分語るための場所

Page 16: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

16

QuizNow の機能とか

Page 17: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

17

QuizNow の機能とか

Quiz Community

Page 18: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

18

QuizNow の機能とか

Quiz Community

Page 19: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

19

QuizNow の機能とか

Quiz Community

Quiz して Community で語る

慣れ合いに飽きたら競い合う

Page 20: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

20

みんなで遊んでみよう

Page 22: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

22

秀逸なスレ

http://quiznow.me/community/topic/6/board/268/

Page 23: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

23

秀逸なスレ

http://quiznow.me/community/topic/15/board/23/

Page 24: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

24

中身

Page 25: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

25

Node.js(socket.io)

Perl(Amon2)

Page 26: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

26

Node.js(socket.io)

Perl(Amon2)それぞれのコンポーネントで

それぞれの戦いがある。

Page 27: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

27

Node.js(socket.io)

Perl(Amon2)

client side

Page 28: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

28

ネイティブアプリ

Page 29: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

29

エンジニア デザイナ

Page 30: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

30

エンジニア デザイナ

Page 31: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

31

エンジニア デザイナエンジニアとデザイナ間でイメージ共有できてないと辛

QuizNow

Page 32: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

32

Page 33: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

33

静止画だけじゃなくて動画にして動きまで共有する

Page 34: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

34

エンジニア デザイナなるべく正確に意図を伝えるように工夫

Page 35: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

35

エンジニア デザイナコミュニケーションミスによる

手戻りを防ぎ、アセットをムダにしない仕組み

Page 36: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

36

ブラウザアプリ

Page 37: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

37

Look & Feel は ネイティブアプリの方が上

Web でインストールレスでサクッとプレイ出来たほうが人にリーチしやすい

Page 38: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

38

Look & Feel は ネイティブアプリの方が上

Web でインストールレスでサクッとプレイ出来たほうが人にリーチしやすい

最近流行りのハイブリッドアプリ

Page 39: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

39

Page 40: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

40

先行実装されてるアプリ版と合わせる

Page 41: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

41

Page 42: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

42なめらかにストレス無く

Page 43: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

43

Full Single Page Application⁃ backbone.js + marionette

プリロードでアセットを読み込む⁃ 初期ロードでキャッシュする

減色処理、圧縮処理で軽くする⁃ Grunt での自動化

Page 44: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

44

Full Single Page Application⁃ backbone.js + marionette

プリロードでアセットを読み込む⁃ 初期ロードでキャッシュする

減色処理、圧縮処理で軽くする⁃ Grunt での自動化PC とかで見てると気づかない内に

重くなってたりする。

Page 45: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

45

Page 46: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

46

定期的に端末でチェックして回避する

しか無い、地道に勝る近道なし

Page 47: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

47

とはいえ

Page 48: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

48

全部できてから確認するわけにも行かない。。。

Page 49: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

49

改善点

Page 50: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

50

サーバーレスでクライアントを実装できるようにする

No servers

Page 51: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

51

!! stubcell !!

Page 52: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

52

stubcell でスタブを作って開発

Stubcell♡

yaml の定義ファイル書くだけ

Page 53: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

53

stubcell でスタブを作って開発

Stubcell♡

yaml の定義ファイル書くだけ

最終的にこの定義ファイルがAPI 仕様書となりコードに記録が残る

Page 54: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

54

stubcell でスタブを作って開発

Stubcell♡

yaml の定義ファイル書くだけ

API ファーストな設計

最終的にこの定義ファイルがAPI 仕様書となりコードに記録が残る

Page 55: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

55

開発速度を上げて改善効率を上げる

Page 56: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

56

Node.js(socket.io)

Perl(Amon2)

server side

Page 57: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

57

Node.js / Perl

Page 58: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

58

Quiz は基本的に早押し形式

Page 59: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

59

HTTP を POST する際のコネクションを繋ぎ直す

ミリ秒が惜しい

Page 60: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

60

Server

遅い

解答送信

結果受信

解答送信

結果受信

Page 61: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

61

Use the WebSocket Luke

Page 62: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

62

Node.js(socket.io)

一つの接続だけで解答と結果を送信速い !

解答送信

結果受信

Page 63: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

63

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

死活チェック DB

Perl(Amon2)

vs

Page 64: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

64

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

死活チェック DB

Perl(Amon2)

起動しているサーバーを DB に格納

vs

Page 65: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

65

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

死活チェック DB

Perl(Amon2)

起動しているサーバーを DB に格納

生きているサーバーを取りに行く

vs

Page 66: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

66

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

死活チェック DB

Perl(Amon2)

起動しているサーバーを DB に格納

生きているサーバーを取りに行く

vs 対戦マッチのサーバーを教える

Page 67: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

67

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

死活チェック DB

Perl(Amon2)

起動しているサーバーを DB に格納

生きているサーバーを取りに行く

vs 対戦マッチのサーバーを教える

Socket.io サーバーで対戦

Page 68: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

68

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

Node.js(socket.io)

死活チェック DB

Perl(Amon2)

起動しているサーバーを DB に格納

生きているサーバーを取りに行く

vs 対戦マッチのサーバーを教える

Socket.io サーバーで対戦

自前スケールアウト戦略

Page 69: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

69

まとめ

Page 70: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

70

まとめ

QuizNow はクイズで競いながら好きなものを思う存分語るための場所

工夫したところ

動画によりデザイナーとのコミュニケーションミスを無くす

Web の Single Page Application にしつつ高速化を行い、ネイティブアプリと Web の遜色を無くす

WebSocket でクイズの早押し要素をサポート

Page 71: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

71

まとめ

QuizNow はクイズで競いながら好きなものを思う存分語るための場所

クイズを解いてコミュニティで語り

コミュニティで慣れ合いに飽きたらクイズで殴りあう

動画によりデザイナーとのコミュニケーションミスを無くす

Web の Single Page Application でネイティブアプリと Web の遜色を無くす

WebSocket でクイズの早押し要素をサポート

QuizNow楽しい!!!

Page 72: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

72

最後に

Page 73: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

73

Page 74: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

74

明日はあやか Now!!!

Page 75: Quiznowを支える技術 #yapcasia

Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

75

お約束

DeNA では

優秀な Perl Monger

クールな Noder

オーサムな JSer

グレートなデザイナー

を募集してます!僕に一言声をかけるか

http://dena.com/recruit/career_recruit/ まで!