Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

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

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

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

 社会人エンジニア向けの教育プログラム「トップエスイー」での講義や制作結果などからエンジニアの皆さんに対して有用な情報をお届けするコーナーです。今回は、受講生が修了制作で取り組んだ内容を紹介します。テーマは「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アプリ開発として成功した事例であると考えて間違いなさそうです。


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

著者プロフィール

バックナンバー

連載:トップエスイーからのアウトカム ~ ソフトウェア工学の現場から
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5