助太刀アプリ改革: マルチモジュールへの道
自己紹介
こんにちは。助太刀アプリチームの村川です。
私は主に、助太刀Androidアプリ開発のテックリードを務めております。
助太刀Androidアプリのリアーキテクチャやリファクタリングに関して行っていることを、この記事を通じて共有しようと思います。
まずは、基本的な設計方針についてです。
Androidアプリの課題
助太刀に参画し、初めてコードを目にした際、その複雑さには正直驚きました。一定の統一性は感じられましたが、責任の所在が不明確で、各クラスの具体的な役割がぼんやりとしており、全体像が掴みにくい状態でした。 この状況は、過去の開発の多くが外部委託されており、社内にはAndroid専門のエンジニアがおらず、深いレビューが行われなかったことに起因しています。加えて、アプリの全体観を持ち、戦略的な判断を下せるような専門家も不在だったため、コストとリスクをかんがみた実装方針の立案にも課題がありました。 新機能の導入やコードの修正が連なることで、この無秩序は更に増加しました。これを解決するために必要だったのは、既存の機能を維持しながらのコードリファクタリングです。私たちが初めに踏み出した改革の一歩は、アプリのマルチモジュール化でした。
マルチモジュール化
元々シングルモジュールで開発されていたソースコードを、はじめにLegacyモジュールとして切り出すことにしました。 Legacyモジュールは、現状のソースコードをそのまま移行したものです。 その後、新機能の開発は新たに作るモジュールにおいて進めていきます。 リファクタリングが必要な機能は、Legacyモジュールから新モジュールへと移行させました。
(矢印は依存関係を示しています) 新たに作成したモジュールは[app, ui, usecase, data, api]です。 appモジュールではApplicationクラスを実装します。
大枠の方針は決まりましたが、解決すべき問題は数多くあります。
例えば、新しい機能に関する画面はuiモジュールで開発されるのですが、既存の画面との導線を繋がなくてはなりません。 しかし、Legacyモジュールからはuiモジュールを参照できませんし、その逆も然りです。 それを解決するために、お互いのモジュールが通信するためのインターフェースとしてcommonモジュールを用意しました。
実装はappモジュールが行いlegacyとuiでApplicationクラスを介しての画面遷移機構を作成しました。
ここまでがモジュールに関する大まかな概要ですが、必要に応じてモジュールを拡充しています。
最後に
これまでお話ししたように、助太刀アプリのリアーキテクチャとリファクタリングは一筋縄ではいかない作業ですが、システムをモジュール化することで、より堅牢で柔軟なアプリケーションへと変革を進めています。今後は、新たに追加される機能の実装や既存のコードの改善を、この新しい基盤の上で効率的に行っていく計画です。 読者の皆様にもこれらの変更がユーザー体験の向上に寄与することを期待していますし、技術的な詳細に興味がある方には、さらに深いレベルでの技術的な話題にも触れていきたいと思います。どうぞご期待ください。
次回の記事では、実際にマルチモジュール化を進める中で直面した具体的な課題と、それらをいかにして解決していったのかを取り上げます。私たちの経験が、同様の課題に取り組む皆様の一助となれば幸いです。
それでは、引き続き助太刀Androidアプリの発展にご注目ください。次回の記事でお会いしましょう。
助太刀では一緒に開発してくれるメンバを募集してます。
少しでもご興味を持っていただけたら下記よりお気軽にご連絡ください。
Discussion