【5月】AWS + Laravel + React.jsでオセロゲームを作ってみる
#概要
の続きオセロのwebアプリ開発過程の技術に関する学びや考えを記録していきます。
(といいつつほぼ日記です)
ドメイン再考
フロントとの連携に頭を使いすぎ、ドメインへの理解・開発が疎かになってきていたのでここで立ち返ってみる
- モデリング
- 各ドメインモデルの役割が曖昧だった
- 処理フローが複雑になっていたので整理したかった
- ユースケースをシングルアクションに
- 松岡さんのブログを参考に
- 合わせてテストのカバレッジを上げていく
- そのためにもクラス同士の結合度を下げ、テストしやすくしていく
ドメイン再分析
純粋なオセロのルールとゲームモードや参加者、ボットなどのオセロアプリケーションとしての機能を分離
ついでにスキップも廃止
Before
Game
- id
- GameMode
- Participants
- GameStatus
- Turn
Turn
- TurnNumber
- PlayableColor
- Board
- SkipCount
After
GameApp
- id
- GameMode
- Participants
- GameStatus
- Turn
Othello
- TurnNumber
- PlayableColor
- Board
ElastiCache(Redis)導入
久々の更新。。
ドメイン層のリファクタリングに疲れてきたので別のことを、ということでフロントとの連携を考慮してRedisを使えるようにする。
ElastiCache
AWSコンソール上でこのあたりの記事を参考にRedisクラスターを立ち上げる
実験用なのでクラスターモードオフ、マルチAZオフ、cache.t2.microの省エネ(?)構成でいく。
セキュリティグループを設定し、EC2インスタンスからのみアクセス可能にする。
Laravel側の設定
ここに一番苦労した。
Laravelで主に利用できるRedisクライアントはphpredisとpredis。
仕事でpredisを使ったことがあったため、php拡張(C言語で実装)でパフォーマンス良さげ、なphpredisにチャレンジしてみるもEC2への拡張機能周りのインストールで苦戦。
結局、PHPでの実装&composer一発でインストール可能なpredisを導入。
数年前はメンテされていない問題があったようですが、最近は開発が再開されており問題はなさそうと判断。
ついでにgit-secretsを自前PCにインストール
AWSの機密情報を含んだファイルをgitでcommit, pushしようとするとブロックしてくれる優れもの。
DB周りを触っていくことになるのでクレデンシャル情報流出の事前対策として改めて導入。
リファクタリング続き
サーバーをメンテナンスモードへ
ドメイン層の大幅なリファクタリングに伴い、Laravelによる既存MPAサイトをいったん閉鎖。
SPAのバックエンドAPI化に向けて再度リファクタリング。
集約名を再考
- 純粋なゲームとしてのオセロを機能を提供する一番基本的な枠組みとしての
OthelloFramework
- プレイヤーやBotなどを巻き込んだ対戦機能を
OthelloBattle(Competition)
orOthelloGame(Match)
クローズにあたり追記
- バックエンドのPHPとフロントエンドのReactをAPIを介してつなぐ方針はいったん中止
- PHPの開発も停止中ですが、現状mainブランチが正しく動いていないので修正を行うかもしれません
- フロントエンド側は別プロジェクトとして開発していく
- バックエンドを必要としない単体のSPAとして開発中