Hatena::ブログ(Diary)

MuneOchiの日記

2010-06-27

『BuyKing』のリリースで苦労したこと

18:52

KLab×はてな エンジニア応援ブログコンテスト

さて自分が全てのコードを組み込んでいるiPhoneアプリ『BuyKing』であるが、これまでのリリースにあたって苦労したことを書いてみたいと思う。『BuyKing』のダウンロード

http://itunes.apple.com/jp/app/buyking/id320727657?mt=8

苦労したのはversion1.0 と 1.1 をリリースしたときだ。

1.2 と 1.2.1 のリリースについてはさほど苦労していない。

振り返るとこのアプリのアイデアを市場に問うために、もっと機能を絞って、早めにリリースに踏み切るべきだったと思う。

自分はプロマネ的な立場ではなく、開発者としては、なるべく多くの要望を取り込むべきかと思っていたので、この点では失敗したと思っている。iPhoneアプリの場合、機能てんこ盛りのアプリを作っても余り意味がないのだが、その点を当時は理解できていなかった。

ここまでは進行面の苦労で、開発面で苦労したところは挙げればキリがないが、今ソースを見直すと、よく全部自分で組んだなと思っている。

公開しているライブラリも使用しているが、自分がほぼ一から書いたアプリの中では、もっとも規模の大きいアプリである。

もっとも書き始めた時点では、ここまでソースが膨らむとは思っていなかった。

MVCを決めて、機能を一つずつ組み込んでいった結果、ここまでのソースとなっただけである。むしろ始めからここまでの規模になると分かっていたら、途中でくじけていたかもしれない。

機能のそれぞれはAppleのサンプルコード、先行開発者のブログ、書籍らのコードを参考にして組み込んだ。故に近いパターンのコードが見つかれば、それを真似すればよいので、難しいことではない。何事も最初は真似から始まるのである。

大変なのは真似できるものがない場合である。

最初のリリースで特に苦労した機能は「前回終了時画面の復元」である。これにはアプリそれぞれのやり方があるのだが、『駅探』アプリや『App Storeアプリのような動作を手本として組み込んだ。

だが手本となるようなコードが余りなく、Appleのサンプルコードの「DrillDownSave」というタブは使っていないが、UINavigationContorollerでUIViewContorllerを階層化していて、「前回終了時画面の復元」を実装しているものがあったので、これを手本とした。

まず『BuyKing』の一つのタブでこれを試してみて、まあまあ上手くいったのだが、UIViewContorllerをいくつも重ねると復元に時間がとてもかかって使えなかった。

動作としては一画面を復元しては次の画面を重ねていったので、復元する画面数が多い場合には、

時間がかかって当然である。

なにか方法はないかと『App Storeアプリを動かしていたら、『App Storeアプリが完全に復元するのは終了時画面だけであって、それより前の画面は、画面を戻るときに復元していることに気づいた。これで光が見えた。

だがこれは指針が分かっただけであって、コードは自力で少しずつ組み込んだ。

これで一つのタブで上手くいったので、他のタブにも同様なコードを組み込んで、なんとかやりとげた。

こうして2009年の7月に最初のリリースにこぎつけた訳だが、しばらくしてレビューを見ると、3G環境で落ちるという報告が思いのほか多く、自分は最初は不思議に思っていたのだが、そういえばテストは無線LANの安定した環境でしかやっていないことに気づいた。

早速、電車に乗りながら3G環境のインターネットに繋がったり、切れたりする環境でテストをしてみて、結構バグが見つかった。これには正直青ざめた。

とりあえずクラッシュするところは潰したのだが、そもそもインターネットに繋がってない環境では、このアプリは何の役目も果たせないので、あとは操作の快適性を損なわないようにすることに悩んだが、「これなら耐えられる」というところで自分なりに折り合いをつけて修正をした。

またアプリを使いこむうちに、ライブラリの部分で、エラーが発生することが分かった。

ここの修正は他人のコードだったので意図を理解するのに苦労したのだが、デバックをしながら原因を正確に掴み、修正できた。

こうして8月の終わりにversion1.1を審査に提出したのであるが、1回リジェクトもあったので、リリースできたのは10月の始めになってしまった。

結局最初のリリースから2ヶ月半ぐらい掛かってしまい、この間1.0のバグを放置してしまったのは申し訳なく思っている。1.0を公開する前のテストが甘かった訳で、ここは反省しなければならない。

この後のバージョンではさほど苦労しなかったので、ここでは割愛させて頂く。

こうして振り返ると

・最初のリリースの設定が、当時の経験と比べて高すぎた。

・コードレビューが足らなかった。

アプリの価値を理解した上での的確なスケジュール運営ができなかった。

・ユーザー目線でのテストが手薄になってしまった。

・こちらが焦ってもAppleの審査は早くはならない。そこを考慮してスケジュールを組まなければならない。(この当時に比べれば、現在の審査期間は早くなったが)

この辺りが反省点である。

だが、このアプリの開発して苦労をした分、多くのことを学べ、自信もついた。

この点では非常によかったと思う。

若いうちの苦労は買ってでもしろ ということである。

ただその苦労も乗り越えなければ、余り意味はない。

乗り越えるのに必要なのは、

・周りの支えを上手く利用すること

・置かれた状況を楽しむこと

・くじけずに上手くいくまでやり続けること

こういうことだろう。

トラックバック - http://d.hatena.ne.jp/MuneOchi/20100627/1277632336