株式会社ゆめみ Android エンジニアコードチェック課題
概要
本プロジェクトは株式会社ゆめみ(以下弊社)が、弊社に Android エンジニアを希望する方に出された課題のベースプロジェクトです。
本家プロジェクトは、こちら
アプリ仕様
本アプリは GitHub のリポジトリを検索するアプリです。
環境
本家プロジェクトで指定された環境に合わせています。
- IDE:Android Studio Arctic Fox | 2020.3.1 Patch 1
- Kotlin:1.5.31
- Java:11
- Gradle:7.0.1
- minSdk:23
- targetSdk:31
動作
- アプリを起動する
- 検索バーに適当なキーワードを入力する
- GitHub API(
search/repositories
)でリポジトリを検索し、結果一覧を概要(リポジトリ名)で表示する
- 特定の結果を選択したら、該当リポジトリの詳細(リポジトリ名、オーナーアイコン、プロジェクト言語、Star 数、Watcher 数、Fork 数、Issue 数)を表示する
採用アーキテクチャ
MVVM + UseCase + Repository パターンを導入しました。
このアーキテクチャの導入を実現するために、Dagger Hilt ライブラリによる依存性注入を使用しています。
参考資料: Hilt を使用した依存関係の注入
プロジェクト内のディレクトリ構造
- data
- api
- 外部ネットワークとのAPI処理を担当します
- 今回のプロジェクトでは、GithubSearchAPI との処理を行っています
- repository
- ネットワークやDB、ファイルIOなどのデータソースへのアクセス処理を担当します
- 今回のプロジェクトでは、アプリ層からのネットワーク通信処理の依頼を対応しています
- di
- Dagger Hilt での依存性注入処理に必要な対応をしています
- 今回のプロジェクトでは、Class と Interface の紐付け処理を行っています
- model
- データを表現するオブジェクトクラスの管理を担当します
- 今回のプロジェクトでは、GithubRepositoryData クラスを管理しています
- ui
- アプリデータの表示やユーザー操作によるイベント対応や変更処理を担当します
- データの保持と処理は、ViewModel が対応します
- usecase
- ui 層と data 層の間で、複雑なビジネスロジック処理を担当します
- 今回のプロジェクトでは、data 層から取得したネットワーク通信結果を変換する作業を行っています
- utilities
- 補助的な機能処理を担当します
- 今回のプロジェクトでは、RecyclerView で必要な Adapter クラスの管理をしています
リファクタリングする際に意識した点
- 既存実装方法に不具合がない限り、現在の実装方針を踏襲するように心がけました
- コメントがなくても、クラス名やメソッド名、変数名からやっている処理を理解できるように努力しました
- Google が推奨しているアーキテクチャを採用することで、他者がオンボーディングしやすいプロジェクト構成にしました
- Dagger Hilt を導入したアーキテクチャを採用して、シンプルな依存関係のアーキテクチャを作るように努力しました
- テストケース名とその内容から、アプリ処理の仕様が理解できるように工夫しました
ボーナス対応
- UI をブラッシュアップ
- 検索アイコンボタンを押下したら、ソフトキーボードが非表示となる
- 検索処理中なことが分かる UI (プログレスインジケータ)を導入する
- SearchResultsDetailFragment の AppBar に戻るボタンを導入する
提出方法
本プロジェクトのリポジトリを public にした状態で、URL を共有する。
参考記事