# プロジェクト概要
[参考HP](https://inquiry.h-navi-biz.jp/)
障害福祉施設は、事業所の運営に当たって多くのルールが定められており、事務作業に多くの時間を割く必要がある
***より多くの時間を支援に割く***ことを目的とした事務作業支援サービス
## プロジェクト規模
- プロジェクト総人数は20人弱
- 全5チームから構成
- 3人前後/1チーム
## 技術スタック
### ソフトウェアアーキテクチャ
- ドメイン駆動設計 + クリーンアーキテクチャ
- SPA
- マイクロサービス
- マイクロリポジトリ
- 総リポジトリ数:11
- 総DB数:5
### アプリケーション
- PHP 8.0
- Laravel 8
- SnowFlake
- Java 11
- Spring Boot
- poi
- Vue.js
- Nuxt.js
- Pug
- atomic design
- MySQL 5.7
### デプロイ機構
- CircleCI
- Ansible
### その他
- DataDog
- esa
- Github
- Docker
- AWS
- S3
- CloudWatch Logs
- Secret Manager
- Lambda
## 役割
- ***チームリーダー***(施設利用料の***請求業務***機能チーム)
- 厚労省が公開している障害福祉にかかわる資料を基にシステム開発を進める
- 資料例
- [障害者の日常生活及び社会生活を総合的に支援するための法律に基づく指定障害福祉サービス等及び基準該当障害福祉サービスに要する費用の額の算定に関する基準等の制定に伴う実施上の留意事項について](https://www.mhlw.go.jp/content/000789561.pdf)
- [障害福祉サービス費等の報酬算定構造](https://www.mhlw.go.jp/content/000759623.pdf)
- チーム全体の設計力底上げ
- 立ち上げ当初は機能実装スピードが基準を下回っている状態だった
- メンバーが設計に自身がなく、完成しているもののレビューに出しづらい
- 設計されたものの意図をくみ取れず、実装自体も曖昧な状態
- 設計実装をモブで実施し、設計意図や実装時のパターンを共有レビューしながら作業してもらい、開発自体をある程度パターン化
- 結果的に実装スピードとレビュー負荷の改善ができた
### 実務
- チームマネジメント
- GitHub Projectを使用したIssue管理
- esaを使用した他部署との仕様折衝
- ドメイン知識理解が薄いメンバーへastahを用いた業務や設計意図の説明
- 画面ラフ作成
- 現職の前身プロジェクトが存在したため、メインデザインを踏襲しながら作成
- 関係部署と議論・レビューをしながら進行
- 設計
- ドメイン駆動設計 + クリーンアーキテクチャをベースに機能実装フェーズごとにクラス図を作成
- ドメイン知識や処理フローを適宜astahで説明
- 実装
- モブプログラミングを用いてメンバーのドメイン知識、実装の質を底上げ
## 課題解決
- 帳票検証
- 既存プロジェクトでは単体試験でExcel帳票を出力するコードを実装し、出力されたExcelを目検で検証していた
- Excelの要素をJson出力するライブラリを作成し、Jsonレベルで期待値とのAssertをするように改善
- https://github.com/no-dumps/cell-info-2-json
- クラス再設計
- 既存プロジェクトでは1つの関心ごとに対してバリデーションロジックやドメインロジックが複数個所に散らばっていることが原因で修正および考慮もれが発生していた
- 関心ごとにたいして複数のドメインがぶら下がる場合はFactory Methodパターンを使用する方針を定めることでドメイン知識を集約し、プロジェクト自体の見通し向上を達成
- ERD設計
- 前身プロジェクトに存在しているものは踏襲しながら運用で発覚した課題を改善
- NULL制約に複数の意味を持っているカラムや同一レコードにてカラムの組み合わせでデータが入るか決まるようなパターンは徹底排除
- プロジェクト全体でのコーディングクオリティ担保
- 全リポジトリにphpstan、review dogを導入し、CircleCIジョブに組み込み