# プロジェクト概要
自社開発ソーシャルゲーム案件
# 規模
20名(うちサーバーサイド3-6名)
# 役割
メンバー
# 担当
サーバーサイド、詳細設計、プログラミング
# 期間
2018/08 - 2019/04
# 用いた技術一覧
- WebSocketを用いた最大20人でのリアルタイムバトルの保守
- WebSocketを用いたオークションロジックのリファクタ・バグ改修
- WebSocketを用いたレイドバトル参加者のリアルタイムマッチング機能の設計・実装
- 上記を実現するDB及びSuperviserのリファクタ・設計・実装
- WebSocketのコネクション管理とオークション・バトル・マッチング等のリアルタイム性が高いIOのためのRedisのデータ構造の設計・実装
- Unityチームと協業しながらのREST-APIの実装
- UnityチームのC#ロジック部分のモブプログラミング
- bootstrap・AdminLTEを用いたプランナー・ディレクター・デバッガーの作業効率化のための管理画面機能の設計・実装
# 感想
21の頃から趣味と副業でアフィリエイトやFX自動売買のためのプログラムを書いていましたが、
業務としては初の案件だったので今でも感慨深く思います。
特に大変だった点を挙げると、
- Web系の実装経験はPurePHPとWordpressプラグインの改造しかやったことが無かったのになかなかに技術的に難易度の高い実装ばかりだったこと
=> 「プリンシプルオブプラグラミング」や「リーダブルコード」などの書籍について聞ける先輩がいたので、休日に読んでわからない点は聞いて理解していくことで適応しました
- WebSocketを用いたオークション処理のロジックが全てContloller的な場所に書かれていたこと
=> 納期に余裕のあるタイミングでわかったことだったので、RedisとのIO処理・オークションのビジネスロジックの2つのロジックのために新規モジュールを新規作成しそれぞれに切り出しました
- 普通のWeb開発ではそうそう使わないWebSocket・Superviser・アクターモデル等の知識
=> 記事が英語ですらほとんどなかったので、担当プロジェクトをイニシャルコミットから順番に読んでいき、次にPhoenixFWのORMとWebSocketのライブラリの全コードと、FW内でsupervisorが使われている部分を仕事の空き時間と休日に読破してキャッチアップしました
- 当時のネットではElixirの日本語情報がほぼ無かったので、英語で探すのが基本でなければライブラリ内の実装を読まなければバグの解決ができないことがままあったこと
=> 基本はGoogle翻訳を頼りますが、プログラミング関連の話題であれば英語のリーディングが苦にならなくなりました。
よかった点としては、
- 実務2ヶ月くらいでDB設計をさせてもらえたこと
- 実務2ヶ月くらいでWebSocketの実装をさせてもらえたこと
- Elixirのライブラリやフレームワークのコードを読むことにハマって、センスの良い設計の勉強になったこと
- たまたま飲み会で終電逃して会社に泊まった日の次の土曜日にサーバーがN+1問題によるタイムアウトで毎回ホーム画面で落ちてしまってた時、運よく会社にいたのでそのまま出勤し該当部分を修正してその日のうちに解決したら社長からの覚えがよくなったこと