viewsこんにちは、Androidアプリエンジニアの藤樫(とがし)です。OpenWorkのAndroidアプリをどうやって作っているかざっとご紹介します。メーカーに入社し、Android端末の開発に携わっていました。アプリ屋さんではなく、オシロスコープ片手にC言語を駆使してLinuxカーネルやデバイスドライバなどを弄り回したり、時には中国の工場に出張して試作のサポートなどをしていました。7年半ほど勤めた後にAndroidアプリエンジニアとして某セキュリティベンダーに転職し、その後1人目のAndroidアプリエンジニアとしてオープンワーク(当時のヴォーカーズ)にジョインしました。最近子どもが生まれて毎日がサバイバルです。アプリ概要OpenWorkのAndroidアプリはフルKotlinで立ち上げました。Architectureを念頭に置きつつ、データレイヤー、ドメインレイヤー、プレゼンテーションレイヤーに分け、レイヤー間の依存を原則ドメインレイヤー方向のみへと制限しています。データ構造とそれを操作/判定するロジックをエンティティにまとめてユニットテストを書いていくという、基本的なモデリングを粛々とやっています。非同期処理は基本的にRxKotlinで書いています。アーキテクチャ現在Androidチームは少人数で、時にはビジネス要求の兼ね合いで外部パートナーと開発することもあるため、複雑に作り込んだアーキテクチャで最初の理解に時間がかかったり、画面やウェブAPI定義追加時にボイラープレートをたくさん書かなければならない状態は避けたいと考えていて、自分なりにバランスを探りながら開発を進めています。各レイヤーの制約は後述する程度にとどめたり、本来定義すべきレイヤー間のインターフェース群などは端折っています。これがベストかはわかりませんが、幸い今まで大きな問題を起こさず、かつ開発効率を維持できています。データレイヤーリポジトリパターンを採用し、APIリポジトリ、DBリポジトリ、SharedPreferencesリポジトリなど詳細の実装と、必要に応じてそれらをまとめてドメインレイヤーにRxでデータを流すリポジトリを用意しています。ドメインレイヤーバックエンドサーバーのAPIのレスポンスやリクエストに対応するデータ構造を表現するエンティティを定義し、エンティティ自身にデータ整形関数やバリデーションロジックなどを持たせています。複数のリポジトリをまとめるユースケースを定義しています。基本的にAndroidフレームワークに依存は持たず、ホストマシンでユニットテストを実行可能にしています。プレゼンテーションレイヤーActivity、Fragment、ViewModel、カスタムView、Androidフレームワークに依存するViewに対応するモデルなどを置いています。Bindingを利用し、ActivityやFragmentは出来るだけ画面遷移や表示データの紐付けだけを行い、表示に必要なデータやロジックはViewModelに書いています。単純にデータをバインディングできない場合は、レイアウトXMLに複雑な条件式を書かずにBindingAdapterを自作して、Robolectricでユニットテストを書いています。ViewModelはコンストラクタでユースケースを受け取るようにして、モックでユニットテストが書けるようにしています。Binding、Navigation、Room、WorkManager)など出来るだけ公式のものを採用しつつ、デファクトスタンダードであるOkHttp、Retrofit、RxKotlin/RxJava、Glideというのが基本構成です。準公式(?)のFlexboxLayoutは動的なタグ表示などで大変重宝しています。RecyclerViewのライブラリは日本だとGroupieの解説記事が多い印象ですが(DroidKaigiアプリに採用された影響?)、カルーセルなど多様なリストのサポートを見据えてEpoxyを採用しました。Groupieでもできそうですが、Epoxyは公式Wikiにカルーセルの説明があったり、ちょっと使ってみた感じ割とスムーズに使い方を理解できたので。hiring!OpenWorkアプリは新機能追加や機能改善やリファクタリングなどまだまだやることが盛りだくさんです。少人数のため担当範囲が広く、改善のアイディアもどんどん提案して議論していける環境です。Androidアプリエンジニアモバイル機器の下から上までのソフトウェア開発をしてきました。Da...Followオープンワーク株式会社オープンワークは「さあ、自由に生きよう。働きがいをすべての人へ」を企業理念に掲げ、転職・就職のための情報プラットフォーム「OpenWork」を運営している会社です。OpenWorkは、社員のクチコミによって企業の労働環境をオープンにし、企業と個人のより良いマッチングをサポートするプラットフォームです。社員クチコミを中心としたワーキングデータによって、働く個人の意思決定を支援します。国内最大級の社員クチコミを有する、転職・就職のための情報プラットフォームです。実際に働いた経験に基づく「社員の声」を共有しています。Vorkers独自の会社評価指標から求人情報を検索することが可能です。「待遇面の満足度」「風通しの良さ」「ワークライフバランス」等、求める働きがいを得られる求人探しをサポートします。OpenWorkに投稿された「会社評価レポート」の回答データを元に、「働きがい」を数値化するためのデータ集計・分析を行い、調査レポートとして定期的に発表しています。