# プロジェクト概要
- 工具の所在を管理するシステムの開発です。
自社パッケージソフトでも工具管理システムはありますが、ユーザー向けに独自に開発しました。
# 担当
- 自社パッケージソフトでも工具管理システムはありますが、ユーザー向けにカスタムして欲しいとの要望があり、要件定義から開発、テスト、保守までの行程を担当しました。
# 規模
- 1名(自分)
# 何をしたか
## MVVMの導入
### 課題
- 弊社のプロダクトは基本的にアーキテクチャを用いた設計がされておらず、Mainクラス〇万行、Commonクラス△万行のような構成でした。
それでは年月が経つにつれ保守性が悪くなり、開発生産性が低下することが課題と考えていました。
- 今回の案件はユーザー独自のプロダクトとなるため(開発側が全員携わらないため)、見通しの良い設計にし、コードを読めばある程度の仕様が分かる状態が理想と考えました。
### 対策
- 以下の理由から、MVVMを採用しました。
- WPFと相性が良い
- Viewと中間層(ViewModel)を疎結合にできる(データバインディングの利用)
- 各層の依存方向を統一できる
- クラス間の結合度を低くするため、DIを導入しました。
## 納期を意識した開発
### 課題
- 開発納期が約2か月しかなく、さらにコロナ禍により出社日が半減したことで、どうやって間に合わせることができるかが問題でした。
### 対策
- MVPの制定
- "どこまでやるか"を開発初期に決めておく必要があると考えたため、ユーザーと打合せをし、最低限これだけは必要な機能を決めました。
"やること"、"やらないこと"が明確になったことで、スケジュールが組みやすくなりました。
- ORMの導入
- 開発スピードを少しでも上げるため、ORMを導入しました。また、開発者によるクエリのばらつきを減少させる効果も狙っています。
# 次に活かせる学び
- MVVMを用いた開発は初めてだったのですが、短い納期での開発でも新たな技術に取り組むチャレンジが出来たため、非常に学びの多いプロジェクトでした。
- このプロジェクト以降、社内でもMVVMを検討するプロジェクトが増えつつあり、社内プロダクト全体の保守性向上の一助になったのではないかと考えます。
- MVPで盛り込めなかった機能については、今後追加する予定ですので、そういった意味でも保守性を意識した設計を採用して良かったと考えます。