# プロジェクトの概要
## 概要
マンション管理を一元化する大規模データを扱うツールの開発・運用を行なっている
## 主要機能
- 発注、支払い、請求の月次・年次の管理
- 収支計算
- PDF書類作成
- 部屋管理
- 駐車場などの共同部管理
- 理事会の役職管理
## 技術スタック
- フロントエンド:Vuejs, Javascript
- バックエンド:PHP/Laravel, Nodejs, Auth0
- インフラ:Docker, AWS ECS, RDS, SES, Lambda, S3, Redis
## 担当した役割
フロントエンドおよびバックエンドエンジニアとして、保守運用・追加機能開発を行なった。
# 発揮したバリュー
## 前任者退職に伴う短期間でのキャッチアップ
### 課題
重要機能の一つである「請求」を担当していた前任者が急遽退職することになったため、`1ヶ月半の短期間で`主要ロジックが詰まった「請求」に関わる`膨大な知識を引き継ぐ必要があった`。
### 工夫
前任者しか把握していない仕様や請求の`主要な機能をリストアップして優先度順を決めて`、毎日の定期的な引継ぎmeetingを設けたうえで`短期間で効率よく引継ぎができるように尽力した`。結果的に、前任者退職後も特に問題なく業務を進めることができた。`引継ぎ完了後は`、テストコードが不十分な箇所を中心に`テストコードを充実化させ`、アクティビティ図などを活用して積極的に`ドキュメント整備を行った`。さらに、メンバーの業務内容をシェアをする定期Meetingを設けるなど、`俗人化を減らすことに尽力した`。その結果、私が別案件に移動する際も、`2週間の短期間で「請求」の引き継ぎを行うことに成功した`。
## アプリチームとの連携
### 課題
WEB, iOS, Android版のアプリが存在するが、開発の仕様についてWEB側とアプリ側、さらにアプリの中でもiOSやAndroidのメンバーでも認識が異なることが多々あり、コードレビューや動作確認後に手戻りが発生するケースが散見されていた。
### 工夫
手戻りの多くが認識の不一致であったため、シンプルにmeetingを増やして合意が取れた内容をドキュメントにまとめ、プルリクの内容(仕様書や議事録、スクリーンショット画像の添付など)を充実させ、オンラインでありながらも密なコミュニケーションを心がけた。当然、認識不一致による手戻りが減少した。
## DBのロック機能を活用した多重登録の改善
### 課題
処理が重い登録機能において、ダブルクリック等でレコードが重複してしまうという課題があった。この課題に対して、登録機能の前に重複を確認する処理が導入した。しかし、登録処理に時間がかかる場合には重複チェックの際にまだ1回目のデータが登録されておらず2回目以降のデータ登録がされてしまうという問題が発生した。
### 工夫
DBのレコードの重複チェックに加えて、DBのロック処理を提案・導入した。これによって、登録処理の最初にレコードに対して読み取りロックをかけることで2回目以降の処理は1回目の処理が終わるのを待ってから動作することとなるため、重複チェックが正常に動作し問題が解決された。
## パフォーマンス改善を意識した実装
### 課題
DBには、万を超える膨大なレコードがあり、一つ一つの処理に非常に時間がかかってしまっていた。
### 工夫
N + 1問題を引き起こさないために`EagerLoad`を意識し、`クエリーを確認しながら、パフォーマンスを意識して`データの抽出ロジックを意識し実装を行なった。