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
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
2
480
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
230
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
250
Why Laravel apps break—Mastering the fundamentals to keep them maintainable
kentaroutakeda
1
340
Inside Stream API
skrb
1
670
A2UI という光を覗いてみる
satohjohn
1
120
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.4k
AIで効率化できた業務・日常
ochtum
0
120
CLIであることを活かしたGitHub Copilot CLI活用術 / GitHub Copilot CLI Pro Tips & Tricks
nao_mk2
1
1.2k
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
240
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
4.9k
These Five Tricks Can Make Your Apps Greener, Cheaper, & Nicer
hollycummins
0
280
Featured
See All Featured
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Designing Powerful Visuals for Engaging Learning
tmiket
1
410
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
230
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
190
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
310
Visualization
eitanlees
152
17k
Embracing the Ebb and Flow
colly
88
5.1k
My Coaching Mixtape
mlcsv
0
140
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.8k
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