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
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
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Pocochaを盛り上げるイベント開発の裏側
Search
gotomo
February 05, 2019
Programming
1.3k
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
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
6
1.9k
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
310
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
330
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
320
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
370
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
0
130
Heart of Swift Concurrency
koher
0
690
Are APIs Still Relevant in the AI Era?
soyuka
0
200
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
130
Go のフラットな パッケージに 「ファイル単位の private」を 〜Linter “declscope” を作った話〜
mpyw
0
310
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
710
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
350
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
141
7.7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
360
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
520
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
390
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
How STYLIGHT went responsive
nonsquared
100
6.3k
Why Our Code Smells
bkeepers
PRO
340
58k
Navigating Weather and Climate Data
rabernat
0
520
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.2k
4 Signs Your Business is Dying
shpigford
187
23k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
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