Titanium mobileではてなカウンティングのiPhoneアプリを作りました


巷で話題のTitanium mobile(以下、Titanium)を使って、はてなカウンティングiPhoneアプリを作りました。
iTunes App Store で見つかる iPhone、iPod touch、iPad 対応 はてなカウンティング

開発について

昨年秋の開発合宿で、Titaniumを使って簡単な画像アップロードアプリを作ったのがきっかけになって、Titaniumでのアプリ開発に取り組むようになりました。業務後の時間を使って、昨年11月くらいから少しずつ開発を進め、ようやくはてラボのアプリとしてリリースすることに。
リリースまで長くかかってしまいましたが、実際にフルタイムでがっつりと開発できたら2週間くらいでリリースできる位の規模感でした。
はてなカウンティングでデザインをしてもらったid:tikedaとも相談して、Titaniumを使ってどこまでデザインに手を入れたアプリを作れるのか調べてみるという目的もあり、ヘッダーやボタンなど、画像が設定できるとリファレンスに書いてあるところは、だいたい画像を設定しています。

はてなカウンティングiPhoneアプリでできること

Webでできることはほとんど実装しました。

  • カウントアップ/ダウンの閲覧(新着順、今日終了するカウント、自分の作成したカウント、フォローしているカウント)
  • はてラボへのログイン
  • カウントの作成
  • カウントのフォロー
  • カウントへのコメント
  • ヘルプページの閲覧

Titaniumを使ってiPhoneアプリを開発した感想

月並みですが、iPhoneアプリがさくさくと作れるのはかなり新感覚でした。
画面の構成の変更もこれまでの知識でサクサクできますし、Kitchen Sinkというサンプルコード集があるので、こんなことがしたいなぁと思ったときは、まずサンプル集を見て中身をチェックしてから実装できるのが良かったです。
ただ、Titanium万能かというとそうでもなく、例えば以下のような点に困りました。

  • ヘッダー画像がときどき消える
    • ヘッダーに画像を設定していたのですが、モーダルなウィンドウを表示したり、タブを切り替えたりするタイミングで、ヘッダーの画像が消えてしまうことがしばしばあります。
    • この問題はリリースしているバージョンでも残っていて、少々根深い問題です
    • ヘッダー画像の背景色と同じ色を、ヘッダーのbackgroundカラーに指定しておくことで、見た目上の違和感が多少緩和されます。あくまで多少ですが・・・。
  • Table Viewでヘッダーをタップしたときに先頭に戻る、というデフォルト動作がときどき動かない
    • これまた原因が分からず。
  • Table Viewが重い
    • 1.5.0でかなり改善されましたが、それでもtable viewの表示がもっさりで、ネイティブのアプリに比べるとキビキビ度が全然劣ってしまうという問題点がありました。カウンティング開発初期の頃は、まだ1.4.2を使ってビルドしていたので、あまりのもっさりさ加減に、これはもうリリースできないんじゃないかと半ば諦めていたくらいです。

Google Analyticsで計測

今回、以下のjsを利用してGoogle Analyticsによるアプリ内の動作調査を行ってみました。
https://github.com/rogchap/Titanium-Google-Analytics
おかげで、2日ほどしないとわからないアプリのダウンロード数が、ある程度分かるようになり、ボタンのクリック数などから、どのくらいのユーザーが何をもとめてアプリを触っているのかがだいたい分かるようになっています。

追記

エントリ書きました。

Android

今、Android対応を少しずつ進めているのですが、コードの管理方法を変更しないと、と感じております。というのも、Titanium mobileは、"JavaScriptiPhoneアプリAndroidアプリも作れるもの"であって、決して"同じソースコードからiPhoneアプリAndroidアプリも作れるわけではない"ということ。デフォルトで生成できるHTTPClientの挙動が、iPhoneCookieが別インスタンスでも共有されるけど、Androidはされないという時点で、ロジックの方もプラットフォームでの書き分けが必要になっています。そうなってくると、もはや同じリポジトリで2つのアプリを管理するメリットもなくなるわけで。
片方のアプリのロジックに手を加えたら、別プラットフォームでも動作確認をしないといけないというのは、非常にナンセンスです。というわけで、アプリ自体を全く別のプロジェクトとして扱うか、それともディレクトリでiPhone / Androidをうまく切り替え、共通するロジックの部分だけを共有するという形でiPhone / Android開発ができないか調整しているところです。

予告

設計や、プログラミング上のBKなどは、また別のエントリで紹介したいと思います。