kivyでモバイルアプリを作ろう!

kivyってなに?

サイト: http://kivy.org/ ソース: https://github.com/kivy/kivy

ここで公開されているマルチタッチアプリ開発キットの名称です。

Fresh/Fast/Flexible/Focused/Funded/Freeを信条に開発されているそうです。

../../../_images/architecture.png

Androidでのサンプル動画 http://vimeo.com/22725621

kivyの特徴

  • Pythonを主に使って開発。
  • ライセンスがLGPL。
  • レンダリングがGLESベースでGPUアクセラレートが効く。
  • ゲームアプリ開発向き。
  • 多彩なWidgetsは無く、ボタン以外はカスタムWidgetsを作るのが基本。
  • 極基本なWidgetsが揃ってた。ツリービューや結構リッチなファイルセレクタもある。
  • 主要なプラットフォームをひと通りサポート(Windows/MacOSX/Linux/iOS/Android)
  • 同じコードがPCでもモバイルデバイスでも動く。
  • レイアウト情報、画像リソースなどはkvファイル(リソーススクリプト)で分離できる。
  • PC版でもカメラアプリがちゃんと動く(OpenCVバックエンド)。
  • APIマニュアル完備。
  • シェーダも書ける。
  • 拡張用の仕組みも持ってる。

Android環境ではpython-for-androidに依存。それ以外のプラットフォームでは ボトルネックをCythonでチューニングしてるので結構サクサク。

TUIO

サイト: http://tuio.org

TUIOっていうオープンな仕様のマルチタッチイベント交換プロトコルがあって、 カメラからマルチタッチイベント生成したりしてトラッカー(サーバー)がイベントを発行。 クライアントがイベントを受け取ってアプリで利用することが出来るようです。 トラッカーはWindows7以降用などもあり、組み合わせ次第でいろんな環境やセンサでマルチタッチ環境を作れるようです。

kivyはクライアント内蔵なのでお好きなトラッカーを動かせば、マルチタッチ操作が出来るようになります。

OSXトラックパッド用トラッカーアプリ: https://github.com/fajran/tongseng

~/.kivy/config.iniに以下を追記:

[input]
multitouchtable = tuio,localhost:3333

追記:Mac-OSXの場合以下のinputプロバイダがありました。この場合TUIOトラッカーも必要ありません。

~/.kivy/config.iniに以下を追記:

[input]
multitouchtable = mactouch

なんかTrackpadでマルチタッチ環境が作れちゃうのは面白い!

以上の環境が無くてもマウスでマルチタッチエミュレーションはできます。 (右クリックでタッチポイントを増やせる)

参考アプリ

kivy製のアプリ

kivy-iosの使い方

git clone git://github.com/kivy/kivy-ios
cd kivy-ios
./tools/create-xcode-project.sh sample sample

とするとapp-sampleというフォルダが作られます。

app-sample/
├── icon.png
├── main.m
├── sample-Info.plist
├── sample.xcodeproj/
└── sample/ <- 作成

「app-sample/sample」というフォルダを作り、そこにkivyアプリソース一式を投入します。 起動スクリプトは「app-sample/sample/main.py」としてください。

「app-sample/sample.xcodeproj」をXCodeで開いてビルド! デフォルトではiPad用のプロジェクトになっています。 適宜ユニバーサル指定に変えてiPhoneサポートの設定をしてやれば双方で動くアプリが実機で動くようになります。

ネイティブAPIへのアクセス手法

PhoneGAPなどが用意しているような通知や周辺デバイス用のAPIが見当たりません。 おそらく、ネイティブAPIを別途叩くことになるかと・・・。

ネイティブAPIにアクセスする時点でクロスプラットフォーム利点は失われます。

  • デスクトップではフツーにPythonモジュール
  • AndroidではPyjnius経由
  • iOSではCython経由?

もうちょいな点

  • あらゆるモジュールをパッケージングするのでアプリが肥大化しやすい。
  • 名指しでモジュールを除外する仕組みがあるが自動で解決する仕組みがないとしんどい。
  • unicodeでのレンダリングは可能だけどttfフォント必須。
  • PC版だと文字入力にIME経由で入れられない(PyGameの問題)
  • 生成XCodeプロジェクトにx86ライブラリがバンドルされていない?のでシミュレータテストができない。

所感

マニュアル通りにセットアップするとUbuntu12.10とOSX10.8,iOS6でさっくり動きました。 ドキュメントと実装のギャップも少なく感じました。

APIセットがやはりゲーム向け主体なので、 ゲーム作るんならオススメです!