個人開発のサービスのα版が完成した

今月App Storeへの申請が承認されてあとはリリースボタンを押すだけになった。 やっと一息つけた感じではあるが、正式版を開発を進めてα版と正式版の期間を出来るだけ短くしたいのでリリースするのはもっと先の予定だ。

とはいえやっと一つのマイルストーンに達したので現状の振り返りをしたい。

どんなサービス

オンライン上でお金を払い一緒にゲームをする相手を探すサービス。

振り返って良かったこと一覧

  • Figmaをデザインツールとして選定したこと
  • Flutterを採用したこと
  • Node.jsをbackendに採用したこと
  • PlanetScaleを採用したこと
  • Notionで出来るだけWebページを構築したこと
  • Cloud Runを採用

箇条書きで書いた内容のことをいくつかピックアップする。

ツールと技術選定に関しては振り返ってみても良い選択だったと思う。今までAdobe XDでデザインを構築していたが将来性や無料プランを比較するとFigmaにして良かった(途中でAdobeFigmaを買収してXDの立ち位置も微妙になっていたし)

Node.js(TypeScript)の採用もまあ悪くはなかったと思う。GCPとFirebaseのSDKも豊富に揃っているし、そこそこ型付けできて(普段書いているSwiftを比較すると微妙だけど)、インクリメンタルビルドをサポートしている。サーバーサイドに関しては結局全部100点のものは無いので失敗しなければ良いと考えている。

PlanetScaleの採用はかなり良かった。GCPでCloud SQLを建てると月額でも料金がかかるので、今のところ無料で使えているのは嬉しい。また本番反映のフローもPull Requestもどきみたいなフローを使えるのでそこはかなり新鮮だった。

今までHerokuを使っていたが今回からCloud Runを使うようにした。IAMの連携やBuildやデプロイに関してはかなり複雑になり(今までのHerokuが簡単すぎた)途中後悔もしたが、終わってみると一週間ぐらいで構築出来たからそこまで問題にはならなかった。 ただ、Terraformで管理、ベストプラクティスなIAMを構成したいみたいなことをやると時間がかかるのでどこかで妥協出来て良かった。

振り返って今ひとつだったこと一覧

  • 単純に開発期間が長すぎたこと
  • Webサービスではなくモバイルアプリにしたこと
  • α版の定義が微妙だったこと。もっとApple審査に通すことを主目的にすれば良かった
  • 認証を最初からメールアドレス・パスワードにすれば良かった
  • Firebase Firestore難しすぎ

単純に開発期間が長すぎた。開始から16ヶ月かかったのでそれは想定外だった。 開発期間が長くなったのはひとえにApp Storeに公開するために必要な機能を初期の段階から揃える必要があった。これがWebサービスであれば自分の裁量でスコープを決められるがApp Storeから公開となるとユーザーもまだいないのに必要な機能が増える。 Webサービスとモバイルアプリの比較は初期リリースだけではなくて、長期的に見て比較してみないと分からないこともあるので現時点での評価は難しい。

今回はα版でとりあえずApp Storeのレビューを通すことが目的だったのだが、結果的にいくつかの機能が増えたり消してたりした。そもそも最初のレビューからReject判定されまくり、承認されるまで2ヶ月かかった。これが事業会社であればPMはストレスで倒れると思う。 Rejectされた理由としてはもうこれだけで一つの記事が書けるぐらいだが、レビューアーへのアカウント提供が上手くいかなくて時間がかかった(これを掘り下げるとまた記事が1本分に相当しそう)。

実はチャット機能があってFirestoreを使って実現している。チャット機能を過去の現場ではポーリングで実装していて、クライアントの実装が大変だったのでサーバーからのPushがあるやり方で実装したかった。ただ自分の実力不足もあるのだがRDBとFirestoreでのデータ同期が大変だったしFirestoreのスキーマ定義がかなり難しい。クライアントはシンプルになったが、全体の処理の流れは難しくなったと思うので結局どっちが良いのかは分からなかい。というより、スケールしやすいとかは正直そこまで重要ではなくて単純にリアルタイム更新が出来ればよかったので、Pusherとかで購読処理するだけでも良かったのか(ただ金額までを含めるとFirestoreに軍配が上がるし、、)

まとめ

時間がかかりすぎたという事実だけど、自分のペースを守った結果なので。あとは正式版までに足りなかった機能を追加しつつ、その後は既存の機能のブラッシュアップをしつつ集客に力を入れていきたい。