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
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
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
500
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
240
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
230
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
120
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
1
130
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
380
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
440
リアルな遅延を測る仕様
kota_yata
1
110
今さら聞けない .NET CLI
htkym
0
190
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
940
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
120
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
150
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
Google's AI Overviews - The New Search
badams
0
1.1k
Scaling GitHub
holman
464
140k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
480
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
940
Producing Creativity
orderedlist
PRO
348
40k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Automating Front-end Workflow
addyosmani
1369
210k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
460
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