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.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
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
600
Press start. Python's next generation.
willingc
PRO
3
300
How I Won Prize Money at a Hackathon Using Codex and Symphony Alpha
yasei_no_otoko
0
140
What We Talk About When We Talk About XP
m_seki
2
210
ソフトウェアラスタライザ
fadis
1
770
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.9k
Flow は今どうなっているか
mizdra
PRO
0
860
typoなんかねぇよ
raspython3
0
650
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
0
140
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
2
980
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
130
MySQLとPostgreSQLって何が違うの?
akagami
PRO
0
160
Featured
See All Featured
WENDY [Excerpt]
tessaabrams
12
39k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Designing for Timeless Needs
cassininazir
1
470
Producing Creativity
orderedlist
PRO
348
41k
GraphQLとの向き合い方2022年版
quramy
50
15k
The agentic SEO stack - context over prompts
schlessera
0
880
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
410
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
500
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