リリース前の開発中の時点から参加しました。
## 成果
- パフォーマンスについての意識
- AWSについて知った
- DynamoDBを利用した大規模アプリケーションの開発
### パフォーマンスについての意識
この会社に転職し、初めてソーシャルゲームの開発に携わりました。
それ以前の会社(IRサイトの構築、通販会社の社内システム開発など)ではあまりパフォーマンスについて要求されることがなかったので、パフォーマンスについて意識する機会を得ました。
### AWSについて知った
同様、この会社で初めてAWSに触れました。
EC2, DynamoDB, S3, CloudFront, SQS, SNS他さまざまなAWSのサービスの利用について学ぶことができました。
他プロジェクトでもlambda、APIGatewayを利用したサーバレスな実装について学ぶことができました
### DynamoDBを利用した大規模アプリケーションの開発
DBはDynamoDBを主に使用していました。他、複雑なクエリ(ユーザ検索など)にはMySQL。ランキングやキャッシュにredisを使用していました。
同一リージョンにひとつ
コストの問題で、本番と開発サーバで異なるリージョンを利用していたため、本番と同一の環境での試験ができませんでした。
## 至らなかった点
- テストが書けなかった
- バッチでユーザのデータを消した
- サーバが乱立していた
### テストが書けなかった
既存のコードについて一部テストが存在していましたが、途中からテストが書かれなくなっていました。
テストが書かれなくなった理由は、DynamoDBを利用することでテストのしにくい環境になっていたのが原因でした。
テスト用のドライバを作るなどの対応が必要だったかと思います。
これ以降に参加したプロジェクトでは、以下のようにしました。
- そもそもテストが書きにくい設計にしない
- テストが書かれていないコードはマージしない
### バッチでユーザのデータを消した
日次でユーザのデータを書きかえるバッチを作った際、本来変更する必要のないユーザのデータまで変更してしまうバグを発生させました。
これ以降バッチを実行するときには、以下のようにしました。
- よくよく動作確認をする
- 小物のバッチでもテストを書く
- レビューがされていても、実行する前には自分以外の人間とコードを読みなおしてから実行する
### サーバが乱立していた
このプロジェクトには以下のサーバが存在していました。
- httpのAPIサーバ
- websocketによるリアルタイム対戦サーバ
- websocketによるチャットサーバ
- websocketによるルームサーバ(パーティを組むときにユーザが待機するサーバ)
- 管理ツール
- 日次、週次で実行されるバッチサーバ
- お問いあわせサーバ
このため、管理しなくてはいけないサーバが多く、またデプロイ先が非常に多く苦労しました。
これ以降は以下のような設計をするようにしました。
- 日次など定期的に実行するバッチが必要にならない設計
- お問いあわせなど、サービスの本体に関わらないものについてはlambda+APIGatewayでサーバレスな構成にする
- websocketのサーバはまとめる