# プロジェクト概要
- 医療廃棄物の登録・運搬をするシステムのリプレイス案件
- WEBシステムとAndroidバーコードスキャナーアプリがある
- 廃棄物収集業者がオフィスなどでWEBシステムから廃棄物やその他さまざまな設定を行う
- 廃棄物収集業者が現場でAndroidのバーコードスキャナーを使って廃棄物を登録する
- フリーランスとして受託開発企業に参画
- 参画先企業のチーム人数はAndroid3人、WEB5〜7人
- 基本リモートで作業(必要に応じて参画先企業のオフィスで作業)
# 使用言語・フレームワーク・ツール(Android)
## 言語
- Android Java
- SQL(SQLite)
## フレームワーク・ライブラリ・その他技術
- Retrofit
- Rx Java
- Room
- Shared Preference
- Gradle
- Butter Knife
- starのプリンタのSDK
## その他使用ツール
- Git
- Git Bucket
- Android Studio
- Redmine
- Excel
- Word
- Skype
- Microsoft Teams
# システム概要・アーキテクチャ
- 基本的にAndroid内にDB保持(RxJava、Room使用)
- 必要な分のDBデータを加工してWeb APIで送信(jsonでHttp通信、RxJava、Retrofit使用)
- Activity、FragmentからUseCaseを作成してWeb APIやDBの処理を実行
- WEB側は関わっていないのでシステム構成は分かりません
# 担当業務
- Androidバーコードスキャナー旧システムの把握
- 基本設計(参画先企業が作成した要件定義書を元に仕様書を作成)
- 発注元企業との調整(質問表でのやりとり、画面イメージ図・遷移図・表などの作成)
- Web APIの設計(送受信パラメータの決定など)
- DBテーブルの設計
- 実装(参画先企業の他プロジェクトのソースをベースに新規作成、プリンタ印刷・DB・API・レイアウト・画面動作など3/4ぐらい作成)
- テスト(参画先企業が作成したテスト項目書でテスト、不具合修正)
# 取り組んだ課題など
## Room
- Roomを使用するのは初めてだったがGoogle公式のドキュメントを参考にし、Web系のMVCのフレームワーク(Laravelなど)の経験も生かして実装した
- 複数テーブルにまたがる場合の処理は、Roomのリレーション機能などを利用してなるべくSQL実行回数を減らすように工夫した。その結果、画面表示や処理の実行速度が早くなった。
- Roomを使用するためのベース部分を参画先企業のAPIの処理と似たような形(RxJavaでUseCaseを作成する形)で作成した。狙いは、参画先企業の社員でも後で改修しやすいようにするため。
## プリンタ
- プリンタSDKの仕様を把握していない人でも簡単に再利用できるようなクラスを作成した
- プリンタSDKが幅が小さい用紙(指定された用紙)に対応していなかったので、旧SDK(低レベルでバイト単位でコマンドを送る形式)と併用して右寄せ・左寄せの機能を実現した
# 反省点
- 仕様書を作成するとき最初から細かい部分まで仕様を記述したが、後ほど他の画面の仕様決定などによる仕様変更で再度記述するなどしなければいけなくなり時間がかかってしまった。今後は修正が発生しそうな場所はざっくり仕様を記述して、ある程度全体の仕様が決定してから細かい部分まで仕様と記載するようにして、作業時間が短くなるようにしようと考えている。
- 参画先企業の要望で実装が短時間できるように表の部分で再利用をできるクラスを作成したが、描画に1〜2秒ほどかかってしまい遅くなってしまった。実装時間削減を狙うなら狙い通りだが、ユーザビリティを優先する場合は個別にListViewやRecyclerViewで個別に実装した方が良いと感じた。個人的には納期に余裕がある場合は個別実装をしたい。