Closed6

【5月】AWS + Laravel + React.jsでオセロゲームを作ってみる

ebinaebina

ドメイン再考

フロントとの連携に頭を使いすぎ、ドメインへの理解・開発が疎かになってきていたのでここで立ち返ってみる

  • モデリング
    • 各ドメインモデルの役割が曖昧だった
    • 処理フローが複雑になっていたので整理したかった
  • ユースケースをシングルアクションに
ebinaebina

ドメイン再分析

純粋なオセロのルールとゲームモードや参加者、ボットなどのオセロアプリケーションとしての機能を分離
ついでにスキップも廃止

Before

Game

  • id
  • GameMode
  • Participants
  • GameStatus
  • Turn

Turn

  • TurnNumber
  • PlayableColor
  • Board
  • SkipCount

After

GameApp

  • id
  • GameMode
  • Participants
  • GameStatus
  • Turn

Othello

  • TurnNumber
  • PlayableColor
  • Board
ebinaebina

ElastiCache(Redis)導入

久々の更新。。
ドメイン層のリファクタリングに疲れてきたので別のことを、ということでフロントとの連携を考慮してRedisを使えるようにする。

ElastiCache

AWSコンソール上でこのあたりの記事を参考にRedisクラスターを立ち上げる
https://qiita.com/mt2/items/af916608dfb8c4fc72c8

実験用なのでクラスターモードオフ、マルチAZオフ、cache.t2.microの省エネ(?)構成でいく。
セキュリティグループを設定し、EC2インスタンスからのみアクセス可能にする。

Laravel側の設定

https://readouble.com/laravel/9.x/ja/redis.html

ここに一番苦労した。
Laravelで主に利用できるRedisクライアントはphpredisとpredis。
仕事でpredisを使ったことがあったため、php拡張(C言語で実装)でパフォーマンス良さげ、なphpredisにチャレンジしてみるもEC2への拡張機能周りのインストールで苦戦。

結局、PHPでの実装&composer一発でインストール可能なpredisを導入。
数年前はメンテされていない問題があったようですが、最近は開発が再開されており問題はなさそうと判断。
https://github.com/predis/predis

ついでにgit-secretsを自前PCにインストール

AWSの機密情報を含んだファイルをgitでcommit, pushしようとするとブロックしてくれる優れもの。
DB周りを触っていくことになるのでクレデンシャル情報流出の事前対策として改めて導入。
https://qiita.com/pottava/items/4c602c97aacf10c058f1

ebinaebina

リファクタリング続き

サーバーをメンテナンスモードへ

ドメイン層の大幅なリファクタリングに伴い、Laravelによる既存MPAサイトをいったん閉鎖。
SPAのバックエンドAPI化に向けて再度リファクタリング。

集約名を再考

  • 純粋なゲームとしてのオセロを機能を提供する一番基本的な枠組みとしてのOthelloFramework
  • プレイヤーやBotなどを巻き込んだ対戦機能をOthelloBattle(Competition) or OthelloGame(Match)
ebinaebina

クローズにあたり追記

  • バックエンドのPHPとフロントエンドのReactをAPIを介してつなぐ方針はいったん中止
  • PHPの開発も停止中ですが、現状mainブランチが正しく動いていないので修正を行うかもしれません
  • フロントエンド側は別プロジェクトとして開発していく
    • バックエンドを必要としない単体のSPAとして開発中

https://zenn.dev/ebiiina/scraps/6da46f891a9a7f

このスクラップは2023/05/04にクローズされました