3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ゆめみの Android の採用コーディング試験に挑戦してみた🖊

Posted at

株式会社ゆめみの Android の採用コーディング試験に挑戦してみました💪

app-demo.gif

作成したもの

android_search_view.png

android_search_light.png

android_detail_fixed.png

android_detail_light.png

なんで挑戦したの??

Android 開発の技術力を確かめるためです😎
有名IT企業のコーディング試験なので腕試しに良いと思いました😊
また、コーディング試験を体験することで新しい学びがあるだろうと考えました。

期限は?

実際のコーディング試験の期限は1週間とありました。この挑戦の期限を 3月5日(水) 18:00 ~ 3月12日(水) 18:00 (EST) としました。平日は仕事をしているので帰宅後の 3 時間、土日を 8 時間ずつ作業をして計 34 時間の作業時間でした。

どんな試験?

GitHub のリポジトリを検索するアプリをリファクタリングするものでした。
初級、中級、ボーナス課題に取り組みました。

取り組んだこと

リファクタリングで行ったことを大まかに紹介したいと思います🖊

公式推奨のアーキテクチャ

Domain があると DB ライブラリや API クライアントを変更する際は Data レイヤのみ修正すれば良いので後から変更しやすいという点があると感じました。

README を Markdown で表示

Markwonを使用してREADME.mdを DetailFragment で表示する機能を実装しました。
以下のコードで README.md を取得します。もし取得できなかった場合は Place Holder のテキストを表示します。

 val url = "https://api.github.com/repos/$fullName/readme"

ユニットテストと E2E テスト

こちらのページを参考にしました。Data レイヤRepositoryDomain レイヤUseCase, UI レイヤViewModelのユニットテストを作成しました。
core-testing の別モジュールにユニットテストと E2E テストで使用するモックデータを作成しました。

object TestHttpClientProvider {
    private val FAKE_RESPONSE_BODY = """
                {
                    "items": [
                        {
                            "full_name": "MyTestRepo",
                            "language": "Kotlin",
                            "stargazers_count": 42,
                            "watchers_count": 42,
                            "forks_count": 10,
                            "open_issues_count": 5,
                            "owner": {
                                "login": "ownerName"
                                "avatar_url": "https://example.com/avatar.png"
                            },
                            "description": "Description"
                        }
                    ]
                }
            """.trimIndent()

    fun createHttpClient(): HttpClient {
        val mockEngine = MockEngine { _ ->
            respond(
                content = ByteReadChannel(FAKE_RESPONSE_BODY),
                status = HttpStatusCode.OK,
                headers = headersOf(HttpHeaders.ContentType, "application/json")
            )
        }
        return HttpClient(mockEngine) {
            install(ContentNegotiation) {
                json(Json { ignoreUnknownKeys = true })
            }
        }
    }
}

学んだこと

UI・Domain・Data の3層構造で実装することにより後から変更がしやすいと感じました。初めて espresso を使用して E2E テストを作成しました。Dagger Hilt を使用することで簡単にモックデータに置き換えることが出来ました。

出来なかったこと

UI を JetpackCompose に変更することが一週間では出来なかった。

最後に

Android の採用コーディング試験を公開してくださった株式会社ゆめみさんありがとうございます🙏

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?