Posted at

自作アプリをアップデートするに当って、パッケージ構成ってやつを本気出して考えてみた

More than 1 year has passed since last update.

自作で出してるアプリ、TwitMorseというのがあるのですが、今までまともにパッケージ構成とやらを考えたことがなかったので、リハビリがてら考えてみることにしました。


パッケージ構成をちゃんと考える、とは

簡単に言うと、ある特定の役割を持ったクラスをフォルダを分けて管理することです。

一人による開発であればその人が把握していればクラスがどんな役割を持っているかがわかるので、特に必要はないかもしれませんが、機能を拡張していくたびに「あれ?こいつ何担当だ?!」となります。

たとえば、

Stringの変換などを行うクラスは"strings"と名前のついたフォルダへ

画面の表示系を担うクラスは"ui",fragmentであれば"fragments"といったフォルダ(ディレクトリ)にまとめる、ということになります。

※今回はAndroidアプリを例にしているだけで、他は知りません・・・

TwitMorseは昨年の10月から全く更新をしていなかったので、今まさに半年ぶりに開いたら、「うわぁ、どれがどれか何も思い出せん・・・」となりました。なのでこの度ちゃんとクラスを整理しよう!と思いました。

わかりやすい記事があったので紹介させていただきます。


最初の方に、パッケージはクラスを管理するのに便利と書きましたが、他にも使うメリットはあるんです。

唐突ですがクラス名の重複はダメです。たとえ処理が違っていたとしても許されません。一人で開発する分> には恐らくそのような問題は起きないと思いますが、これが大人数で開発するとなると被る可能性は大です。

しかし、パッケージが異なればクラス名が被ってもいいんです!FQCNが異なれば、クラスの区別は可能だからです。

例えば、同じ学校に同姓同名が何人か居たとしても、学年と組で区別できますよね?それと同じです。


Java入門 パッケージ管理 より引用。


リファクタリングをひたすらやることになる

単純にディレクトリを掘ってその中にjavaファイルを入れる作業だと思って始めた作業、これが意外とダルいことになります。

まあ適当にこんな感じで分けて、複数以上ないやつだけ外に置き去りにします(正しい方法は知りません)

Android開発といえばAndroidStudioですが、この子がディレクトリにファイルを移動するたびに「リファクタリングする?」と聞いてきます。私は何も考えず「yes」をどんどん選択。

クラスの役割を思い出しての分配を考えては移す作業を終わって・・・ビルドをしようとすると

真っ赤やんけーーーーーーーーーー

▂▅▇█▓▒░('ω')░▒▓█▇▅▂うわあああああぁあぁあ

なぜこれが起きるかというと、

パッケージを分けていなかったために、

protectedにしていたメソッド達が呼び出せなくなるのです。

今までは同じパッケージにいたからprotectedで済んだものの、今度はパッケージ構成が変わったためにpublicにしないと他パッケージからアクセスできない(利用できない)メソッドがたくさん生まれたのです。

この罠にハマって延々30分、エラーを潰す作業になります。

本当にちっさいクソアプリで助かった。


まとめると、プロジェクト作るときにちゃんとパッケージ構成は考えるべき

私のように個人で作っていると、「どうせ一人で開発してるしパッケージとか適当でいいだろ」という思考になりますが、久々にプロジェクトをいじると訳が分からない状態になります。

それを解消しようとすると、更に2次災害としてエラー地獄と戦うことになります。

ちゃんとパッケージ構成は考えた方がいいですね!一番最初に!!個人であっても!!!

ということに気づいたので、リハビリを兼ねて久々にqiitaに投稿してみました。