はじめに
この記事はなに?
自社でのアプリケーション開発において基盤となるインフラや技術の選定を進めている中で、「ホスティング環境ってどんなものがあって、どれを選んだらいいんだろう?」と困ってしまったので、ChatGPT にいろいろ聞きながら検討してみました。
想定読者は?
- これから web サービス作ろうと考えていて、どこでホスティングしたらいいんだろ?どんな特徴があるんだろ?と悩んでいる方
- GCP や AWS などのホスティングサービスについて概要を知りたい方
- 私のようにインフラや技術選定を任されているが、どうしていいかわからず困っている方
- 開発現場における ChatGPT の活用方法に興味がある方
なにがしたい?
Amplify(AWS)、Firebase(GCP)、Vercel といったホスティングサービスの特徴、コスト感、得意不得意などを ChatGPT に聞きながら比較検討し、選定をおこないたい。
せっかちな人向けに要約
- アプリケーションのホスティング環境として、Amplify(AWS)と Firebase(GCP)と Vercel を比較してみたよ
- Amplify と Firebase は結構似た感じだったよ
- 無料枠とか諸々の要素を考慮して、今回は Firebase を採用してみることにしたよ
前提事項
今回はホスティングサービスの比較がメインとなります。
ホスティングするアプリケーションで使用する技術は下記の内容にする想定です。
項目 | 使用技術 | メモ |
---|---|---|
フロントエンド | Next.js(TypeScript) | - |
バックエンド | Next.js(TypeScript) | tRPC を用いて、フロントと同リポジトリでバックエンドのコードを管理 |
DB | MySQL | AWS なら RDS、GCP なら CloudSQL? |
認証 | 外部サービス | AWS なら Cognito、GCP なら Firebase Authentication? |
モバイル | React Native(TypeScript) | tRPC クライアントを用いて web と同じバックエンド API に対して問合せ? |
各サービスの特徴
今回は大きく、Firebase/Amplify/Vercel の 3 パターンでホスティングサービスを比較します。
まずは各サービスのざっくり特徴を調査。(ChatGPT さんに質問)
Firebase
Google が提供するアプリケーション開発のためのプラットフォーム。
ホスティング、データベース、認証、クラウド機能など多くの機能を提供している。
特徴
- リアルタイムデータベース
- リアルタイムでのデータ同期、オフライン状態でもデータ操作が可能(これはモバイルの話かも)
- 認証
- メール、パスワード、Google 認証、Facebook 認証などの認証を提供
- 電話番号などによる MFA(多要素認証)も可能
- ホスティング
- 高速かつセキュアなホスティングサービス
- クラウド
- バックエンドコードをクラウドで実行し、サーバーレス環境を実現
- クラッシュレポート
- アプリのクラッシュ情報をリアルタイムで収集
- アナリティクス
- ユーザーの行動追跡やアプリ使用状況の可視化
採用するメリット
- 迅速な開発サイクル
- インフラ管理の手間を省き、開発に集中できる
- スケーラビリティ
- ユーザー数の変化にオートスケールで対応できる
- サービス統合
- ホスティング、認証、バックエンド、分析などを包括的に管理できる
- セキュリティ
- セキュリティルールによって細かく権限管理が可能(モバイルの話かも)
採用するデメリット
- コスト管理
- ちゃんと管理しないとコスト急増するかも
- ロックイン
- 依存しすぎると他プラットフォームへの移行が困難になるケースもある
- インフラ制限
- サーバーレスで Google 側に管理されているため、細かい制御や特殊な性能要件への対応は不向き?
- バックエンドの柔軟性
- 従来のサーバーアーキテクチャに比べて柔軟性が低くなる場合がある
Amplify
AWS が提供するフルマネージドの開発プラットフォーム。
フロントエンド、バックエンドの両方を簡単に管理できるサービス。
特徴
- フルスタック開発
- フロントエンド、バックエンドを統合したフルスタック開発が可能
- ホスティング
- ビルド、デプロイの自動化、カスタムドメインの設定などを簡単におこなえる
- バックエンド管理
- GraphQL や REST などの API、データベース、認証、ストレージなどのリソースを簡単に追加できる
- 認証
- Cognito を使った高度な認証システムを簡単に統合できる、ソーシャルログインや MFA にも対応
- リアルタイム更新
- インタラクティブなアプリケーションを構築しやすい
- 拡張性
- AWS の他サービスと統合しやすく、スケールアウト可能
採用するメリット
- 迅速なプロトタイピング
- 既存のフロントエンドフレームワークなどと簡単に統合でき、短期間でプロトタイプを作成できる
- デプロイとホスティング
- CI/CD パイプラインをサポート、自動ビルド、テスト、ステージングや本番環境へのデプロイができる
- AWS エコシステムの活用
- Lambda や DynamoDB、S3 などのサービスと簡単に統合でき、協力なバックエンドを構築できる
- スケーラビリティ
- AWS のグローバルインフラを活用しているため、グローバルに分散されたユーザーへの高速なコンテンツ配信が可能
採用するデメリット
- 学習コスト
- AWS の他サービスも含めた学習コストが高くなりがち
- 費用
- 使用量増加に応じてコストが急増するおそれがある
- ロックイン
- 他のクラウドプロバイダーに移行する際、手間が発生するかも
- 制約されたバックエンド
- サーバーレスが中心となるため、サーバーの特殊なカスタム構成などに不向き
Vercel
フロントエンドのデプロイメントとホスティングに特化したプラットフォーム。
Next.js 開発元のサービスなので、Next.js との親和性がバツグン。
特徴
- 最適化されたフロントエンドホスティング
- フロントのホスティングに特化しており、迅速なデプロイをサポート
- Next.js との統合
- Next.js プロジェクトに最適化された環境を提供する(SSG、ISR など)
- エッジネットワーク
- エッジキャッシングと CDN によって高速なコンテンツ配信をおこなう
- シンプルなデプロイプロセス
- Github リポジトリの連携で、push するだけで自動デプロイの仕組みを作ってくれる
- プレビューデプロイ
- プルリクエストごとにプレビュー URL が自動生成され、ステージング環境で変更内容を確認できる
採用するメリット
- 簡単な設定とデプロイ
- 数クリックでプロジェクトをデプロイできる
- 高パフォーマンス
- エッジネットワークなどの効果で、高速なレスポンスを実現 → ユーザー体験の向上
- フルスタック対応
- サーバーレスファンクションや API を簡単に追加可能(実態は AWS Lambda とのこと)
- プレビューデプロイ
- PR に対するステージング環境のデプロイ
- 無料プラン
- 個人や小規模プロジェクトに最適(商用利用はできないっぽい)
採用するデメリット
- バックエンド制約
- AWS や GCP と同じくサーバーレスであることによる制約があるよーって話
- ロックイン
- いい加減割愛する
- コスト増加
- アクセスが増えて使用リソースが増加すれば、コスト高くなるかもよーっていう話
- AWS や GCP に比べて、大規模になってきたときのコストが高いっぽい?
- 柔軟性の欠如
- AWS や GCP と比べてシンプルだけど、そのぶん柔軟性が低い
特徴を調べた時点での印象
- どのサービスも似たようなメリットデメリットがある
- これだけだと 1 つに決めるには少し不足
- Next.js なら絶対に Vercel!っていう感じでもないのかも(ISR が使える使えないはたしかに大きな違いではあるが)
- Vercel はシンプルなフロントや静的サイトのホスティングのほうが向いてるかもしれない
比較パターン
パターン 1:Firebase + CloudSQL
Firebase が提供する Hosting,Authentication,Functions 等の機能をフル活用してほぼ全てを Firebase で管理する構成。
DB は RDBMS を使用したかったので、Firestore(NoSQL 系 DB)は使わないことにした。すべて GCP のサービスで統一。
項目 | サービス |
---|---|
ホスティング(フロント) | Firebase Hosting |
ホスティング(バック) | Firebase Functions(Cloud Functions) |
ストレージ | Cloud Storage |
DB | Cloud SQL |
認証 | Firebase Authentication |
パターン 2:Amplify + RDS
自分の認識としては、AWS Amplify と GCP の Firebase は類似するサービス(ホスティング及びアプリケーション構築に必要なサービスを包括管理するためのツール)という位置づけであり、パターン 1 で Firebase が担っている部分をそっくり置き換えた構成。
MySQL を AWS のサービスで利用するなら RDS なので、このパターンでは RDS を使う。すべて AWS のサービスで統一。
項目 | サービス |
---|---|
ホスティング(フロント) | Amplify Hosting |
ホスティング(バック) | Amplify Functions(API Gateway + Lambda) |
ストレージ | S3 |
DB | RDS |
認証 | Amazon Cognito |
パターン 3:Vercel + CloudSQL
ホスティング関連を Vercel に任せるパターン。
この場合、認証は Firebase Authentication、DB は CloudSQL を使うことにする。Vercel + GCP の構成。
項目 | サービス |
---|---|
ホスティング(フロント) | Vercel |
ホスティング(バック) | Vercel |
ストレージ | Vercel |
DB | Cloud SQL(GCP) |
認証 | Firebase Authentication(GCP) |
検討の詳細
具体的にどんなことを考えて、どんな流れで検討したのかを記載します。
コスト比較のための前提
クラウドを前提として比較しているので、基本的にはホスティングコストのみを考えます。
また、アプリケーションがグロースしていくことを見越して、小規模、中規模、大規模の各フェーズにおける前提条件を下記のとおり定めたうえでパターン別にコストを試算します。
項目 | 小規模 | 中規模 | 大規模 |
---|---|---|---|
月間ユーザー | 1,000 人 | 10,000 人 | 100,000 人 |
フロントエンド | ストレージ 5GB データ転送 10GB |
ストレージ 50GB データ転送 100GB |
ストレージ 500GB データ転送 1TB |
バックエンド | 10 万回呼び出し コンピューティング 50GB 秒 データ送信 1GB |
100 万回呼び出し コンピューティング 500GB 秒 データ送信 10GB |
1000 万回呼び出し コンピューティング 5,000GB 秒 データ送信 100GB |
ファイルストレージ | ストレージ 0.5GB データ転送 5GB |
ストレージ 5GB データ転送 50GB |
ストレージ 50GB データ転送 500GB |
DB | ストレージ 10GB バックアップ 10GB データ転送 5GB |
ストレージ 50GB バックアップ 50GB データ転送 50GB |
ストレージ 200GB バックアップ 200GB データ転送 500GB |
その他 | 開発メンバー 1 名 | 開発メンバー 5 名 | 開発メンバー 20 名 |
ChatGPT の活用
とっかかりとして、雑に条件を伝えた状態で上記 3 パターンそれぞれでコスト試算をさせてみました。
...が、あまりにも各パターンに対する回答の内容がバラバラ(比較できる内容じゃない)なので、上記のようにアプリケーションの各フェーズにおけるリソースの想定利用ボリューム(この項目も ChatGPT に別で質問して出してもらった)や、今回 Next.js を利用することや RDB を使いたい旨などを伝えて再度計算してもらうことに。
結果について 1GB あたりのコスト(単価)などを確認したところ、全然違う情報をもとに計算していたことがわかったので、改めて情報ソースも提示させながら計算式も含めて回答するように指示。
少数第 3 位とかのレベルで若干の誤差はあるものの、最初に比べてだいぶマシな(少し信頼できる)回答を得られたので、その情報をもとに計算結果が合っているか確認。
DB に関しては、GCP or AWS でそれぞれボリューム感に応じてインスタンスのサイズが定められており、それによって料金も異なるので、小規模の場合はこのインスタンス、中規模ならこっち、という感じで実際に選択できるインスタンスタイプを指定した。
あとはコスト試算の結果を整理しつつ、各サービスの特徴やロックインの度合い(依存しすぎてないか)のバランスを考えつつ、このサービスにしようと決断しました。
情報を精査する過程で、GPT だけでなく Claude や Gemini でも同じ質問を投げたりしながら、「だいたい似たようなこと言ってるな」などの判断に使いました。
月間コスト試算の比較結果
パターン | 主な構成要素 | 無料枠 | 小規模 | 中規模 | 大規模 |
---|---|---|---|---|---|
1:Firebase + CloudSQL | Firebase Hosting Firebase Functions Firebase Storage Firebase Authentications Cloud SQL |
フロントエンド:ストレージ 10GB、データ転送 360MB/日 バックエンド:200 万回呼び出し、コンピューティング 40 万 GB 秒、データ送信 5GB ストレージ:ストレージ 10GB、データ転送 1GB |
$16.15 | $77.28 | $424.95 |
2:Amplify + RDS | Amplify Hosting Amplify Functions S3 Amazon Cognito RDS |
フロントエンド:ストレージ 5GB、データ転送 15GB バックエンド:100 万回呼び出し、コンピューティング 40 万 GB 秒、データ送信 1GB ストレージ:ストレージ 5GB、20000GET リクエスト、2000PUT リクエスト、データ転送 15GB |
$17.21 | $62.16 | $400.25 |
3:Vercel + CloudSQL | Vercel Frontend Hosting Vercel Functions Vercel Storage Firebase Authentication Cloud SQL |
フロントエンド:ストレージ 1GB、データ転送 100GB バックエンド:100 万回呼び出し、コンピューティング 1000GB 時 ※Hobby プランは商用利用不可! |
$34.66 | $159.55 | $881.13 |
Vercel の Pro プラン以上は、開発メンバー 1 名あたりの月額料金も加算されるため、コスト高になるようです。
また、Enterprise プランは要問合せ(web サイトの情報から算出できない)となっており、ChatGPT が仮で想定した料金を含んでいます。
ざっと見た感じは、Firebase と Amplify は大きな差がなく、若干 Firebase のほうが無料枠が広い印象を受けました。
加えて、Cognito 等の AWS リソースをしっかり使いこなすためには、学習コストがかかる的な情報も目にしました。(開発がスムーズに進められることはとても大事!)
結論
今回の検討結果としては、パターン 2:Firebase + CloudSQLの構成を採用しようと思います。
理由としては、下記になります。
- フロントエンド、バックエンド、ストレージ、認証などを Firebase で一括管理できる
- 無料枠が充実しているので初期のアクセスが少ないフェーズでだいぶありがたい
- AWS で構成するよりも学習コストや初期構築に要する作業量が少ない(と思われる)
正直、コスト面で AWS と比較して圧倒的!とまで言えるような差は出ませんでしたが、初期の無料枠が手厚いこと、AWS よりも構成管理が容易であること(これは勝手に期待してるだけ)などをふまえての判断です。
もちろんアプリケーションを構築していく中で、「んん?なんか思ってた感じと違うな...」という部分が出てくれば、変更も視野に入れて検討していきます。
おわりに
ChatGPT にヘルプしてもらいながら、ホスティングサービスの比較をおこないました。
細かい要素が漏れている可能性もありますが、おおよその方向性は見えてきたかな、という印象です。
GPT 先生に聞きながら進めることで、「どんな要素を検討しなければいけないか」や、「どういうメリットデメリットがあって、どういう観点で選定を進めるべきか」が分からない状態からであっても、検討を進めることができました。
途中、コスト試算を依頼した際に、明らかに計算がおかしい(どこにも記載のない単価を使ってる、単純に計算結果がおかしい、など)部分もあり、自分で再計算したり、情報ソースを追いかけたりする場面がありました。
やってみての印象としては、「生成 AI も使いどころによって向き不向きがある」という感じでしょうか。今後も注意しながら利用していこうと思います。
比較検討の過程も残したので、同じような検討をしようとしている方にとって少しでも参考になる部分があれば幸いです。
また、気になった点などあればどんどんコメントをお願いします!