0から一人で作った web サービスが滑った話
去年6月、初めて一人で作ったwebサービス『部屋立てさん』をリリースした。
『部屋立てさん』は、「ゲーム配信者がリスナーと交流する時に、順番待ちを支援する」webサービスである。
使用例としては、例えば、ぷよぷよなどの大戦ゲームをファンと配信者がやりたい時に、順番待ちを管理したいときなどに利用することを目的としている。
しかし、『部屋立てさん』は twitter 広告などを使っても全くユーザーを得ることはできなかった。
それは、需要を見極めることができなかったということに尽きると思う。しかし、一方で、web サービスを0から自分一人で作ったことで学んだことも多かった。
今回は、失敗してしまった理由と 0 からwebサービスをリリースして学べたことについて記す。
0. 『部屋立てさん』の技術スタック
まず『部屋立てさん』の技術スタックを紹介する。
当時、isucon の予選問題を解いていた影響で Go 言語に馴染みがあったため、Go 言語を使用している。
- サーバー言語 : Go 1.13.10
- フロントエンド : jQuery + Bootstrap
- webフレームワーク : echo
- webサーバー : nginx
- データベース : MySQL 5.7
- OS : Ubuntu 18.04
- サーバー筐体 : AWS EC2
1. 戦略的に失敗した点
まず、失敗した理由についてだが、簡単に言えば、
ゲーム配信における需要の分析が甘かった。
『部屋立てさん』でゲーム部屋を立てることで、確かに順番待ちできるので秩序を保てる。しかし、それは、配信者が秩序を欲しがっていればの話だった。
現在、youtube などで対戦型ゲームの配信をしている配信者を観察していると、挑んでくるリスナーの順番は管理していない。早い者勝ちで順番を決めている人がほとんどである。
そう、配信者からすれば、リスナーが挑んでくる順番はそれほど重要ではなかったのだ。
むしろ、順番待ちを管理することでデメリットすら生まれるということに気づいた。具体的には下記の3点である。
- そもそも外部サービスを使って管理するのはめんどくさい
- 順番にまだ余裕のあるリスナーが配信から一時的に離れてしまう可能性がある
- 配信者が飽きた時、気軽にやめられなくなる
つまり、順番待ちとは、リスナー側にとってのみありがたいシステムであって、配信者が望んでいるわけではなかったということだ。
開発当初、この視点を持つことができなかったため、需要のないサービスを作ることとなってしまった。
2. 開発を通して学んだこと
一方で、0からwebサービスをリリースしたことで、インフラ、サーバーサイド、フロントエンドまで多くのことを学べた。
1. インフラ
2. サーバーサイド
- Golang での Twitter API 利用
- Golang での websocket 通信
- Golang での Gmail API 利用
- nginx プロキシから Unixドメインソケット経由の アプリケーション接続
3. フロントエンド
4. その他( 広告、解析など )
3. 企業で運営するwebサービスとの相違点
『部屋立てさん』は、企業のプロジェクトに参画する前に作成したサービスだった。その後、企業で実際に運用保守されているサービスに生で触れたことで、『部屋立てさん』のシステムとの大きな違いに気づいた。
最も大きいのは、予算の違いに伴うサーバー台数の違い( 開発環境が用意されている、レプリケーションが行われている、バッチ専用サーバー、Jenkins専用サーバーがある)であったが、本質的な違いを感じたのは下記の3点であった。
3-1. CI/CDツールを使っている
多くの企業サービスでは、本番デプロイなどの自動化のために、Jenkins をはじめとする CI/CD ツールを利用している。『部屋立てさん』ではこれを使っていなかった。常に手作業で git clone し、 go build して、 systemctl restart を行なっていた。
( ※ 最近になって、3ヶ月ごとのサーバー証明書の更新作業を Jenkins ジョブで行うようにした )
3-2. ログを解析するためのシステムがある
ユーザーID と紐づいたリクエストレスポンスの行動ログを残すシステムが企業のwebサービスには備わっている。これにより、問い合わせに対して効率的にログを分析することができる。
『部屋立てさん』にはユーザーごとにログを解析するための仕組みが備わっていなかった。nginx から出力されるログを解析するためのツールが備わっていなかった。
3-3. バッチを利用している
現在の機能では、バッチを使う必要はなかったが、例えば『人気のルーム』のランキングをトップページに表示するなどの機能があった場合、cron で定期実行するバッチが必要となっただろう。
4. まとめ
今回 0 からサービスを作ったことで、新しいサービスを作るときの心理的な壁は劇的に低くなった。(『部屋立てさん』を参考にして、適宜書き換えればいいので)
今度はもっと需要を研究して、新しいサービスを立ち上げてみたいと思う。