DMM オンラインサロン専用コミュニティ(Web)
https://salon.dmm.com/
DMM オンラインサロン専用コミュニティ(アプリ)https://itunes.apple.com/jp/app/dmm-オンラインサロン/id1374134751
概要
オンラインサロン,つまりクローズドコミュニティとしてユーザに新たな居場所を提供するための,SNSプラットフォームを開発した。UI や機能は Slack・Facebook・Twitter などメジャーな SNS の影響を受けつつも本当に必要なものだけを残し,またそれらには無い独自の機能も取り入れている。
開発人員
途中で人員変更があったため,一番長く続いた期間のものを示す。
・プロダクトオーナー1名
・スクラムマスター1名
・Webデザイナー1名
・Webエンジニア3名(自分)
・インフラエンジニア1名
構成および自分の担当範囲
・React
React 15(現在16)でSPAとして開発。 Recompose を使用。
Redux + Redux Saga もふんだんに使用しているため,Moducks も採用した。
Laravel Echo で流れてきたブロードキャストイベントを Redux アクションとしてリアルタイムで拾える。
設計およびコーディングの30%程度を担当。
・React Native
Web で作ったものを iOS アプリとしても提供するために使用。最初はコンポーネントの使い回しをしようと考えていたが,限界を感じたためDRYを諦めて作り直した。
ナビゲーションライブラリとして React Navigation を採用,その他要件を満たすため Expo からeject した上で多数のネイティブライブラリを導入。
設計およびコーディングの30%程度を担当。
・Laravel
Laravel 5.4 (現在5.8)で開発。
本番環境は Amazon Elastic Beanstalk - Multi Container Docker。
Eloquent Model をエンティティとして利用しつつ,ビジネスロジックもそこに集約させるコンセプトで書いた。認証・認可・ルーティング・リレーション・通知など多岐に渡ってサービスプロバイダを継承し,抽象化やDRYが徹底できるようにカスタマイズしている。認証まわりの機能拡張に関してはプルリクエスト1件を laravel/framework リポジトリに提出し,既にマージされてリリースされている。
ページネーションには Lampager を利用している。Elasticsearch に限っては,Elasticsearch 6 以降に対応した Laravel アダプタが存在しないため,(公式の PHP SDK を使用する以外)ゼロからコードを書いて抽象化の仕組みを実装した。
テストカバレッジは80%~90%を維持している。
設計およびコーディングの90%以上を担当。
・Laravel Echo Server
・Aurora (MySQL)
・ElastiCache (Redis)
・Elasticsearch