Webサービス(ベータ版)の技術選定とシステム構成
Webサービス(ベータ版)を作成するにあたり、どの技術を選定するのか、そしてどんなシステム構成にするのかを考える。
収益化が見込めるかわからない段階のサービスに最も重要視するのは、維持費があまりかからないこと。
できれば月額1万円以下に抑えたいし、できるだけ無料がいい。
catnoseさんが書いてくれているZennの技術とサービス構成を参考にすると、
フロントエンドは Next.js、バックエンドはRailsを使用している。
ただ、Railsを採用したことにより、ホスティングサーバが限られるというデメリットがある模様。
バックエンドはNode.jsを使用した方がインフラの選択肢は広がる。
ちなみにZennはインフラにGCPを採用している。
こちらの方はAWSを使ったサーバレスなシステム構成を選定されている。
やはりフロントエンドはNext.jsを採用し、ホスティングサーバーはS3。
サーバーサイドレンダリングをするためにLambdaを利用している。
バックエンドのAPIサーバーはLambdaを利用。
GraphQLをメインで利用し、REST APIの場合はLambdaで実装する感じ。
これだと言語はJavascriptでも大丈夫だし、Pythonでも大丈夫。
DBはDynamoDBを利用。RDSは金食い虫だから。
Cognito使えば、認証認可も簡単に実装できる。
気になるのは維持費。あまりお高いサービスは使用していないっぽいけど、従量課金制なので人気が出てくると少し高くなるかも?
ただ、初期からサーバレスなシステムを構成することで、拡張性を担保しているのはGood。
この方もフロントはNext.jsを使っている。
フロントエンドもバックエンドも言語はTypeScript。
DBはHerokuのPostgreSQLを利用。
お金がかかっているのは、GCPのCloudRunとAWSのS3が少しだけ。
最もお金がかかると思われるDBを無料にできているのが強いなと感じました。
GraphQLとPrismaとAuth0を使って、バックエンド側の面倒な実装を大幅に削減できているのもいいです。
この方もフロントエンドはNext.jsを採用している。
SSR(サーバーサイドレンダリング)を利用するとなると、最近だとReactユーザーが多いこともあってかNext.jsが採用されるのかもしれない。
GraphQLサーバーのためにHasuraを採用し、Hasuraを使うためにPostgreSQLを採用している。
DBはNeonを採用しているけど、Herokuでもよさそう。
LabCodeで作るWebサービス(ベータ版)は以下の構成で検討中
フロントエンド
- フレームワークはNext.js
- 言語はTypeScript
(理由)Reactの実装に慣れていて実装がはやい。SSRの選択肢もとれる。
バックエンド
- Node.js
- 言語はTypeScript
(理由)jsだとホスティングサーバの選択肢が広がるから。サービスが拡大していったら別の言語へのリプレイスを検討すればよい。
DB
以下候補
- DynamoDB
- PostgreSQL
(理由)DynamoDBはRDSよりも安いから。PostgreSQLはインフラでHeroku使った場合などで無料で使えることが多いから。どちらにしても価格が安いことが理由。DynamoDBはNoSQL用のDB設計が必要になることは注意。インフラをどれにするかで決めると良さそう。おそらくPostgreSQLになると思われる。
インフラ
以下候補
- webサーバ:CloudFront - S3, apiサーバ:Heroku - PostgreSQL(Renderも検討する)
- 最も安価な構成な気がする
- masterにpushするだけでデプロイできるのは楽。FEは手運用が必要。
- Google App Engine(GAE)
- webサーバ:CloudFront - S3, apiサーバ:API Gateway - Lambda - DynamoDB
- コールドスタート問題がある
- 従量課金なので最初は安いだろうけど、ユーザーが増えたときに結構かかるかも
(理由)料金次第ではいきなりGAEを使うこともあり。少し高いのであれば、Herokuでの運用→GAEと移行するのはあり。
TODO
- Renderの調査。無料で使えるDBMSはあるか。nodejs, nextjsはデプロイ可能か。
- GAEの料金を調査。2000 円/月 なら許容範囲。
Render いいかもしれない。
DBはPostgreSQL。Freeプランだと90日以降使えなくなるみたい。
90日はFreeプランで開発し、90日経ったらTeamプランに切り替えると良さそう。
Next.jsのデプロイも簡単そう https://render.com/docs/deploy-nextjs-app
Google App Engine(GAE)の無料枠は手厚いことがわかった。
3ヶ月間無料 & Always Freeのサービスもいくつも用意されている。
ただし、DBはNoSQLのGoogle Cloud Firestoreを使わないと無料は実現しない。
Cloud SQLでPostgreSQLは高そう。
あと、フロントのWebサーバはAWSを使わずに vercel の無料プラン が良さそう。
これで、Webサーバ、APIサーバともに無料で構築できる。
結局catnoseさんの技術選定とほぼ同じところに落ち着きそう。
違う点でいうとバックエンドの言語にTypeScriptを使う点。
ただ、GAEを使うのであれば、TypeScriptである必要もなく、Pythonを選択しても良さそうではある。
すでにFastAPIを使ったAPIサーバテンプレートを用意しているので、爆速で実装できるPythonにしてみる。
最終的に以下に落ち着いた。
フロントエンド
- 言語はTypeScript
- フレームワークはNext.js
(理由)Reactの実装に慣れていて実装がはやい。SSRの選択肢もとれる。
バックエンド
- 言語はPython
- フレームワークはFastAPI
(理由)すでにテンプレートを用意している。Pythonなら爆速で実装できる。
インフラ
- WebサーバにはVercel
- APIサーバにはGoogle App Engine
- DBにはGoogle Cloud Firestore(NoSQL)
(理由)どれも無料で使える。