その他
    ホーム 技術発信 DoRuby ボックスガチャの実装をしよう(ソーシャルゲームにおけるサーバーサイド) 7
    ボックスガチャの実装をしよう(ソーシャルゲームにおけるサーバーサイド) 7
     

    ボックスガチャの実装をしよう(ソーシャルゲームにおけるサーバーサイド) 7

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    どうして世の中は世知辛いのだろう。

    前回のあらすじ

    前回
     ボックスガチャの実装が完了しました。
     しかし、そこで完了にするのではなくコードレビューや仕様の確認をして、この先に改修が入ったりしても、誰かにクソコードと喚かれたり、見直して自分でクソコード……と呟いてしまうような、また仕様書に無い仕様が実際には入っていたり、逆に実は仕様が欠けていたり……みたいな悲劇が起こらないようにしましょう。

    仕様確認をしよう

    くらいあんとえんじにあ「クライアントもアセット組み込んで実装終わったから、仕様確認するぞー」

    仕様書を見直すと、

    ・ボックスガチャは通常ガチャと同様、1連と10連で引ける
    ・ボックスガチャで引けるものは通常ガチャと同等
    ・10連を選択した時にボックスの中身が9個以下だった場合、消費される対象はその中身分のみとなり、全てを自動で排出する
    ・リセットする度に上限までボックスの中身は変わる
    ・リセットは自由に可能。そのステージのボックスガチャを1回も引かなくともリセットが出来る
    + 排出されるキャラクターの中で最高レアリティのキャラはボックスの中身を1/4以上引いていない時しか出ない
    + ボックスを引き切ると別のマスタで定義してあるおまけが貰える
    

    さーばーえんじにあ「(追加された仕様に関しても実装したし)ここあたりは問題ないですよね。マスタ定義書とかも更新してあるのは見ましたし」

    ※開発途中に仕様が追加変更される事は多分良くある

    くらいあんとえんじにあ「あ、いや、 ボックスを引き切ると別のマスタで定義してあるおまけが貰える ってUI上の表示は無くて良いんですっけ。こっちとしては特に大して聞いてないんですけど」
    ぷらんな「現状大した物出さないし、最後まで引ききって遊んでくれてありがとう的な、そんな小さなものだから取り敢えず今回は無しね」
    くらいあんとえんじにあ「りょーかい。一応追記しておいてくれると助かります」
    ぷらんな「わかっタスマニアデビル」
    でざいなー「UIの遷移図、仮画像のままなので本画像に差し替えておいてくださインパラ」
    ぷらんな「りょーか犬」
    さーばーえんじにあ「サーバー側としては他に特にないです猫」
    くらいあんとえんじにあ「……クライアントとしても同じです」
    でざいなー「……」
    ぷらんな「……」
    さーばーえんじにあ「……」
    くらいあんとえんじにあ「……やらないよ?」

    コードレビューをしよう

    さーばーえんじにあ「実装の規模でかいんで部屋取ってコードレビューの時間取ろうと思うんですけど、良いですか?」
    れびゅわー「この時間に取っておいて。1時間あれば足りる?」
    さーばーえんじにあ「まあ、基本的に新規実装なので、既存コードの改修でごっちゃごっちゃそこまでやってないの考えるとその位で多分大丈夫です」

    さーばーえんじにあ「実装は大まかに言うと、既存コードをごねごねせずに、引用して来る感じで行いました。
     で、ボックスガチャの実装で普通のガチャと共通の部分は継承してそのまんま使って、この部分とこの部分だけ違うので、こんな感じでオーバーライドして……みたいな感じです」
    れびゅあー「設計はまあ事前に聞いてたし特に問題ないと思う」
    さーばーえんじにあ「わかりましたー」
    れびゅあー「で、一つ一つ改修したコード見ていこうか」

    れびゅあー「データ更新の部分さ、この作りだと10連だと10回update叩かないといけないけどさ、一括で何とか出来なかった?」
    さーばーえんじにあ「DBのクラスタ設定とか考慮してやると結構複雑になりそうだったので、一旦やってないです。後、ちゃんとindexとか張ってありますし、不要なデータも基本的に即削除してるので、そんなに問題ないかと」
    れびゅあー「分かった。まあ、最大10回なら問題ないかな。パーティションは切ってあって、ガチャ期間が過ぎてN日経ったら削除ね……。そこあたりは何か根拠でも?」
    さーばーえんじにあ「ガチャで取ってあるログと同じに一旦してあります」
    れびゅあー「そうね。多分無いと思うけど、同じボックスガチャを前に引いていた人はその状態からで復刻してやるとか、そんな事がないかとか、ちゃんとプランナーとかと合意取っといて」
    さーばーえんじにあ「分かりましたー」

    れびゅあー「じゃあ、言ったところ確認とったりとかしたら本ブランチにマージするね」
    さーばーえんじにあ「分かりましたー」

    タスク完了

    上記が終わり次第、 ボックスガチャの実装 というタスクはやっと、しかしながら 基本的にのみ 完了となります。
    QAチェックなどで、コードレビューやテストコードもすり抜けて不具合が発覚する可能性なども多々ありますので、その都度修正などをしていきましょう。


    ……。
    …………。
    …………こんな風に実装出来たら良かったなぁ……。

    記事を共有