TitaniumでAndroid/iPhoneアプリをリリースしました!はてなブックマークリーダー!

はてなブックマークリーダー for iPhone/Android

年末から作っていたのですが、そうこうしている間に公式アプリが出てしまったり、id:moto_makaさんのHTBPocket*1がリリースされたりと祭りに出遅れた感がありますが、ようやくリリースしました。

Titaniumで作ったので、iPhoneAndroid版もついでにリリースしました。
Androidアプリを作る予定は人生になかったよ!
作りたいと思ったアイディアを形にしやすいというのは楽しい!

技術的なことは
titteatech
へ書く予定です。

日々のTitaniumいじりは#titaniumjpにブツブツつぶやいています。
Twitterアカウント tittea (tittea) on Twitter



iTunes Store へ接続中です。

Hatena Bookmark Reader - Android

動作デモ

実機でもiPhone4だと同じような感じで動きます。



Titaniumのスピード感はすばらしい!

使い始めたきっかけは、naoyaさんの
Titanium Mobile についての勉強会資料 - naoyaのはてなダイアリーだったのですが、あまりにTitaniumがすばらしかったので、私もすばらしさを書いておこう。

作ったアプリの機能はこんな感じ。自分が使う機能しか付けてないので単純です。

RSSの一覧表示なんてよくあるサンプルだし、認証はWSSEもOauthもどちらもライブラリもサンプルもある*2のでサンプル通りにやるだけでとくにむつかしいことはなにもない。

とくにむつかしいことは何も無いのだけど、同じことを私はObjective-Cではできませんでした。
何だ簡単じゃん、と言われそうだけど、Titaniumでの主な機能の実装は3日でできた。
しかも、iPhone版を作ったあとでそういえばTitaniumってAndroid向けにも作れるんだよな、、と思ってやってみたら半日であっさりAndroidマーケットリリース、というスピード感でした。

コードは1000行ちょっとで、ほとんどがUI関係のコードです。
ロジックっぽいところは100行もないんじゃないかな。

アイディア勝負みたいな小さなアプリだと、発想から形にするまでのスピード感が大切だと思うので簡単に作れるというのは大きな利点だと感じます。

Titaniumはむつかしくない

私のコードを書く力は、仕事でコードを書いてる人の中ではごく普通だろうし、Objective-CHello world止まりです。

仕事でもコードは書いてますが量は少なくて、作ってるソフトも数万ステップのこじんまりとした感じです。javascriptも、これまでは全然使ったことがなくて、Titaniumをいじりはじめてから本を二冊読んだだけ。

ちなみに読んだのはオライリーの顔の本と、Good partsの二冊。
あとのリファレンスはTitaniumのドキュメントを日本語でまとめた素晴らしいPDF*3と、Kitchensinkを眺めたりgithubのコードを眺めたぐらいです。

titanium-mobile-doc-ja - Appcelerator Titanium Mobileに関するドキュメントを日本語でまとめていくプロジェクト - Google Project Hosting

Head First JavaScript ―頭とからだで覚えるJavaScriptの基本

Head First JavaScript ―頭とからだで覚えるJavaScriptの基本

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

Android/iPhoneアプリ市場が血の海になりそう

Objective-CだとHello worldしかできない私みたいな開発者でも、かんたんなアプリなら作れてしまう。
ここまでアプリ開発の難度が下がってしまうと、これまでそれなりに価値のあった「iphoneアプリ開発」の価値が激落ちで、専業の人はTitaniumぇ・・・というヤバい状況になりそう。あまり専業の人はいなそうだけど。

ゲームとか、特殊な分野は別として、普通のアイディア勝負みたいなアプリだったら、Titaniumで作れるようになると一気に血の海になるのではないだろうか。

今まではObjective-CJAVAという参入障壁があったけれど、Titaniumが一気にその壁を取り除いてしまって、ちょっとコードが書ける人だったら誰でも簡単に、しかも早くアプリを作れるようになってしまった。Objective-Cが理解できなくても、私みたいにJavascriptだったらなんとなく書ける、というレベルの人でもアプリが作れるようになってしまった。

しかも、Objective-Cで書いたアプリと比べても、パフォーマンスにそんなに不満はないので、言われなければTitaniumで作ったとはわからなそう。今までは簡単なアプリでも、アプリがあるだけでそれなりにありがたみがあったけど、今後はそのありがたみが一気になくなってしまうし、簡単なアプリだったらTitaniumでサクっと同じようなものを作れてしまうので有料アプリとして売るのは難しくなるだろう。有料で出しても、すぐに同じようなアプリが無料で出てくる、という状態になりそう。

TitaniumでAndroidアプリはもっさり・・・

同じコードから作ったアプリでも、Android版は相当にもっさりします。
ちょっとこれはストレスが貯まるなあ、という動作の遅さ。最初IS01で動作確認したのでマシンスペックの問題かと思ったのですが、DEFYでもIDEOSでももっさりしていたのでスペックの問題ではないみたい。これは困るなぁ。。

ちなみにAndroidは、シミュレータももっさりしているので開発するのにストレスが貯まります。iphoneシミュレータはサクサクで、コンパイルも2秒ぐらいで終わって動作が確認できるので開発がスムーズに進んでとても楽しい。

開発が楽しい、というのはサンデープログラマーにはたいせつなのかも。

一方で実機で動かすのはAndroidの方が簡単で、USBでつないでRun on deviceを押せばインストールされる。iphoneは実機で動かすにはitunes経由なのでワンステップ多い。

開発環境はMac。もはやMacにしない理由はない!

最近、周りの人たちもどんどんiMacになったりMac book airになったりと、Mac率の高まりを感じますが、もうソフト作るんだったらMacにしない理由がないような気がしています。

CygwinとかMeadowとかがんばってUnix環境に近づけたりしなくて良いし、PerlとかRubyとも相性がよいしシェルもあるし往年のSolarisとか使っていた世代には懐かしい感じだし結局Macでしかiphoneアプリは開発できないのでもうWindowsはもう良いかな、と思っています。Windows7は設定もやたらむつかしくなったし、両親の世代やはじめてパソコン使う人ももうMacの方が良いんじゃないかなぁ。。

ハードがWindowsしかサポートしていない、SONY ReaderとかソフトがMacだとイマイチなScansnapをつかうときなどに、Windowsが必要なときはVMWare Fusionで十分対応できています。VMWare Fusion、普通のWindowsパソコンよりも快適に感じます。

Apple MacBook Air 1.4GHz Core 2 Duo/11.6

Apple MacBook Air 1.4GHz Core 2 Duo/11.6"/2G/64G/802.11n/BT/Mini DisplayPort MC505J/A

Mac book airは安いし、USキーボードも選べるし、開発するには理想的。
MAC BOOK AIRはスペックの割りにさくさく動いて、Xcode、TitaniumのコンパイルはiMacよりも早いぐらい。SSDすごい。最近はMac book airばかり使ってしまっています。Let's noteはもう売ろう・・・。
MacBook Air 11インチ欲しい!

Titaniumアプリではどうやって稼ごう?広告が今は出せない

最近リストラの不安があって落ち着かないのでなんとかもう一つ収入源を作りたいのだけど、Titaniumだと有料にする以外にマネタイズの仕組みが事実上ないみたい。
masuidriveさんが作ったAdmobプラグインはあるのだけど、最新のTitaniumでは動かなかった。

Titanium plus、という名称で、公式拡張ライブラリの一つとしてAdmobがサポートされるみたいだけど、これはTitaniumの有料会員にならないと使えない。しかもその月会費が190ドル!といういったいそれ誰が対象なのさ・・と言いたくなる価格設定で、月々の少ないお小遣いでやりくりしている私みたいな弱小デベロッパーには到底払えない金額。iphone developerの登録費用1万円だって苦しいのにさらに月々2万円近くも出せないよ。。

Admobも、他の広告プロバイダも、Titaniumサポートはまだしていないので広告を載せることは現状難しそう。iAdもまだ北米でしか配信されていないし、しばらくはTitaniumがサポートされるのを待つしかない状態みたい。
iAdは、Titaniumが標準でサポートしているので早くサポートされないかなぁ。

iphoneはiadで良いとして、Androidは結局Admob待ちかな。
iphoneは無料アプリもあとから有料にできるんだけど、Androidは一度無料にすると有料に戻せない、という仕様みたいなのでとりあえず有料にしました。Android版はもっさりしているから有料だと売れなそうだけど、値下げしたらどうなるかとか無料にしたらどうなるのかとか実験してみたいのもあっていまのところ有料です。

Androidアプリは15分だけ?返品可能みたいなので、試しに使ってモッサリ感が確認できたら返品してください。。

はまりどころとか

Androidiphoneをまったく同じコードにするのはむつかしそう

無計画にAndroid版を作り始めたのも原因ですが、iphoneにはあるけどAndroidではないAPIがあったりして参りました。とくにUI系は互換性がないAPIがあるので、クロスプラットフォームにするつもりの場合は最初から考えておいたほうが良さそう。

結局、if(osname === "iphone")みたいなコードが散りばめられて大変美しくない事態になりがちでした。ここまで分けるんだったらViewだけ別にするアーキテクチャのほうがいいんじゃなかろうかと思わないでもないですが、、

Appcelaratorの中の人のサンプルプロジェクトで、クロスプラットフォームに美しく対応してそうなコードがあったのですが、理解できませんでした。。

困ったのはタブの位置が違うことで、iphoneだとタブは下に出るのにAndroidは上に出て、しかもタブの位置は動かせないという衝撃の展開!ギョギョー!となったので最初から考えておかないと。

TitaniumのDeveloper BBSに意外と回答があったりする

なにか困ったらDeveloper BBSを検索すると同じことで困ってる人が見つかることが多かったです。もっとも、回答が付いてなかったりもしますが、、

iphoneのパッケージ作成がTitaniumではできない

ちゃんと設定すればできると思うのですが、いくらやってもTitaniumがDistribution provisioningを認識してくれなかったので、結局XcodeでBuildしてitunes connectへアップロードしました。
Objective-Cを少しかじったのは無駄ではなかった・・・と思いたいところですがXcodeの手順は詳細な解説があるのでやっぱり私にとってObjective-Cは無駄だった気がします。難しすぎるし煩雑すぎ。

Titaniumのバグがある?

ScrollableViewを使うと落ちまくるバグに悩まされたのですが、これはTitaniumの不具合っぽい・・けどあまり深追いしていません。ほかにもWinterboardと相性が悪いのか、そもそもWinterboardが筋悪なのか、Winterboardを入れているとメモリ不足で落ちまくるのに悩まされました。

テストはどうやるんだろう。。

動作確認をビッグバン的にやるしかなくて、単体テストどうやるんだろう、というのは謎。どうやるんだろう?UIがあるソフトを作るのがはじめてだったので謎です。
規模は小さいのでブランチカバレッジも頑張ればそれなりに確保できそう。
脳内ラインカバレッジは100%にするのは簡単でした。

Appleの審査

審査は、バイナリをアップロードしてからProcessing for Appstoreまで2日ぐらいでした。二週間かかる、なんて話が昔あった気がするのですが今は早いんですね。

ちなみに新規登録の時は二日ぐらいでしたが、バージョンアップの時は3日かかりました。誤差の範囲かな。

Titaniumで作ったからどうこう、という話はまったくなく、そのまま審査が通って拍子抜けするぐらい。

まとめ

Titanium楽しい!
ここ数年、新しい何かを試してはHello worldを量産するばかりだったけど、久しぶりに形になるものを作った気がします。
次は何つくろうかなー。iPad向けになんかつくってみようかな。

*1:http://d.hatena.ne.jp/moto_maka/20110111/1294688689

*2:id:chris4403さんのhttps://github.com/hatena/titanium-hatena-oauth-sample androidでは動かないけど。。

*3:これあるから日本でTitaniumがはやったのかも