SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

トップエスイーからのアウトカム ~ ソフトウェア工学の現場から

Androidアプリケーション開発におけるActivityの肥大化を防ぐデザインパターン

トップエスイーからのアウトカム ~ ソフトウェア工学の現場から 第5回

  • このエントリーをはてなブックマークに追加

 社会人エンジニア向けの教育プログラム「トップエスイー」での講義や制作結果などからエンジニアの皆さんに対して有用な情報をお届けするコーナーです。今回は、受講生が修了制作で取り組んだ内容を紹介します。テーマは「Androidアプリケーション開発におけるデザインパターン」です。Androidアプリケーション開発をしていると、Androidアプリケーション開発固有の問題に直面することが多々あります。今回はそのうちの1つの問題を解決するデザインパターンを提示します。パターンの紹介はもちろん、どのようにしてデザインパターンを導いたのか、というところから解説します。読んでいただいた上で、ぜひ今後のAndroidアプリケーション開発に活用すると同時に、デザインパターン活用の有効性を知っていただきたいと思います。

  • このエントリーをはてなブックマークに追加

Activity肥大化問題

 Androidアプリケーション開発でユーザーインタフェースを構築する場合、その中心的な役割を担うのがActivityです。画面の描画や、ユーザーからの操作を受け付けるなど多様な処理を実装できます。具体的にはActivityクラスのサブクラスや、定義ファイルに記述します。これらをまとめ、ユーザーインタフェースを稼働できる仕組み全体を「Activity」と呼ぶこともあります。

 ところで、気付くとActivityが肥大化し過ぎてしまっていた経験はありませんか? Androidアプリケーション開発エンジニアであれば、一度はその経験があるのではないでしょうか。Activityクラスにいろいろな処理が記述された結果、何千行ものコードになり、バグが多い上に保守が困難、といった問題がAndroidアプリケーション開発では起こりがちです。今回はこのActivity肥大化問題を解決するデザインパターンを提示します。

デザインパターンとは

 そもそもデザインパターンとは何でしょうか? デザインパターンとは簡単にいえば「よく起こる問題と、その問題に対する良い解決策」です。有名なデザインパターンにGoFのデザインパターンがあります。オブジェクト指向で再利用性の高い設計を行うためのパターンを23個提示しています。例えばObserverパターンは「オブジェクト間の通知を実現しようとすると設計が煩雑になる」問題に対する「良い解決策」を提示しています。

 デザインパターンを利用することにより得られるメリットは、大きく分けて2つあります。1つ目は、問題に対して解決する方法を自分で考える必要がないということです。Observerパターンの例だと、パターンを知らなければオブジェクト間の通知について、拡張性・保守性の高い設計をどうすれば実現できるのか悩むことになります。悩んだ挙げ句、イマイチな設計をしてしまうかもしれません。しかしパターンを知っていれば、他の方がすでに悩んで出した「良い解決策」を活用することができます。労力をかけずに良い実装ができるようになるのは大きなメリットです。

 2つ目のメリットが、設計・実装の意図を開発メンバー間で共有しやすいということです。開発メンバーが共通で知っているデザインパターンが利用されていれば、なぜその設計・実装になっているのかについて詳細を話す必要がなくなります。「この部分はオブジェクト間の通信を実装しているからObserverパターンが使われているな」ということが分かると、設計・実装の意図が理解しやすくなります。

 デザインパターンを活用すれば、よく起こる問題に対して良い解決を効率的に行うことができるようになるのです。

Activity肥大化問題に対するデザインパターン作成のプロセス

 GoFのデザインパターンは帰納的に作成されました。問題に対して検討を重ね、演繹的に1つの解決策を導き出したのではなく、数多くのソフトウェアを調査し、共通する「良い設計」をパターンとしてまとめたのです。AndroidアプリケーションのActivity肥大化問題に対するデザインパターンを作成するにあたっても、同じアプローチを取りました。つまり、複数のAndroidアプリケーションのソースコードを解析し、その中からActivity肥大化問題を解決する良い設計を抽出します。それらの結果を元にしてパターンを探し出したのです。

 まず、解析対象のAndroidアプリケーションをピックアップしました。アプリケーション開発として成功しており、かつ拡張性・保守性の高いAndroidアプリケーションを解析対象としたかったため、以下の2点を解析対象の条件としました。

  • GooglePlayにアプリが公開されており、1万回以上ダウンロードされている(多くの人に使われている=アプリケーション開発として成功している、と考えました)
  • 1年以上開発が継続している(長期で開発が継続している=拡張性・保守性の高いソースコードになっている可能性が高い、と考えました)

 ピックアップにあたっては以下のサイトを利用しました。

 こちらのサイトを利用すると、GooglePlayにアプリケーションが公開されており、かつソースコードも公開されているアプリを探すことができます。掲載されているアプリの数も非常に多いです。

 選ぶにあたり、なるべくアプリケーションのジャンルが偏らないようにしました。ツールやSNS、ゲームなど、さまざまなジャンルのアプリケーションをピックアップしています。具体的には、表1のアプリケーションを解析対象としました。

表1 解析対象にしたアプリケーション
No アプリ名 ソースコード アプリ概要
1 K-9 Mail https://github.com/k9mail/k-9 メールクライアント
2 Cool Reader https://sourceforge.net/p/crengine/crengine/ci/master/tree/ 電子書籍リーダー
3 Offline Calendar https://github.com/SufficientlySecure/offline-calendar カレンダー
4 Droid Weight https://github.com/yashima/droidweight 体重管理
5 DiskUsage https://github.com/IvanVolosyuk/diskusage ディスク使用状況管理
6 kitchen timer https://code.google.com/p/kitchentimer/source/checkout キッチンタイマー
7 Open Camera https://sourceforge.net/p/opencamera/code/ci/master/tree/ カメラ
8 Calculator https://github.com/Xlythe/Calculator 電卓
9 SlimSocial for Facebook https://github.com/rignaneseleo/SlimSocial-for-Facebook Facebookクライアント
10 Frozen Bubble https://github.com/videogameboy76/frozenbubbleandroid シューティングゲーム

 余談になりますが、どのアプリもユーザー評価が非常に高かったです。全てのアプリが4.0を超えており、4.5を超えているアプリも多数でした。ユーザー評価が高いことからも、これらのアプリはAndroidアプリ開発として成功した事例であると考えて間違いなさそうです。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
Activity肥大化を防ぐデザインパターン

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
トップエスイーからのアウトカム ~ ソフトウェア工学の現場から連載記事一覧

もっと読む

この記事の著者

若松 和憲(リコーITソリューションズ株式会社)(ワカマツ カズノリ)

 2015年にトップエスイーを受講。現業務はWebアプリケーション開発。認定スクラムマスターを取得しており、チームでより高い価値を創出できるよう日々奮闘している。AWSに非常に関心があり、現業務でも活用している。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10232 2017/06/21 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング