Androidアプリ開発のすすめ


新しく買ったiPad Air 2はとても快適で素晴らしい。今この記事もiPadから書いている。それくらいユーザとしてはiOS製品が気に入っている。だけど、アプリ開発者としては今はiOSアプリ開発よりもAndroidアプリ開発の方に魅力を感じている。この魅力を、とくにAndroidアプリ開発を敬遠してきたエンジニアの人にも伝えたい。

これから書くのはネイティブアプリ(VM上で動くので厳密には「ネイティブ」ではないが)を開発する場合についての話となる。作るアプリの内容によっては、各OS用のアプリを個別に作るより、UnityとかXamarinを使ったほうがいい場合もあると思うし、それらを否定するつもりは無い。一方で、各OSを個別に開発したほうが良いケースもまだまだあると思っているが、そこについては本題から離れてしまうので省略する。

正直に言うと、Androidアプリ開発が面白いと感じられるようになったのはこの一年くらいで、その前は苦痛にすら感じていた。非同期処理をきれいに書けないAndroidのJava、お世辞にも軽くて快適とはいえないEclipse、Dalvik特有のGC時のプチフリーズ、CocoaPodsみたいに手軽には使えないMaven…。活発に開発され進化していたObjective-CとXcodeというiOSアプリ開発環境に比べて、Androidアプリ開発環境はなにかとストレスの多い環境だった。

Androidアプリの開発環境が一年で大きく改善した

しかし、この一年で大きく状況が変わった。Android Studioの登場により一気に快適になったIDE/パッケージ管理/CI環境、ARTにより劇的に動作がスムーズになったAndroid 5.0、そこにiOS 8.0 / Xcode 6の不具合の多発やアプリ審査の大幅な遅延。色々な要素が重なり、相対的にも絶対的にもAndroidアプリ開発の魅力はこの一年で大きく増えた。

まずAndroid Studioの登場、進化による影響が非常に大きい。今時な感じの「邪魔をしない」UIで、画面が小さくてもある程度快適に開発できるし、高機能なのに動作は軽い。IDEとしてとてもよくできている。Android(Java)の場合、どうしてもコードが冗長になってしまう部分があるため、IDEのコーディングの支援機能の善し悪しが生産性に与える影響は小さくない。Eclipseと操作性が違うので、最初は戸惑うかもしれないが少し時間をかけてキーバインド等を覚えながら開発を続けていると、このIDEの素晴らしさを実感できる。

だが、EclipseからAndroid Studioへの乗り換えによる最も重要な変化はビルドシステムの変化にある。Eclipseで使われているAntに比べて、Android Studioで使われているGradleは大分今時の開発スタイルにあわせて設計されており、特にJenkins等を使ってCIを実践している開発者にはすぐにそのメリットがわかるはずだ。

特にMavenレポジトリと連携したDependenciesの機能はとても便利で、CocoaPodsのように、使いたい外部ライブラリをビルド設定ファイルに一行書くだけで自動的に組み込んでくれる。最近ではAndroidアプリ用のサードパーティライブラリも大分充実してきているので、この機能はとても役に立つ。

昨今のAndroidアプリ用に最適化されたプラグイン(Gradle自体はJavaのビルドツールで、その上でAndroidアプリビルド用のプラグインが動く形でビルドを行っているけど、まあ細かいことは今は気にしなくてもOK)も、アプリ開発全体のフローに大きな変化を与えてくれる。複数のマーケットで、あるいは複数のエディションを作って配信することが多いAndroidアプリ用に、Product Flavorという仕組みを使って、エディションやマーケット毎に使うソースコードやリソースを切り替えることができたり、パッケージ名を変更したりもできる。これは、複数マーケット配信や複数のエディション作成をしない場合でも、Stagingサーバー用ビルド/Productionサーバー用ビルドを切り替えたいような場合にも使えて、本当に便利。

そして、重要なのはAndroid Studioにおけるビルドの処理は、Gradleのタスクを呼び出すだけだという点。コマンドラインから同じGradleタスク(Railsを使う人はrakeタスクと似たようなものだと考えてよい)を叩けば、Android Studioを起動していなくても同じビルド結果が得られる。つまり、Jenkins等のCI環境下で開発環境と同様のビルドを実現するのが極めて簡単だということ。

Android Studioは半年前は不安定だったものの、その後開発が進み、今となってはEclipseに比べて安定性で劣ることもほとんどないように感じる。そんなわけで、Android Studioの登場と進化によってもたらされたものは非常に大きい。

そこに、ARTの登場だ。ARTはアプリのインストール時に中間コードからネイティブコードへの変換を行うことにより、Javaの弱点であったパフォーマンスを大幅に克服している。実際、Android 5.0がインストールされた端末を触ってみると、今までのAndroid端末で体験したことがないようなスムーズさを体感できる。

もちろん、ARTでもGCが走る以上、iOSのARCのほうが理論的には効率が良いと考えられるので、完璧ではないのだけど、この変更はAndroid史上最も大きなパフォーマンスのアップデートだと思う。

混乱が続く最近のiOSアプリ開発環境

Androidのアプリ開発環境とOS本体が大きく改善したのに対して、iOS側のここ最近の諸々の状況は芳しくない。

残念なことに、iOS 8は今までのiOSと比べて完成度が低い状況でリリースされ、多数のバグが存在していた。バグ修正版としてリリースされたはずの8.0.1では、端末がネットワークに接続できなくなる重大なバグが発生し、リリース直後にアップデートが取り下げられるというような事態も発生した。HealthKitに不具合があったため、HealthKit対応のアプリはiOS 8.0.2がリリースされるまで、AppStore上でのリリースを待たされることになった。

WWDCでiOS 8と同時に発表された新言語Swiftは、最近のLLの流れも組み込まれた、とても面白い言語だ。実際のところ、書いていてとても楽しいし、生産性も高いと感じる。ここ数年、Objective-Cのコンパイラは、ソースコードの静的解析機能が急速に強化されてきていたが、今となってはこれはSwiftのための準備だったのだなと想像できる。

WWDCであれだけ大々的に発表するくらいなので、既にある程度完成が近い言語・環境なのだろうと大方の開発者が予想しただろうが、WWDCでの発表から現在(Xcode 6.1のリリース)までの間にSwiftの言語仕様は大きく変更されてきている。言語仕様のアップデートの度にプログラムを修正しなければいけない点はまだ仕方ないが、言語仕様のアップデートに対してドキュメントやコンパイラ、さらにはXcodeの対応が十分に追いついていないのは、開発者からすると大分困った問題だ。最新のXcode 6.1でも、原因不明のコンパイラのバグに遭遇してしまうことがあり、Stackoverflowを眺めていても同様の書き込みが見られる。安定するまで、もう少し時間がかかりそうだ。

審査時間の推移

iOSアプリ開発者の頭を悩ませるもう一つの大きな問題はアプリ審査の遅延だ。Average App Store Review Timesによると、今年の9月頃から過去に例がないほど急激にアプリの審査にかかる期間が長くなっており、10月中旬には約11日にまで伸びている。この秋には、iPhone 6 / iPhone 6 Plusの登場により画面サイズのバリエーションが増えるという大きなトピックがあったため、iOS 8対応/多解像度対応のためのアップデートが殺到したことによる影響ではないかと推測できるが、理由の如何に関わらずアプリを申請してからリリースまで10日前後かかってしまうというのは、デベロッパーにとって歓迎すべき状況ではない。

リーンスタートアップ/アップデートサイクル

Androidアプリ開発の環境の充実が進み、一方でiOSアプリ開発の混乱が続くと、どうしても今度はiOSアプリ開発における悪い点が目に付き始めてしまう。

僕はリーンスタートアップの考え方が好きだ。しかしリーンスタートアップは、iOS App Storeとあまり相性がよくないと思っていたし、今も思っている。

少し前まで、iOS App Storeでは「新着アプリランキング」の影響力がとても大きかった。新しくアプリをリリースして新着アプリランキングに載ると一気にダウンロード数が伸びるが、その後日数がたってランキングから消えるとすぐに他のアプリに埋もれてダウンロードされなくなってしまう。従って、リリース直後、新着アプリランキングに入っている間にユーザに気に入ってもらい、定着してもらうことがとても重要だった。結果的に「完璧な状態にしてからリリースする」ことが重要となり、これはリーンスタートアップの考え方とは相反する。

現在、iOS App Storeから新着アプリランキングはなくなり、以前のように「リリース時が絶対的に重要」という状況はなくなった(Google Playの方は新着ランキングがあるが、ややこしくなるので省略)。しかし、相変わらずリーンスタートアップと相性がよくない要素がある。それが、上記審査期間の長さだ。

リーンスタートアップを実践する上では、機能を追加し、ユーザの声を聞き、アプリを改善してまたリリースする、というサイクルをなるべく早く回していきたい。いうまでもなく、このサイクルを早く回す上で審査期間の長さは大きなボトルネックになってしまう。

最近はiOSもAndroidもアプリの自動アップデート機能が用意されているので、アップデートがユーザに浸透していくスピードは以前よりずっと早い。審査期間の関係で、一週間に一度程度しかアップデートができないiOSよりも、準備ができた段階でどんどん最新の機能をユーザに届けられるAndroidのほうが、アプリの立ち上げ直後、ユーザの反応を伺いながら方向性を修正していく過程では有効だ。

アプリ開発でリーンスタートアップ的手法を実践するなら、最初にミニマムな機能でAndroid版を出してブラッシュアップを続け、方向性が見えたら満を持してiOS版を出す、という戦略が良いと思う。

とはいえ、住所公開やマネタイズの問題も

そんなAndroidアプリ開発にもネガティブな点がないわけではない。

9月、Googleは突然、Google Playにおいて有料アプリの販売/アプリ内課金を行う場合、開発者の住所の一般公開を必須とした。これは個人デベロッパーにとって、マネタイズという点では頭の痛い問題になるだろう。

Google Playストアにて9/30より開発者の住所登録開始、一般にも公開へ!有料アプリ公開の場合は必須

ただし今回のGoogle Playの変更は、各国の法律上の都合によって行われたものである可能性もあり、その場合、今後App Storeも同じように住所公開が必須となる可能性がないわけではない。とりあえずは、様子を見守るしかない。

マネタイズという点では、依然iOS App Storeの方がGoogle Playよりも大きな売り上げを記録している。AppAnnieの最新のレポートでも、Google Playにおける売り上げはiOS App Storeの6〜7割程度と報告されている。したがって、リリース直後から有料販売あるいはアプリ内課金でマネタイズが必要な場合では、この数字を考慮しなければいけない。

結論

そういうわけで、今回はAndroidアプリ開発環境の進化具合とiOSアプリ開発環境の混乱という二つの状況の相乗効果があり、特にAndroidアプリ開発をはじめるのによいタイミングなのではないかと思う。僕もAndroidアプリ開発自体は前からやっていたが、ようやくこのタイミングになって楽しいと思えるようになってきた。

iOSアプリ開発環境の混乱は、数ヶ月後には収束しているのではないかと予想(期待)している。完成度さえ上がればSwiftによるアプリ開発が生産的で楽しいものになる事は間違いない。ただ、それまでの間はiOSアプリ開発は少しストレスを感じる状況が続いてしまうと思うので、この機会に最新のAndroidアプリ開発をやってみることをおすすめします。


「Androidアプリ開発のすすめ」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です