早くもCirclesearch for Android(以下c4a)の初版リリースから2年が経とうとしています。
今後の自分への教訓に過去のつぶやきからおさらいしておくことにしました。
Circlesearchについて
いわゆるTwitterから同人誌即売会に参加するサークルをリストアップするやつです。
Web版を公開してから1年が経過するタイミングに合わせてAndroid版を開発することにしました。
開発について
開発を開始したのが夏コミ前の7月ごろではありましたが、
Android開発未経験の状態から始まったこともあり結構な無理をしていた記憶があります。
この追い込み感 pic.twitter.com/h66oxvpbMd
— 連休最終日 (@paralleltree) 2017年8月12日
右も左もわからないまま作り進めていく中でデバッグを友人に頼めたので本当に助かりました。
友人にデバッグを依頼するときの一般的なやりとりです pic.twitter.com/8kTCuviA4f
— 連休最終日 (@paralleltree) 2017年7月30日
Releaseビルドが通らない
初めてのアプリ制作に苦労する中でリファレンスを読み漁りながら解決することを繰り返していましたが、個人的なリリース前のクライマックスはReleaseビルドが通らなかったときですね。
たすけて pic.twitter.com/RCq4fiqAK8
— 連休最終日 (@paralleltree) 2017年8月6日
時代遅れのJackを使っていたので外したら通りました。焦ると本当に目の前が見えなくなるんですね。
Javaのことが全然わからない中相談に乗ってくれたあやにゃん(@ayatk_ch)としばふ氏(@shibafu528)には感謝してもしきれません。
紆余曲折を経ましたが、最終的には無事夏コミ開催前にリリースを間に合わせることができました。
まもなく夏コミですがTwitterからコミケの参加サークル探すやつのAndroidアプリができました。ある種最適化されたコミケカタログとして利用できます。
直前で今更感漂ってますがその後のコミティアやこみトレでも使えるのでよしなにhttps://t.co/vpoMlw8zSq pic.twitter.com/uLzbCuoYj6— 連休最終日 (@paralleltree) 2017年8月7日
これでめでたしめでたしと終わることができればよかったのですが、残念ながらそううまく事は運びませんでした……。
クラッシュアラートがめっちゃ上がってくる
ひどいでしょ pic.twitter.com/y4DAW1n4RR
— 連休最終日 (@paralleltree) 2017年8月10日
開き直すと最初から読み込むため時間がかかる
・コミケの会場内の通信速度が遅いため開き直すのにかなり時間がかかってしまう
できたらある程度のデーターベースは端末内に保管したほうが便利かと思いました
— SSD死亡 (@sudosan) 2017年8月13日
めっちゃ落ちました。
ぬるぽ出しまくってて本当に申し訳ない気持ちしかありませんでした。
書いたSQL文が間違っている
それでは聴いてください
「mapToOneするのにWHEREがない」 pic.twitter.com/7v9wxdhdyk— 連休最終日 (@paralleltree) 2017年8月11日
しかもDBからはイベント情報を引っ張ってきているのにその結果をユーザ情報として処理するというガバガバっぷり。
データの初回フェッチ時は大丈夫だけどキャッシュから引っ張った瞬間に死ぬおかげで気づくまでに時間がかかることに……。
一番面白いのは引数で与えられたIDがメソッド中に1度も出てきてないところだと思います
— 連休最終日 (@paralleltree) 2017年8月11日
時間に追われる中でやった脳死コピペが災いしました。
こうしてリリース直後から2度の修正を経たc4aですが、このときまだ表面化していない恐ろしい実装ミスを仕込んでいたことを知る由もなく夏コミ3日目に突入します。
とんでもない記述ミスがあったCirclesearch for Androidですが2回目の不具合修正をリリースしました。そろそろ既存のクラッシュは滅せたはず……。
— 連休最終日 (@paralleltree) 2017年8月12日
イベントが消える
3日目の朝、ビッグサイトへ向かう電車の中で異常に気付きました。
Circlesearch for Android、コミケ3日目にしてイベント一覧から消えてて悲鳴上げてる
— 連休最終日 (@paralleltree) 2017年8月12日
原因
結論から言うと完全にクライアント側の実装ミスです。
JavaのDateが日付だけを保持していると思い込んでいましたが時刻も持っていて、イベント開催期間の判定処理が間違った結果を返していました。
終了日が日付だから時刻変換した結果その日の0時扱い→ローカルタイムが0時を過ぎた瞬間開催終了扱い→(:3 」∠ )_
— 連休最終日 (@paralleltree) 2017年8月13日
時刻は朝の6時半、コードを直して修正リリースを打つなんて芸当は外出中にできるはずもありません。
それでも3日目になった途端に使えなくなるというのは最悪すぎる状況です。
結果
circlesearch、今何気なく開いたらコミケ4日目あってワロタ pic.twitter.com/yN7pOwgMta
— やま先生 (@komaguchi) 2017年8月13日
はい。
イベント情報はサーバ側で管理して配信する仕組みをとっていたので、イベントの終了日を1日後ろにずらす、すなわち開催期間を4日間にすることでイベント一覧から消失しないように†運用で対処†しました。
Twitterなどで流れてくる運用で対処ネタを笑っていたのに、
こんなタイミングで当事者になるとは思ってもみませんでした……。
いろいろと不備が多かった初回リリース
はじめてのAndroidアプリ開発は困難の連続で利用するユーザには不便を強いてしまいました。反省です。
開き直すと最初から読み込むため時間がかかる
・コミケの会場内の通信速度が遅いため開き直すのにかなり時間がかかってしまう
できたらある程度のデーターベースは端末内に保管したほうが便利かと思いました
— SSD死亡 (@sudosan) 2017年8月13日
特にコミケ会場という劣悪な通信環境下ではキャッシュ実装がないというのが
かなり厳しいポイントになっていました。
学校も忙しくなる中でキャッシュを実際に実装できたのはさらに1年後。時間を有効に使いながらスピード感を持って開発できるようになりたいです。