🦄

高校生が作った有料サービスがちょっと儲かったのでいろいろ書く

2021/11/11に公開
4

Discordの有料読み上げBotを運営している高校3年生です。公開2年目で月に12kほど利益が出ています。
https://bardbot.net

  • 最大4つのボイスチャットで読み上げ可能
  • 可用性99%
  • Webダッシュボード

などの機能があります。Discordを使っている方がいれば、ぜひ導入していただけるとうれしいです。

コミュニティの宣伝

未踏ジュニアに採択された採択者で、未踏ジュニアに挑戦したい方向けのコミュニティを始めました!約12人の採択者と話をしたり、質問できます!ぜひ共有していただけると幸いです🙏
https://discord.gg/5Q5qneWUFZ

なぜ作ることにしたのか?

昔(4年前)頃から無料のDiscordの読み上げBotは存在していましたが、どれも使う人数が多すぎて制限があったり、読み上げが遅くなったりするという問題がありました。そこで、有料の読み上げBotを運営することにしました。

料金体系

一律で月500円/20万文字のサブスクリプションにしました。google cloud text to speechを利用していますが、こちらの料金が1600円/100万文字なので、20万文字で約320円という計算になります。そこにサーバー代がかかるとすると、これくらいが妥当だと考えました。

開発言語

Bot

複数のBot間で設定を即時反映する必要があったため、内部にGo+EchoのAPIを使用しています。また、Bot本体はRust+Serenityを使用しています。
最初の頃はPythonで書いてありましたが、PythonのDiscord API Wrapperが開発終了したのと、なぜかメモリ使用量が一日5%程度上昇するという問題があったため書き直しました。
次にF#を使い書こうとしたのですが、API Wrapperがなぜか動かなかったため諦めRustを使いました。

Web

Next.js+Firebaseを使っています。Firebase Firestoreとの相性が良かったのと、Reactを書きたかったからです。
昔はNuxt.jsも使っていましたが、書き方が気に食わず、不採用となりました。

データベース

データベースにはFirestoreを利用しました。Bot側ではRedisを用いてキャッシュしています。
Cloud SQLも考えましたが、費用が高すぎるため断念しました。

ホスティング

Bot

BotのホスティングはECS on EC2(リザーブドインスタンス)を利用しています。現在はT3 micro1台で動作していますが、キャッシュの量が増える可能性があるのでメモリーだけ増やしたいですね...

Web

VercelのProプランを利用しています。Hobbyと何が違うのかわからないのでHobbyにしたいですが、営利目的なので仕方がない...

課金システム

Stripeを利用しています。Stripe Checkoutを使い、Billing Portalも活用しています。
自前で作るよりめちゃくちゃ簡単で綺麗なサイトが作れるので、今後も使っていきたいです。
銀行振込は毎月1日に設定しています。

StripeのWebhookをFirebase Functionsに構築し、課金が行われたりキャンセルされたり、支払いが失敗した際にFirestoreを自動で更新しています。

CI/CD

Github Actionsを用いてDocker ImageのBuildからECRへのpush、ECSのServiceの更新まで行っています。
ECS CLIのCompose modeを利用しているので、jsonをいちいち更新する必要がなく便利です。

release.yml
ecs-cli compose create --cluster-config bardconfig --ecs-profile bard
aws ecs update-service --cluster MainBardCluster --service Main --task-definition ecs

logging

logの収集にはkibana+elasticsearchをセルフホストして利用しています。OracleのARMインスタンス(メモリ24GB、4vCPU)が無料で使えたので、かなり安定して運用できました。Oracle様様...

このように読み上げ文字数やメモリ使用率をグラフ化して表示しています。

知見など

Dockerコンテナのメモリ使用率が知りたい!

/sys/fs/cgroup/memory/memory.usage_in_bytes に書いてありました。

Github Actionsが長すぎる

Rustのビルドにかなりの時間がかかっていたため、cargo-chefを利用しました。

ローカルでテストする際はbuildkitのcacheを利用しています。

COPY Cargo.toml Cargo.lock ./
COPY src ./src

RUN --mount=type=cache,target=/usr/local/cargo/registry \
    --mount=type=cache,target=/usr/src/target \
    cargo install --path .

FROM runner

COPY --from=builder /usr/local/cargo/bin/bard .

なかなかサブスク加入者が増えない

Twitterアカウントを開設したり、noteの記事を書いて誘導を考えました。
また、かなりみられている他の方の記事に書いていただくことでPVを狙いました。

https://note.com/kabikabichan/n/nb2fbb1a70b9f

おかげで4日に1~2人のペースでサブスク加入していただくことができました。

今後やりたいこと

海外展開

海外のサーバーでも利用していただけるように、i18n対応をしたいと思っています。

新機能の開発

大学受験が終わるまでは保守点検くらいしかできないため、大学受験が終わり次第新機能を開発したいと思っています。

toB向けのDiscord Botを作る

企業のDiscord利用が最近多くなってきたようですが、企業向けのDiscord Botを見たことがないため、フロンティアではないかと考えています。企業向けのDiscord Botの案件がある方がいれば是非連絡していただけるとうれしいです。

Discussion

mtabemtabe

素晴らしい♪
受験終わったら新機能+利益の上がるビジネスに挑戦してみてください!!