突然ですが、AnoNewsをサービス終了しました。
(※ AnoNewsについてはリリース時の記事をご覧ください)
約2ヶ月という短い期間の運営となりましたが、その中でも多くの学びと経験を得ることができました。 使っていただいた方、ご意見・ご感想をくださった方々へ感謝を伝えたいです。
お知らせとしては以上となるのですが、せっかくなのでサービス終了の理由や運用してみた感想など書いていきたいと思います。
使用技術
Rails 8 / Hotwire / PostgreSQL / Redis(ActionCable) / Fly.io / Google OAuth / Gemini API / 自作gem(ruby-gemini-api)
サービス終了の理由
まずサービス終了の理由ですが、一つは運用を通じた技術検証が十分にできたことです。
AnoNewsは社会的な課題(ニュースが忘れられてしまう)に着目したサービスでしたが、この課題を解決するには個人プロジェクトとして規模感が合わない、というのが私の出した結論です。単純に集客力が足りないのもありますが、公開された記事をわざわざ修正してくれる、検証してくれるユーザーがいなければ成り立たない、というのがサービスの設計として難しいと感じました。
第2の理由としては、想定以上にサーバー代がかかったことです。appサーバ、DBサーバ、SolidQueueサーバにクラウドストレージ、それぞれをproductionとstagingに作ったところ月々60ドル程度のランニングコストとなりました。ソートボタン連打や複数ユーザーの同時AI記事生成といったケースを考え、負荷対策として少し良いスペックのマシンを借りていたのですが、個人プロジェクトとしては見直しが必要でした。
逆にLLMの費用は(ユーザーが少ないので)全然大丈夫でした。
学び
導線設計の重要性
サービスの強みとして「AI記事生成がとにかく面白い」と考えていたのですが、実際に作ったものは「ログインしてから投稿メニューを押して、AI記事生成を押して、気になるニュースのURLを入力すると生成される」というものでした。初見のユーザーが楽しいところに辿り着くまでの道のりが長すぎました。
次に活かすこと: サービスの一番面白い部分は、最短導線で体験できるようにする。
ユーザーでいなければいけない問題
私自身も記事を書き、投稿された記事を読み、修正したり、いいねしたり、1ユーザーとして活動しました。しかし、新規ユーザーがいないため毎日自力で投稿・巡回することが義務化されました。これは持続可能ではないと気づきました。
記事にしたいニュース、追いかけたいニュースがあるからサービスを使うはずが、サービスを使うためにニュースを探すことになったのです。負担を減らすために扱うニュースの候補を自動ピックアップするスクリプトを作ったりしましたが、本末転倒だと感じました。
次に活かすこと: 自分自身が「義務」ではなく「使いたい」と思えるサービスを作る。コールドスタート問題の解決策は、運営の努力ではなく仕組みで担保する。
良かったこと
技術的知見がたくさん得られた
触ったことのない技術、実装したことのない機能をたくさん触ることができました。Google認証、ポーリングによる通知、WebSocketによるリアルタイムなスコア加算など、自分が「こういう風にしたい」を実現するための様々な技術に触れられたのはとても良い体験でした。
監視やオブザーバビリティなど、普段あまり意識したことがなかった概念に触れられたのも良かったと思います。
自作gemをちゃんと使えた
公開しているruby-gemini-api gemをサービス内で活用したため、実際の使い心地を体験できました。不足している機能もわかったため、gemのメンテナンスも並行して行うことができました。
感想
作ってみて良かったです。サービス運用は大変だなとも思いました。
だいたい1ヶ月くらいで完成させたのですが、寝食を忘れて開発していました。とても楽しかったです。
また何か面白いものを作りたいと思います。