企画者必見。あれ？Android開発工数がiPhoneと同じっておかしくない？？

#あれ？Android開発工数がiPhoneと同じっておかしくない？？(企画者向け)
![android_nadal_tauletes.jpg](https://qiita-image-store.s3.amazonaws.com/0/59990/64876f89-9a63-7037-48b1-a166a056218f.jpeg)

##お約束ごと
こんにちは！
[CYBIRDエンジニア Advent Calendar](http://qiita.com/advent-calendar/2014/cybird)
17日目は、入社2年目@RYad0902が担当させていただきます。

昨日は[トレンディ小松さん](http://qiita.com/yuichi_komatsu)の[ビミョーデータにおけるEMRの効率的な使い方](http://qiita.com/yuichi_komatsu/private/898c2be7d72465dd9a0f)でした。
少しの工夫でコストって随分変わるものなのですね！

##本日お話したいこと
Androidの工数がiPhoneと同じ時と違う時があるけれど、それってなんで？
というのをシンプルにまとめたいと思います。


##（iPhoneと）同じ工数で「できる」ことと「できない」こと
みなさんご存知のことと思いますが、iPhoneとAndroidでは開発言語が異なります。
が、それは本当に些細な問題です。
それよりももっと、OSのバージョンの広がりとか、デバイスの種類の多さが案件完了までの工数に変化をもたらすことが多いのです。


とりあえず同じ工数で「できること」「できないこと」を わたくしの業務体験（Webアプリ型恋愛ゲーム）を中心にまとめましたのでまずはこちらをご覧ください。

###★ ◎ 同じ工数で「できる」こと。
・画像入れ替え。
・音声素材の入れ替え。
・SDKマイナーバージョンアップ。
・既存タイトルで既に実証・運用済みの機能。


###★ △ 同じ工数でできる「かもしれない」こと。
・SDKバージョンアップ。
・音声素材の追加。
・構造が同じタイトルの新規開発。


###★ ×× 同じ工数で「できない」こと。
・ボタンなどのレイアウト変更が必要なUI追加。
・機能の追加実装。（View自体の追加、音声、動画など）
・新しいSDKの追加。
・バックボタン対応（！）。
・完全に新規の開発。


##何が違うと言うのかしら？
ぱっと見た感じ「できること」「できないこと」に大きな違い・・・？
そもそも何が違うのかもよくわからないと思います。
しかしそこには下記のように明確な違いがあったのです。

・アプリの容量は音声などによって大きく増加していない。
・変更されたレイアウトはない。
・新しく何かを送ったり取得したり挙動したりしない。
・極端なハナシ、ソースコードはほぼ追加されていない。

つまりiPhoneアプリとAndroidアプリが同じ工数でいられるのは、
「既存のゲームの表現とサイズを維持したまま、素材だけを同数分交換した時に限る」ということです。

##なんでよ？「正常に動くアプリを作るのに必要な過程。」
なぜそんなことが起こるのか。
それは冒頭でお話ししましたOSのバージョンの広がりと端末の多さに起因します。

####ソースコード実装　×　OSバージョン対応　×　デバイスの機種対応　=　案件に必要な時間。
案件にかかる時間は大雑把に上記の計算で出すことができると感じています（サーバ側実装・疎通テスト等は省略）

順番にいきます。
###1,ソースコードの実装について。
これはどちらも同じような機能を同じようなコードで追加していきます。場合によってはどちらかのOSが簡単に実装できる場合もあるかもしれません。しかしこれはケースバイケースなので、極端にどちらかが有利、ということはありません。

ソースコードの実装について、iPhoneとAndroidは「大きな差はない」と言っても問題ないでしょう。


###2,OSのバージョン対応について。
下記グラフをご覧ください。

![iOS.jpg](https://qiita-image-store.s3.amazonaws.com/0/59990/ef3dfd4a-2bf5-d459-e93b-de96d0e326b1.jpeg)
図1-1 iOS(iPhoneやiPad)の分布。(2014年12月)
![android.jpg](https://qiita-image-store.s3.amazonaws.com/0/59990/2d6dd2af-0bba-4e66-610f-c8ec684d83bc.jpeg)
図1-2 Androidの分布。(2014年12月)
参考：
http://juggly.cn/archives/135291.html#more-135291
http://s-max.jp/archives/cat_35279.html?p=3


iOSの半数以上は最新のiOS8、それ以外も９割は１世代前のiOS7で固められており、それ以前のOSを持っているユーザは20分の1にしかすぎません。

一方Androidはマイナーバージョン含むとは言えど、４種類のバージョン（まだ12月の統計なのでAndroid5.0については具体的な数字はわかりません）に分かれており、しかもそのうちの実に2割(GingerBread, Froyo, ICS)がいまだ3年以上前にリリースされたOSバージョンを使っています。

このためOS対応については、Androidの方がよりバージョン対応にコストが必要という結論になります。
新しい挙動や描画方法を試そうとすると、バージョンを分けた実装が必要となったり、場合によっては
再現できないため一部のユーザー様が遊べないということにもつながります。またそれがどこまでの範囲なのか少なくとも4端末(5系も入れるのなら5端末)以上で確認する必要も出てきます。


###3,デバイスの機種対応について
![frameIOS.png](https://qiita-image-store.s3.amazonaws.com/0/59990/0d61b947-fda9-4055-83ab-cbd852d1f84e.png)
図2-1 iOS端末の画面サイズの分布(2014年初頭あたり)
![frameAndroid.png](https://qiita-image-store.s3.amazonaws.com/0/59990/91247d72-0b57-05ce-5ccb-2252958f2841.png)
図2-2 Android端末の画面サイズの分布(2014年初頭あたり)


これは今年初頭のiOS端末(iPhoneとかiPadとか)とAndroid端末の画像サイズの分布を表したものです。
いまでしたらこれにiPhone6やPlusが追加されてiOS端末ももう少し賑やかになっています。それでもAndroidの数には遠く及びません。
Androidはいままで出てきた国内端末だけで800以上の種類があるそうです。
それに対してiOS端末はせいぜい30種類前後です。

というのも、iOS端末とAndroid端末で製造しているメーカーの数が違うからです。

iOS端末     -> <strong>Apple社</strong>のみ。
![imgres.png](https://qiita-image-store.s3.amazonaws.com/0/59990/978a984b-80af-c561-35ad-5961256de453.png)


Android端末 -> <strong>HTC,サムスン電子, Google, ソニー・エリクソン, シャープ, 東芝, 富士通, DELL, パンテック, ZTE, ファーウェイ, Foxconn, LGエレクトロニクス, NECカシオ, パナソニック, 京セラ, ASUS, モトローラ・モビリティ, Mobile In Style, ポラロイド, geanee, メガハウス, コヴィア, プラスワン・マーケティング, Micromax Mobile, TCLなど</strong>。
![imgres-6.jpg](https://qiita-image-store.s3.amazonaws.com/0/59990/e99dd1a9-2468-f8d8-8747-cc1d43c4451e.jpeg)　![imgres.jpg](https://qiita-image-store.s3.amazonaws.com/0/59990/f8af5ddf-c986-df9f-278b-9a9ad08aabee.jpeg)　![images.png](https://qiita-image-store.s3.amazonaws.com/0/59990/ac8e8d1e-1057-55e2-e6a4-1a1aa48e1adc.png)　![imgres-1.jpg](https://qiita-image-store.s3.amazonaws.com/0/59990/e0f3ebd5-e762-043b-6119-4986321e82b3.jpeg)　![imgres-3.jpg](https://qiita-image-store.s3.amazonaws.com/0/59990/195b516e-3a27-4c12-6c43-86eefc0533f4.jpeg)　![imgres-5.jpg](https://qiita-image-store.s3.amazonaws.com/0/59990/73401192-a583-fd2e-e3bf-371a48cf7620.jpeg)　![imgres-4.jpg](https://qiita-image-store.s3.amazonaws.com/0/59990/805c2a97-296b-aa9a-bdc5-9b800734a2d3.jpeg)　![imgres-2.jpg](https://qiita-image-store.s3.amazonaws.com/0/59990/69bbcc67-f7c2-3ed8-5ba9-3feb7be95b0e.jpeg)　![images.jpg](https://qiita-image-store.s3.amazonaws.com/0/59990/215850ca-3cd2-8e12-6b38-359a95269c5f.jpeg)






Android端末はもちろん有名無名合わせての数ですので、シェアの高い端末だけを選んで検証してけいけば、もう少し数は抑えられます。それでもiOSよりは多いでしょう。
またアプリを製作して検証すべき事案はレイアウトサイズの問題だけに留まりません。メモリの大きさやディスプレイへの描画出力の限界、使えるAPIの差や挙動の違いなど、いくつかの項目で差異があります。
先ほどのOSについてですが、そのアップデートの対応自体も各社が独自で対応しているため、タイミングやそもそもアップデートを行うかどうかの判断をバラバラです。これこそがOSの分布が広くまたがっていることの要因です。

以上のことからもAndroid端末で検証すべき項目の多さがわかってくると思います。
そしてそこで起こりうるリスク防止のためのコストも、iOSとは段違いになりうることが想像できるかと思います。

##おわりに
だからと言って、そんなに厳密に工数を引けるはずがありません。
そしてそれに対応するのにも限界があります。
そのためOSバージョンを制限したり、市場に出回っている端末で「何％カバーできればオーケー」というふうに、なにかしらの目安を設ける必要があるでしょう。

シンプルな作りのゲームが多ければ、これは大きな問題にはなりません。

しかし今後アプリの機能が複雑になるにつれ、二つのOS（というかそのOSを乗せているデバイス含む）にかかる工数にも差が出てくるはずです。
そんなとき、このようなOSの違いから起こるさまざまな問題を認識できていれば、よりスマートなスケジュール管理が行えると思います。

(Androidめんどくさいと思ったそこのあなた。)
(しかし最近国内ではAndroidシェアが伸びていますよ。)
(Android、とても大事です。)
![screenshot12_15.png](https://qiita-image-store.s3.amazonaws.com/0/59990/4bc6f941-fac6-60b5-4473-ded23ff5f41f.png)
参考:http://jp.techcrunch.com/2014/10/30/20141029kantar-september-2014/


--------------
[CYBIRDエンジニア Advent Calendar](http://qiita.com/advent-calendar/2014/cybird)
明日は弊社のサーバまわりの重鎮@doidoidonさんによる「はじめてのPromise（仮）」です。
どうぞお楽しみに！

--------------