2019年振り返り

2019年残すところ1年になったので、携わったプロジェクトを振り返ってみたいと思います。

 

自身は、開発だけをやっていたのではなく、PM、ディレクション、品質管理など全般に関わる立場でした。

 

開発プロジェクトは2件あり、どちらも研究用に使用するアプリ開発で、主に使用した技術キーワードは、以下のとおりです。

 

- Bluetooth

- Unity(C#)
- TypeScript
- AWS Serverless
- Terraform
- React

 

プロジェクト開始時点で、社内ノウハウがあったBlueooth、Unity、AWS Serverless、Reactなどを中心に、自身もいくつか新しい事を学びながら、フリーランスのメンバーに助けてもらいながら開発を行いました。

 

Unityアプリ開発は、Bluetoothで接続される機器の接続やセンシングに関わる部分は、社内のエンジニアが作ったものを引き継ぐ形でメンテナンスし、アプリ自体の制作や開発は、開発会社に委託。

 

バックエンド開発(AWS Serverless, TypeScript, Terraform, CircleCI)は、フリーランスのエンジニア1名で開発。


Webフロントエンド開発(TypeScript, React)は、フリーランスの完全リモートのエンジニア1名で開発。UI制作は私とUIデザイナーで行いました。

 

自身が過去に使ったことのない技術要素を管理する必要がでてきて、幅広く対応が必要でした。

 

プロジェクト当初は、開発チームの立ち上げ、Unityでのアプリ開発会社との技術連携などのサポートを中心に、サンプルアプリ開発、センシングデータ取得のための実験や分析などを行う傍ら、アプリ側ではなくサーバーサイドで処理する部分の要件定義、仕様策定、さらにはUIの要件定義を顧客ヒアリングから要件定義、WF作り、フロントエンジニアへの社内ノウハウの技術情報連携などなど、結構てんこもりでした。

 

その後、プロジェクトが動き始めて、調整仕事が中心になるかと思いきや、思いの外アプリ開発側の進捗がよくなく、さらにアプリの要件などが定まりきっていなかった箇所が後からごろごろ出てくるようなプロジェクトになってしまい、要件の整理と開発中の仕様変更の調整をアプリ開発側とバックエンド側、Webフロント側とが分断された環境で開発しているのをマネージするのが大変でした。

 

プロジェクト後半になると、アプリ開発側の進捗遅れから、バックエンド側とフロントエンド側の開発が一段落し、全体統合テストする前にメンバーをリリースする必要が出てきたので、全て自分で引き継ぐ形になりました。

 

幸い、引き継いだバックエンドとWebフロントエンドはよく出来ており、バックエンドはClean Architectureに則りUseCase/Gatewayなどが分離されていて、API定義もSwaggerで、テストもCircleCIで実行できるようになっていたので、変更や追加は容易になっていました。

あと、Web関連のプログラミング言語をTypeScriptに統一することで、学習コストを下げることができました。

API GW, Cognito、Lambda, DynamoDBとSwaggerぐらいの知識しかないところからCloudFormation/Terraformを使ってコード化された仕組み、Clean Architecture、CircleCIの実行内容などを追って理解するには、そこそこ時間がかかった気がします。

 

フロントエンドもReact/Redux、React Hooksなど、React周りを本格的に開発したことがない状態から機能追加や変更に対応できるのにはそれほどかからなかったとは思います。

 

今年のプロジェクトの教訓は、フレームワークや設計思想に則って開発することの大事さを改めて認識しました。

 

フレームワークに則ったバックエンドやフロントエンドは統合テストやユーザーテストであぶり出したバグも少なく変更は容易という時間があり、則っていないアプリ側は、バグも多く変更も時間がかかっていた印象です。

 

学習の敷居の高さや、ちょっとした変更を手軽に行えない事から敬遠しがちなのですが、その敷居を乗り越えるメリットは大いにあると思います。

 

研究用で一時的に使われるプロダクトであっても、後からそれをベースにしたり参考にしたりするプロジェクトになることも大いにありうるので、多少苦労はしても学習の敷居の高さを乗り越える姿勢は大事だと思います。