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アプリの開発環境が一年で大きく改善したしかし、この一年で大きく状況が変わった。6の不具合の多発やアプリ審査の大幅な遅延。色々な要素が重なり、相対的にも絶対的にもAndroidアプリ開発の魅力はこの一年で大きく増えた。Studioの登場、進化による影響が非常に大きい。今時な感じの「邪魔をしない」UIで、画面が小さくてもある程度快適に開発できるし、高機能なのに動作は軽い。IDEとしてとてもよくできている。Android(Java)の場合、どうしてもコードが冗長になってしまう部分があるため、IDEのコーディングの支援機能の善し悪しが生産性に与える影響は小さくない。Eclipseと操作性が違うので、最初は戸惑うかもしれないが少し時間をかけてキーバインド等を覚えながら開発を続けていると、このIDEの素晴らしさを実感できる。Studioへの乗り換えによる最も重要な変化はビルドシステムの変化にある。Studioで使われているGradleは大分今時の開発スタイルにあわせて設計されており、特にJenkins等を使ってCIを実践している開発者にはすぐにそのメリットがわかるはずだ。Mavenレポジトリと連携したDependenciesの機能はとても便利で、CocoaPodsのように、使いたい外部ライブラリをビルド設定ファイルに一行書くだけで自動的に組み込んでくれる。最近ではAndroidアプリ用のサードパーティライブラリも大分充実してきているので、この機能はとても役に立つ。昨今のAndroidアプリ用に最適化されたプラグイン(Gradle自体はJavaのビルドツールで、その上でAndroidアプリビルド用のプラグインが動く形でビルドを行っているけど、まあ細かいことは今は気にしなくてもOK)も、アプリ開発全体のフローに大きな変化を与えてくれる。Flavorという仕組みを使って、エディションやマーケット毎に使うソースコードやリソースを切り替えることができたり、パッケージ名を変更したりもできる。これは、複数マーケット配信や複数のエディション作成をしない場合でも、Stagingサーバー用ビルド/Productionサーバー用ビルドを切り替えたいような場合にも使えて、本当に便利。Studioにおけるビルドの処理は、Gradleのタスクを呼び出すだけだという点。Studioを起動していなくても同じビルド結果が得られる。Jenkins等のCI環境下で開発環境と同様のビルドを実現するのが極めて簡単だということ。Studioは半年前は不安定だったものの、その後開発が進み、今となってはEclipseに比べて安定性で劣ることもほとんどないように感じる。Studioの登場と進化によってもたらされたものは非常に大きい。そこに、ARTの登場だ。ARTはアプリのインストール時に中間コードからネイティブコードへの変換を行うことにより、Javaの弱点であったパフォーマンスを大幅に克服している。5.0がインストールされた端末を触ってみると、今までのAndroid端末で体験したことがないようなスムーズさを体感できる。ARTでもGCが走る以上、iOSのARCのほうが理論的には効率が良いと考えられるので、完璧ではないのだけど、この変更はAndroid史上最も大きなパフォーマンスのアップデートだと思う。混乱が続く最近のiOSアプリ開発環境Androidのアプリ開発環境とOS本体が大きく改善したのに対して、iOS側のここ最近の諸々の状況は芳しくない。8は今までのiOSと比べて完成度が低い状況でリリースされ、多数のバグが存在していた。バグ修正版としてリリースされたはずの8.0.1では、端末がネットワークに接続できなくなる重大なバグが発生し、リリース直後にアップデートが取り下げられるというような事態も発生した。8.0.2がリリースされるまで、AppStore上でのリリースを待たされることになった。8と同時に発表された新言語Swiftは、最近のLLの流れも組み込まれた、とても面白い言語だ。実際のところ、書いていてとても楽しいし、生産性も高いと感じる。ここ数年、Objective-Cのコンパイラは、ソースコードの静的解析機能が急速に強化されてきていたが、今となってはこれはSwiftのための準備だったのだなと想像できる。6.1のリリース)までの間にSwiftの言語仕様は大きく変更されてきている。言語仕様のアップデートの度にプログラムを修正しなければいけない点はまだ仕方ないが、言語仕様のアップデートに対してドキュメントやコンパイラ、さらにはXcodeの対応が十分に追いついていないのは、開発者からすると大分困った問題だ。6.1でも、原因不明のコンパイラのバグに遭遇してしまうことがあり、Stackoverflowを眺めていても同様の書き込みが見られる。安定するまで、もう少し時間がかかりそうだ。iOSアプリ開発者の頭を悩ませるもう一つの大きな問題はアプリ審査の遅延だ。Timesによると、今年の9月頃から過去に例がないほど急激にアプリの審査にかかる期間が長くなっており、10月中旬には約11日にまで伸びている。8対応/多解像度対応のためのアップデートが殺到したことによる影響ではないかと推測できるが、理由の如何に関わらずアプリを申請してからリリースまで10日前後かかってしまうというのは、デベロッパーにとって歓迎すべき状況ではない。リーンスタートアップ/アップデートサイクルAndroidアプリ開発の環境の充実が進み、一方でiOSアプリ開発の混乱が続くと、どうしても今度はiOSアプリ開発における悪い点が目に付き始めてしまう。僕はリーンスタートアップの考え方が好きだ。Storeとあまり相性がよくないと思っていたし、今も思っている。Storeでは「新着アプリランキング」の影響力がとても大きかった。新しくアプリをリリースして新着アプリランキングに載ると一気にダウンロード数が伸びるが、その後日数がたってランキングから消えるとすぐに他のアプリに埋もれてダウンロードされなくなってしまう。従って、リリース直後、新着アプリランキングに入っている間にユーザに気に入ってもらい、定着してもらうことがとても重要だった。結果的に「完璧な状態にしてからリリースする」ことが重要となり、これはリーンスタートアップの考え方とは相反する。Playの方は新着ランキングがあるが、ややこしくなるので省略)。相変わらずリーンスタートアップと相性がよくない要素がある。それが、上記審査期間の長さだ。リーンスタートアップを実践する上では、機能を追加し、ユーザの声を聞き、アプリを改善してまたリリースする、というサイクルをなるべく早く回していきたい。いうまでもなく、このサイクルを早く回す上で審査期間の長さは大きなボトルネックになってしまう。最近はiOSもAndroidもアプリの自動アップデート機能が用意されているので、アップデートがユーザに浸透していくスピードは以前よりずっと早い。審査期間の関係で、一週間に一度程度しかアップデートができないiOSよりも、準備ができた段階でどんどん最新の機能をユーザに届けられるAndroidのほうが、アプリの立ち上げ直後、ユーザの反応を伺いながら方向性を修正していく過程では有効だ。アプリ開発でリーンスタートアップ的手法を実践するなら、最初にミニマムな機能でAndroid版を出してブラッシュアップを続け、方向性が見えたら満を持してiOS版を出す、という戦略が良いと思う。いえ、住所公開やマネタイズの問題もそんなAndroidアプリ開発にもネガティブな点がないわけではない。Playにおいて有料アプリの販売/アプリ内課金を行う場合、開発者の住所の一般公開を必須とした。これは個人デベロッパーにとって、マネタイズという点では頭の痛い問題になるだろう。Storeも同じように住所公開が必須となる可能性がないわけではない。様子を見守るしかない。Playよりも大きな売り上げを記録している。Storeの6〜7割程度と報告されている。したがって、リリース直後から有料販売あるいはアプリ内課金でマネタイズが必要な場合では、この数字を考慮しなければいけない。結論そういうわけで、今回はAndroidアプリ開発環境の進化具合とiOSアプリ開発環境の混乱という二つの状況の相乗効果があり、特にAndroidアプリ開発をはじめるのによいタイミングなのではないかと思う。僕もAndroidアプリ開発自体は前からやっていたが、ようやくこのタイミングになって楽しいと思えるようになってきた。iOSアプリ開発環境の混乱は、数ヶ月後には収束しているのではないかと予想(期待)している。完成度さえ上がればSwiftによるアプリ開発が生産的で楽しいものになる事は間違いない。それまでの間はiOSアプリ開発は少しストレスを感じる状況が続いてしまうと思うので、この機会に最新のAndroidアプリ開発をやってみることをおすすめします。AndroidとiOSの比較では、先日のエントリーにも書いたようにAndroidが開発環境/OSの出来ともに飛躍的に改善した一年だった。iOSは、先日のエントリーから2ヶ月がたった今も、状況はあまり改善されていない。Yosemiteも不具合が多く報告されているので、Appleには頑張って欲しい...。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイトご意見、ご感想をお願いします。その2ARを学ぶ10連休。折り返し地点までの記録。その110連休に改めてARを勉強することにした。1日目から3日目まで。