5th
CoronaSDK: Agile Meets Device
スクリプト開発
コロナはスクリプト(Lua)で開発する。ウェブアプリのスクリプティングでの開発と同じであり、xCode/EclipseといったIDEでのobjective-cやjavaでのプログラミング、コンパイル/ビルド、そしてiOS SimulatorやADT Emulatorでの動作確認という流れとは違う。それらのIDEを使うよりも、圧倒的に動作確認までが早いスクリプトでのアプリ開発である。(このようなものは、いままでのモバイルの組み込み開発ではほとんど見かけない)コロナの反復開発は画像変更、コード変更の結果が即座にシミュレータで確認可能である。プリント(print)出力をシミュレータのコンソールに出力するデバッグが基本だ。
通常のウェブアプリのスクリプト開発では、ソースコードのコンパイルが必要ないので、結果がブラウザやログで即座に確認できる。デバイスのネイティブアプリ開発との大きな違いである。この利点をコロナはLua言語のスクリプトとシミュレータで実現している。
ネイティブアプリ
コロナはネイティブアプリであり、OpenGLやiOS/Androidのネイティブのフレームワークとの結合は、LuaのC Bindingで行われている。デバイス用のコンパイル&ビルドはアンスカ社のクラウドサーバが行う仕組みとなっており、ユーザはLuaスクリプトとリソース(画像やサウンドなど)からのアプリのビルドをアンスカ社のサーバに委ねる。クラウドでビルドを行うという特徴的な仕組みが採用されている。
ビルドされたコロナのアプリは、JavaScriptやブラウザといったランタイムエンジンを利用していないので、ネイティブアプリとしてのパフォーマンスを引き出すことが可能だ。Luaエンジンは高速なデバイス用の組み込み用VMとして実績があり、コロナで作成されたアプリのパフォーマンスがとても高いことは実証済みである。
コンセプトとして、アプリのフレームワーク(ネィティブ)がスクリプト機能をもっているといった形に近い。ネィティブのフレームワーク(API)に直結している LuaのスクリプトであるJavaScriptがスクリプトのランタイム経由でアプリとして動作するような作りとは違う。
Luaバインディングの仕組みをiOSとAndroidのフレームワークに適用した設計によって、一つのLuaスクリプトのプログラムから、iOSとAndoridの両方のアプリ開発が可能である。
これらはコロナのイノベーションの一つである。スクリプトであるが、ネイティブアプリなのである。ネイティブ開発の性能とウェブアプリの開発スピード、それぞれの良い点を合わせ持っている。
シミュレータ
コロナは反復的な開発を実現するために、デスクトップ上での動作が十分確保されたシミュレータが用意している。デバイス(組み込み)のネイティブ開発は、所謂、クロス開発。デスクトップパソコンで開発と動作確認(シミュレータ)とデバイスでのアプリの動作確認と開発環境が2つ存在することを意味している。
アンドロイドのエミュレータやiOSシミュレータが用意されているが、OS全体をエミュレートしているために、デスクトップ上では動作が重たい。また同じように、デバイス上の動作確認もコンパイル/ビルド/デプロイ(インストール)といったプロセスがあり、ウェブアプリのスクリプト開発環境の反復的な開発スピードには劣る。
Runtime engine
携帯コンテンツは、HTMLやFlashLiteコンテンツで大ブレークしたわけであるが、これらのコンテンツの開発は、ネィティブアプリ開発とは違っている。HTML/CSS/JavaScriptのウェブコンテンツやアプリは、スマートフォンでもより一層の飛躍が期待されるだろう。
しかし、FlashLiteはどうであろう、PCブラウザのFlashはどうであろうか?
組み込みのFlashLiteプレイヤーの開発に携わってきたアンスカ社のWalter&Carlosと筆者や多くの組み込み開発を行っている人にとっては、当たり前のことかもしれないが、組み込みのアプリ開発は、このデスクトップ上の開発/確認とデバイスでの動作確認といった
2つのフェーズに直面することになる。組み込みのネィティブ開発のデスクトップ上の環境は、スクリプト開発のようなスピード感のある反復的な開発とは全く違っている。Flashプレイヤーやブラウザといったデバイス上のランタイム開発は、その性能と品質確保で限界に達している。
OpenGL
デバイス上のOpenGLの性能を引き出すことによって、十分なパファーマンスをもったグラフィクスの描画が可能である。このためには、HTMLやXMLといったデータや構文解析/スクリプトでの処理よりも、スプライトシートといった画像処理の最適化が必要である。コロナの描画エンジンはOpenGLを利用した高速な画像処理を可能にしている。Flashのベクター画像やHTMLのパース/レンダリングがデバイス上である意味限界で、ネイティブアプリにパフォーマンスで劣るのは、OpenGLの性能を引き出すことができないからである。実際にOpenGLを使うとなるとOpenGLをカバーするフレームワーク(cocos2Dといった物理エンジンなど)も必要となる。このフレームワークをFlashやブラウザで用意することもまたオーバヘッドを加算することとなる。
コンテンツ
HTMLやFlashの最大の利点はコンテンツであるということだ。Flashは、アドビ社のコンテンツ開発環境のIDEであるFlashやFlexが利用可能だ。レベルデザイン、UIデザインが視覚的で直感的なツールを使い行うことができる。またアクションスクリプトをフレームやムービクリップに付与することも可能だ。コンテンツ開発は、この統合的な開発環境で行われ、コンテンツをデバイス上のランタイム(プレイヤー)で再生し、動作確認を行うことになる。
スマートフォンのモバイルコンテンツとしてもFlashのようなリッチコンテンツが期待されており、Flashのようなデザインツールの利用を行いたい。それをスクリプト開発のようなアジャイル開発で行い、且つ、ネイティブアプリとしての性能を十分に引き出した形で実現したい。それをゴールとして、モバイルのアプリ開発手法に新しいアプローチを提示したのがコロナである。
またコンテンツとして、スマホとしての新しい機能やサービスの利用が期待されている。コロナでサポートされている機能としては、下記のFlashとの比較表を参考。
http://www.anscamobile.com/corona/comparison/flash/features/
アンスカ社が用意しているAPIには、OpenFeintやAds(inmobi), Credits(superReward),
In-App-Purchase(apple store)などもある。
http://developer.anscamobile.com/content/network
コロナで開発されたゲームやアプリやピクチャーブックは、アンスカ社のブログやショーケースで見ることがでる。
ブログ
http://blog.anscamobile.com/category/showcase/
ショーケース
http://developer.anscamobile.com/showcase/
開発プロセス
開発の流れとしては、ディスクトップのパソコンで、グラフィクスを用意して、画像の表示、インタラクティブな機能をLuaのスクリプトでコーディングを行い、デスクトップで動作するシミュレータで動作を即座に確認。この反復的なイタレーション開発を行う、問題なければ、iOS/Androidのアプリとしてのビルドを行う。
デスクトップ
グラフィクス
画像/スプライトシート
コード
ツール/テキストエディター
シミュレータ
開発/動作確認
デバイス
ビルド/動作確認
必要な環境は、パソコンとコロナSDKとテキストエディターで始めることができる。XCodeはデバイス用のビルド時にプロビジョニングファイルの作成のために必要である。
シミュレータの動作確認までなら、インストールする必要はない。Androidのアプリ作成をおこなうときに、EclipseとAndroidSDKのインストールは必要ない。デバイス用のビルドにJavaSDKのインストールが必要である。
ツール
コロナ自体には、インターフェイスビルダーや直感的なFlashのようなデザインツールは含まれていない。コロナの特色として、様々なサードパーティが開発したツールが利用できる。これらのツールをアプリ開発のレベルデザインのツールとして利用する事も可能だ。デザインツールをそのままコロナのレベルデザインツールとして利用可能なKwikやSpriteLoqが存在する。
Kwikは、Photoshop CS5で作成した画像に、Kwikのダイアログでボタンやアニメーション設定を行いコロナのソースコードと画像等のリソースを出力する。これはコロナシミュレータで即座に動作確認が可能だ。
SpriteLoqは、Flash CS5で作成したFlashアニメーションをコロナで利用可能なスプライトシートに変換する。Flashのステージ上に配置したムービクリップのレイアウトをコロナでも再現する。
以下に利用可能なツールなどをリストしてみた。グラフィクス(画像)はPNG/JPEGが利用可能なので、どんなデザインツールでも良いだろう。
1.画像やスプライトシートの準備
- Gimp
- Inkscape
- Fireworks (有料)
- flash (レイアウトも可能) (有料)
- Photoshop (レイアウトもインタラクティブ機能追加も可能) (有料)
2.画像の配置/レイアウト/レベルデザイン
- Gumbo
- Inkscape > TextEditor.SVGLevelBuilderLibrary (有料)
- Lime (有料)+ Tile
- SpriteHelper/LeverHelper (有料)
- Flash+Spriteloq (有料)
- Photoshop+kwik (有料)
3.インタラクティブ機能の作成
- Photoshop+kwik (有料)
- text editor(コーディング)
=> corona simulatorでの確認
GumboやSVGLevelBudlerやLime/Tileについてはこちらの情報を参照。
http://groups.google.com/group/coronaja/browse_thread/thread/dd300f15e9042366?hl=ja
この1、2、3を繰り返すことになる。
拡張性
開発は全てluaのコードのみで実現する必要がある。luaの様々なモジュールを利用できる。コロナは、クロスプラットフォームのネィティブアプリの開発を一新させようと始まったプロジェクトであり、ネイティブのフレームワークとAPIとの結合は、コロナ自体(アンスカ社)がカバーし、ユーザ(開発者)をネイティブ開発から解放するというゴールを目標としている。この思想とコロナの拡張はアンスカ社のビジネスとして行うという面から、ネイティブのライブラリやフレームワークを開発者がコロナに結合(インテグレート)することはできない。コロナの思想的な面とサーバでのビルドを行いライセンス(サブスクリプション)課金といったビジネスモデルの面から、ネイティブ拡張はサポートされていない点はご理解していただきたい。


