Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pocochaを盛り上げるイベント開発の裏側

gotomo
February 05, 2019

 Pocochaを盛り上げるイベント開発の裏側

gotomo

February 05, 2019
Tweet

Other Decks in Programming

Transcript

  1. 自己紹介 2011年新卒入社 FP/SP向けソーシャルゲーム数本開発 2011~2015年 Perlでサーバーサイド デジタルカードゲーム(DUELS X MACHINA)の開発 カードゲーム好きが高じて参画 2015~2018年

    Unity(C#)でクライアント全般 Pocochaチームイベントエンジニア 2018年5月~ Rubyでサーバーサイド 効率化大臣を名乗ってます 3
  2. 昨年の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
  3. 効率よく、安全に、ストレスなく作る 項目 Before After 報酬の記載 ベタ書き マスターデータから生成 マスターデータ 生成 企画が作ったスプレッドシートを

    見ながら手動でデータ化 スプレッドシートからスクリプ トでgitにインポート マスターデータ の本番反映 管理画面上で手入力 gitからスクリプトで反映 *デバッグ時の 時間の扱い 手動で全て修正 一括で変更可能 実装 前回イベントを頑張ってコピペ スクリプト一発でイベントの雛 形作成 検証 自分たちで項目書作って検証 項目書も含めてQAさんにお任 せ *コンフリクト つらい 一瞬で解決 *あとで説明する項目 12
  4. 一気にズラす 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
  5. 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
  6. ブランチ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
  7. 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