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
Pocochaを盛り上げるイベント開発の裏側
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
gotomo
February 05, 2019
Programming
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Pocochaを盛り上げるイベント開発の裏側
gotomo
February 05, 2019
Other Decks in Programming
See All in Programming
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
620
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.8k
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
7.1k
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
140
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
1
610
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
140
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.5k
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.6k
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
130
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
140
The NotImplementedError Problem in Ruby
koic
1
1k
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
280
Featured
See All Featured
Speed Design
sergeychernyshev
33
1.9k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
1.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
320
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
610
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
Crafting Experiences
bethany
1
190
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
350
Transcript
Pocochaを盛り上げるイベント開発の裏側 後藤友和 Poco Dev Meetup#1 1
目次 Pocochaにおける主なイベントの型 イベント本数との戦い イベント本数が増えたときの問題 効率よく、安全に、ストレスなく作る デバッグ時の時間の移動方法 イベントの設定値のズラしかた 平行開発で起きるコンフリクト ID体系の工夫 今後の展望
2
自己紹介 2011年新卒入社 FP/SP向けソーシャルゲーム数本開発 2011~2015年 Perlでサーバーサイド デジタルカードゲーム(DUELS X MACHINA)の開発 カードゲーム好きが高じて参画 2015~2018年
Unity(C#)でクライアント全般 Pocochaチームイベントエンジニア 2018年5月~ Rubyでサーバーサイド 効率化大臣を名乗ってます 3
イベント 期間限定で開かれる特別な催し物 4
Pocochaにおける主なイベントの型 ランキング型 リスナーのアクティビティに応じたポイントと、使われたアイ テムの額の合計で順位を競う 上位者には街頭広告に出る権利や、景品が与えられる ミッション型 与えられたお題をリスナーと一緒にクリアしていく 「いいね!」を10万回 「あけおめ!と19回言ってもらおう」 主にコイン(アプリ内の通貨)が得られる
5
2018年のPocochaのイベント開発は 6
イベント本数増加との戦い 7
昨年の10月あたりから急増 2018年 月 1 2 3 4 5 6 7
8 9 10 11 12 本数 1 1 1 1 3 1 1 2 2 6 8 13 8
なお、2019年はもっと増える 9
イベント本数が増えたときの問題 工数 ひとつひとつは小さくてもチリツモ ヒューマンエラー 本番反映時のミス ベタ書きによるデータと表示の不整合 検証漏れ 企画やデザイナーとのコミュニケーションミス ブランチ運用 平行開発時にマスタデータなどが盛大にコンフリクト
10
要するに 効率よく 安全に ストレスなく 作らないと乗り切れない!!! もしくは人海戦術 11
効率よく、安全に、ストレスなく作る 項目 Before After 報酬の記載 ベタ書き マスターデータから生成 マスターデータ 生成 企画が作ったスプレッドシートを
見ながら手動でデータ化 スプレッドシートからスクリプ トでgitにインポート マスターデータ の本番反映 管理画面上で手入力 gitからスクリプトで反映 *デバッグ時の 時間の扱い 手動で全て修正 一括で変更可能 実装 前回イベントを頑張ってコピペ スクリプト一発でイベントの雛 形作成 検証 自分たちで項目書作って検証 項目書も含めてQAさんにお任 せ *コンフリクト つらい 一瞬で解決 *あとで説明する項目 12
デバッグ時の時間の移動方法 自分の時間をズラす Timecop.freezeやTimecop.travelを使う 開発初期から考慮していなかったので予期せぬ挙動が多かった 引数でコントロール 時間を扱うクラスは必ず外から時間オブジェクトを受け取る 開発初期からやらないと全対応は難しい オススメ イベントの設定値をズラす マスタデータの値を書き換えると手間なので工夫が必要
イベント周りだけ対応すれば良いので比較的対応が容易 Pocochaではこちらを採用 13
イベントの設定値をズラす 自分の時間はズラさずに設定値を変更 14
でも、手動で全部ズラすのは面倒 イベントで設定されている時間は結構多い バナー公開開始 参加受付開始 カウント開始 カウント終了 報酬受取期限 15
検証時はなるべく本番と同じ状態にしたい 同時開催するイベントがあるなら両方時間をズラしたほうが良い イベントAとイベントBが同時開催なとき 5箇所(もっと多いかも) x 2修正が必要になってしまう 実際、同時開催するイベントはもっと多い 16
一気にズラす time_offsetを設定して利用 def parse(time_str) # time_offset はズラしたい時間(DB などに格納して共通で読み込む) Time.zone.parse(time_str) +
time_offset end モデルでoverrideして根本で対応 # events.rb def started_at EventTime.parse(self[:started_at].to_s) end def ended_at EventTime.parse(self[:ended_at].to_s) end 17
time_offsetの設定 管理ツール上での設定例 「2019‑01‑30 20時」時点で「2019‑02‑14 12時」開始のイベントを見 たい場合、イベントの開始時間を「14日と16時間」早めれば良い "2019‑02‑14 12 時" ‑
"14 日16 時間" = "2019‑01‑30 20 時" 18
平行開発で起きるコンフリクトの例 19
eventsテーブル id name 1 Poco イベント 2 Dev イベント 3
Meetup イベント 20
event_rewardsテーブル(eventsの子テーブル) ブランチA id event_id name 1 1 コイン 2 1
広告出演権1 3 2 コイン 4 2 広告出演権2 5 2 シール ブランチB id event_id name 1 1 コイン 2 1 広告出演権1 3 3 コイン 4 3 広告出演権3 21
ブランチAにブランチBをマージ _人人人人人人人人_ > コンフリクト <  ̄Y^Y^Y^Y^Y^Y^Y ̄ 修正が大変(他のマスターデータも同様…) ‑3,2, コイン #
イベントID 2 ‑4,2, 出演権2 # イベントID 2 ‑5,2, シール # イベントID 2 +3,3, コイン # イベントID 3 +4,3, 出演権3 # イベントID 3 22
ID体系の工夫 IDに意味をもたせて子テーブル以下のコンフリクトを解消 仮にコンフリクトしてもカット & ペーストで済むので解決が容易 根本のID(eventsテーブルのID)だけは関係者で調整する必要がある スプレッドシートで別途管理 1_00010 # events
テーブルのID 1_00010_01 # 子テーブルのID( 末尾二桁連番) 1_00010_01_01 # 孫テーブルID( 末尾二桁連番) 1_00020_01,1_00020, コイン # イベントID: 1_00020 1_00020_02,1_00020, 出演権2 # イベントID: 1_00020 1_00020_03,1_00020, シール # イベントID: 1_00020 +1_00030_01,1_00030, コイン # イベントID: 1_00030 +1_00030_02,1_00030, 出演権3 # イベントID: 1_00030 23
今後の展望 管理画面を充実させて企画者自らイベントを開発できるようにする 新スキームのイベント開発 日々のオペレーションの効率化 24
一緒にやりましょう ソーシャルゲーム開発しかやったことない…って人 前例がここに居るので大丈夫です Perlしか書いたことないんだよな…って人 「プロを目指す人のためのRuby入門」を読めば大丈夫! 応募は こちら からどうぞ 25
ご清聴ありがとうございました 26
目次(再掲) Pocochaにおける主なイベントの型 イベント本数との戦い イベント本数が増えたときの問題 効率よく、安全に、ストレスなく作る デバッグ時の時間の移動方法 イベントの設定値のズラしかた 平行開発で起きるコンフリクト ID体系の工夫 今後の展望
27