これはEureka Advent Calendar 2020の5日目の記事です。

はじめに

こんにちは!Androidエンジニアのyuyakaidoです。

Android開発では複数のモジュールを組み合わせて1つのアプリを組み上げるアプローチが採用されることが増えてきています。このアプローチはマルチモジュールとも呼ばれ、Pairsも2019年からモジュールの分割に取り組んでいます。元々は単一で巨大なAppモジュールのみで構成されていましたが、Feature単位でモジュールを分割するアプローチをベースとして、状況によってはアーキテクチャのLayer単位でのモジュール分割も組み合わせる形でモジュール分割を進めています。

Pairsでのモジュール分割方法については、私が2019年のEureka Advent C …


これはEureka Advent Calendar 2019の18日目の記事です。

はじめに

こんにちは!Androidエンジニアのyuyakaidoです。

最近はアメリカ再建のために運び屋として北米大陸を横断したり、地球を救うためにアンドロイドとして機械生命体と戦ったりする毎日です。アンドロイドとして地球を救う傍らでアプリ開発もやっていて、本記事ではAndroid開発におけるモジュール分割について書いてみます。

さて、Pairsは元々シングルモジュールなプロジェクトでしたが、2019年の前半からモジュール分割に取り組んでおり、本記事ではPairsで採用しているモジュール分割のアプローチを紹介したいと思います。読者の理解促進のためにPairsよりも単純なサンプルアプリをもとにして解説していきたいと思い …


この記事はEureka Advent Calendar 2018の7日目の記事です。

はじめに

こんにちは!Androidエンジニアのyuyakaidoです。

エウレカでは日夜アプリ改善のためにプラットフォームを跨いで情報共有を行っています。直近では、クライアントアプリにおける効率的なデータの一貫性管理に議論していました。その議論で得られた気付きを実際にプロダクト内でも検証し始めていて、iOSエンジニアのmuukiiが2日目にこのコンセプトの導入記事を書いてくれています。

本記事では、muukiiが紹介しているデータの一貫性管理をAndroidで実装するとどうなるかを書いてみたいと思います。

大規模アプリとは

まずは大規模アプリとはどのようなものを指すのかを定義しておきます。

本記事における大規模アプリとは、複数の画面に同一のデー …


こんにちは!Androidエンジニアのyuyakaidoです。

6/29(金)に株式会社ナビタイムジャパンにて開催されたMinami Aoyama Night #6にて、Pairs Globalのフルリニューアルを題材とした「大規模サービスのフルリニューアルを炎上させないために」という発表をしてきました。

Pairsは日本版とグローバル版を提供しており、グローバル版は2017年1月から半年ほどかけてフルリニューアルを行いました。それがいわゆる炎上状態となり、リリースが2ヶ月ほど遅延してしまいました。その経験をもとに、何が問題だったかと、どうすれば良かったか、を発表してきました。

何が問題だったか

  • やりたいことが多すぎて目的を見失う
  • 無謀なスケジュールで進んでしまう
  • 未決定事項がどんどん増えていく
  • 途中で人を増やしてしまう

どうすれば良かったか

  • 目的を明確化し、優先順位を決める
  • 妥当な見積もりと、定期的な見直しを行う
  • マトリックスやUIスタックを用いて抜け漏れをなくす
  • 人を増やす場合は慎重に検討を行う

より詳細な内容を知りたい方は以下のスライドをご覧いただくか、Twitterにてyuyakaidoまでメンションをください!

エウレカではエンジニアを絶賛募集中です。大規模サービスのフルリニューアルを無事完遂した方のご応募をお待ちしています。もちろん、そうでない方のご応募もお待ちしています。


どうも。Androidエンジニアのyuyakaidoです。

6/15(金)にAndroidエンジニア向けのMeetupをエウレカで主催しました。当日は20名ほど参加していただきました。


こんにちは!Androidエンジニアのyuyakaidoです。

この度、エウレカの有志メンバーで技術書典4に出展することになりました。本記事では、エウレカブースで頒布する技術書に掲載予定のコンテンツを少しだけ紹介します。

技術書典とは

公式サイトの説明によると、

新しい技術に出会えるお祭りです。

技術書典は、いろんな技術の普及を手伝いたいとの想いではじまりました。

技術書を中心として出展者はノウハウを詰め込み、来場者はこの場にしかないおもしろい技術書をさがし求める、技術に関わる人のための場として『技術書典』を開催します。

とのことです。技術書に特化したコミケといった感じでしょうか。

技術書典は過去に3度開催されており、次回で4度目の開催になります。開催を重ねるごとに参加者が増えており、Twitterなどで会場の様子を見かけた方もいるかと思います。技術書典3の様子については、技術書典3サークル参加アンケート結果と分析をご覧ください。

エウレカ9

エウレカのサークル名は「エウレカ9」で、場所は「い-14」です。

内容はエウレカの事業内容にはほとんど関係がなく、それぞれが好きなテーマについて執筆予定です。

Redux on Android

私は「Redux on Android」というタイトルで、AndroidにおけるRedux実装について執筆しました。本記事でその概要を紹介します。

Reduxとは

Androidアプリに求められる要件は年々複雑化してきており、それに伴って扱う状態も増えてきています。シンプルなアプリであれば状態管理はそれほど問題になることはないですが、大規模なアプリになればなるほど状態管理はクリティカルな問題となることが多いです。

Reduxはこういった状態管理にまつわる問題を解消するために登場しました。本来はReactとセットでWebフロント開発で使われることが多いですが、Redux自体は非常にシンプルな考え方なので、Webフロント以外のプラットフォームにも容易に移植することができます。

ReduxはFluxがベースになっているアーキテクチャで、データの流れが1方向に制限されているのが特徴です。Fluxとの違いはStoreが1つであったり、状態変更はReducerが担ったり、といった辺りです。

Androidにおける状態管理の難しさ

私が考えるAndroidにおける状態管理の難しさは以下の3つです。

  • 複数のデータソースを扱う必要があること

Androidで扱うことの多いデータソースは、API経由でやり取りするサーバー、SQLiteなどを使ったローカルDB、SharedPreferencesを使ったKey-Valueストア、メモリやディスクなどを使ったキャッシュなどなど、代表的なものでもこれだけのデータソースがあります。これらのデータソースは適したデータ形式やアクセス方法がそれぞれ異なっており、これらの違いを意識してコードを書いていくのはかなり大変な作業です。

  • 状態に種類があること

状態と一口に言っても、実は色々な種類の状態があります。大まかには、サーバーやローカルDBに保存されて永続化されている状態と、ユーザーが入力している最中のテキストといった一時的な状態があります。これらも状態管理を複雑化させる要因の1つです。

  • 非同期処理の扱いと非同期処理後の状態変更

Androidで非同期処理を実装するときの手段としては、AsyncTask、Loader、Serviceなどがありますが、これらはそれぞれ実装方法が大きく異なり、状態管理が複雑化する要因になってしまいます。

状態管理の難しさにReduxで対抗する

  • 複数のデータソースを扱う必要があること

ReduxではStoreが全ての状態を管理し、Viewは常にStoreから通知された状態からUIを構築します。このように設計することで、Viewが具体的なデータソースを知る必要性から開放されます。

  • 状態に種類があること

Storeの実装を工夫することで状態の種類を隠蔽することが可能になります。

  • 非同期処理の扱いと、非同期処理後の状態変更

Reduxでは非同期処理をActionCreatorとして切り出します。ActionCreatorは非同期処理の実行に必要なデータを受け取り、非同期処理を実行します。その結果はActionとして表現され、最終的にStoreに渡されます。重要なのは非同期処理とその結果が明確に分離されている点で、これによりテスタビリティを高めることができます。

まとめ

本記事では、エウレカ有志による技術書典参加の表明と、頒布予定のコンテンツを紹介しました。技術書典4は4/22(日)に秋葉原UDXアキバ・スクエアにて開催予定です。来場予定の方は是非エウレカブースにも立ち寄ってみてください!

エウレカでは仲間を募集しています。もし少しでもエウレカに興味がある方はWantedlyもチェックしてみてください。

Yuya Kaido

Android Developer at eureka, Inc.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store