素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

Web系がモバイルアプリ開発を覚えるまで

昨年末あたりからモバイルアプリ(iPhone, Android)の開発をやっていて、新しい言語とかSDKを一気にいろいろと覚えた。Web開発ばかりやっていてスマホアプリは未体験だったので、今日はスマホアプリ開発について雑感をいろいろ書く。

Titanium Mobile

独自のSDK + JavaScriptでiOSアプリとAndroidアプリを作れるフレームワーク。やめといたほうがいいと思う。UI自体はDOMっぽい独自の物で作る+alert("hi")でアラートが出るなど、開発初期段階では高速につくれる。 しかし、問題点も多い。Titanium Mobileはプロトタイピング以外には向いてないというのが自分の感想。とっつきやすいのはいいが、ネイティブのSDKを覚える価値のほうが高く、しかも独自のSDKの学習コストも馬鹿にならない。

JavaScript自体の問題

規模が大きくなってくると管理が難しい。例えば、MVCパターンなどにしたがってモデルをきれいに分けて書こうとしても、大げさなフレームワークを導入しないときれいに書くのが困難である。 また、ピュアなJavaScriptで書ける部分が少なく(モジュール管理が今のところRequireJS、node.js、その他いろいろにわかれてる)、FileやBlobなどioも環境によってライブラリが異なる、などの事情から、コードの再利用が難しい。

Titanium Mobileの問題

一言でいうと、バギーである。例を挙げると、意味の分からない場所でクラッシュする、ちょっとしたTitaniumの依存環境の違いでビルド自体に失敗する(そしてそれが公式にドキュメントされていない)、など。

そして、SDKAPI設計も非常に行き当たりばったりで、バージョンごとに書き方が違ったり、setter/getterを使うのかプロパティに代入するのかなども一貫性がなく、Viewもparent/childどこに何のプロパティを設定すれば動くのか、動作が同期/非同期なのかなどもドキュメントになく、ドキュメントにないAPIが多い。ネイティブSDKでは当然できることができないことも多い(キーボードまわり、ハードウェアまわり、Facebook認証その他)ので、プロダクションレベルのアプリを作るにはかなり迂回してハックしなければいけなかったり、UI設計を見直さなければならなかったり、とにかくアレである。

Android/iPhoneの違い

Android版のSDKは特にバギーで、iPhone/Androidで同じコードでだいたい動くと思ったら大間違いである。ロジック部分をきちんと分けて書いて、多くの場合、UI部分のコードは別に一から書くほうが速い。

周辺ツール XCodeでは当然利用できるInterface BuilderなどのGUIがない、しかも気の利くツールがない。

PhoneGap

要するにこれはWebサイトに多少のハードウェアアクセスのためのAPIをくっつけるものなので、用途が合えば非常に便利だが(例えば、iPhone/Androidでサーバからデータ受け取ってなんか表示+カメラアクセス程度などの場合)ふつうのアプリ開発とは趣旨が違う。

Objective-C + iOS SDK

Macアプリを書いてない限り、Objective-C自体も使ったことがないと思うので、言語を覚えながら巨大なSDKも覚えなければいけないので、学習コストが割と高い。

どちらもやったことないのであれば、同時にやるのは心が折れやすいので、SDKだけを先に覚えるやり方でをおすすめする。なぜかというと、Objective-Cのみを勉強しても特に面白い物は作れないからである。

rubyは知っているという前提だと、RubyMotionでSDKの使い方だけを集中して覚えるのが遠回りに見えて近道だと思うのだが、RubyMotionは高い+トライアル版がない(試したいなら払ってから30日後に払い戻しになる)ので、最近はMobiRubyという似た物があるのでこれでiOS SDKを覚えるのがいい。

MobiRubyはまだアルファ版だが、AppleのサイトでSDKのドキュメントを見ながら使い方を覚える程度にはちょうどいい。そして、SDKを覚えたらRubyObjective-Cでの書き方の違いを覚えると、Web系の人は苦痛を最小限に抑えられる。

Java + Android SDK

JavaはWeb系であればやったことなくても1週間くらいあればフィーリングで全く問題なく書ける言語なので、言語は問題にならない。Android SDKだけが問題である。 Android SDKはウェブ上に情報が多量にあるので、この点に関してもさほど心配する必要はない。 まずAndroid公式のDevelopersのサイトからAPI Guidesを一通りすべて読んで、標準の開発環境のEclipseでコピペしながら動作を確かめることをお勧めする。その後、サンプルアプリなどのソースをざっと流し読みし、あとはAPIドキュメントを読めば、アプリを書き始められるようになる。