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

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の審査は早くはならない。そこを考慮してスケジュールを組まなければならない。(この当時に比べれば、現在の審査期間は早くなったが)

この辺りが反省点である。
だが、このアプリの開発して苦労をした分、多くのことを学べ、自信もついた。
この点では非常によかったと思う。
若いうちの苦労は買ってでもしろ ということである。
ただその苦労も乗り越えなければ、余り意味はない。
乗り越えるのに必要なのは、
・周りの支えを上手く利用すること
・置かれた状況を楽しむこと
・くじけずに上手くいくまでやり続けること

こういうことだろう。