はじめに
技術面接にて自分が知らない単語が出てきたので調べたのでこの記事でざっくり整理してみた。
マネージドバックエンドとは
一言でいうと、バックエンドまわりの面倒くさいことを全部サービスに任せてしまう、という考え方だ。
普通にバックエンドを自前で作ろうとすると、こういう作業が発生する。
- サーバーのセットアップと管理
- データベースの設計・構築
- 認証機能の実装
- スケーリングの設定
- セキュリティパッチの適用
これを全部自分でやるのはなかなか大変で、特に個人開発やスタートアップだと「そこに時間使いたくない」となりがち。マネージドバックエンドはそのあたりをまるっと肩代わりしてくれる。
代表的なサービスとしては Firebase(Google)、Supabase、AWS Amplify などがある
BaaSとは
BaaSは Backend as a Service の略で、マネージドバックエンドとほぼ同じ意味で使われる。
クラウドサービスには似たような名前がいくつかあって、最初は混乱するけど並べてみると分かりやすい。
| 種別 | 正式名称 | 例 | 何を提供するか |
|---|---|---|---|
| IaaS | Infrastructure as a Service | AWS EC2 | サーバーなどのインフラ |
| PaaS | Platform as a Service | Heroku | アプリの実行環境 |
| SaaS | Software as a Service | Slack | ソフトウェアそのもの |
| BaaS | Backend as a Service | Firebase | バックエンド機能一式 |
「マネージドバックエンド = BaaS」と覚えておけばまず問題ない。
BaaSで何ができるのか
BaaSが提供してくれる主な機能はこのあたり。
認証
メールアドレス+パスワードはもちろん、GoogleやGitHubのOAuth認証も数行で実装できる。JWTの管理やセッション管理も自動でやってくれるので、認証まわりで詰まることがほぼなくなる。
// Supabaseの例:Googleログインがこれだけで動く
const { data, error } = await supabase.auth.signInWithOAuth({
provider: 'google'
})
データベース
リアルタイムでデータの変更を検知できるのが特徴的で、チャットアプリや通知機能を作るときに便利。FirebaseはNoSQL、SupabaseはPostgreSQLと、サービスによってDB種別が異なる。
// Firebaseのリアルタイム購読:データが変わると自動で再描画される
onSnapshot(doc(db, "users", userId), (doc) => {
setUser(doc.data())
})
ストレージ
画像や動画のアップロード・管理もSDKから簡単に操作できる。CDN配信やアクセス権限の設定も標準で用意されている。
サーバーレス関数
決済処理やメール送信など、フロントエンドからは直接呼びたくない処理はサーバーレス関数として書ける。
// Supabase Edge Function
Deno.serve(async (req) => {
const { userId } = await req.json()
// StripeやSendGridを呼ぶような処理をここに書く
return new Response(JSON.stringify({ success: true }))
})
サーバーレスとの違い
「BaaSってサーバーレスのこと?」と思いがちだけど、厳密には別物だ。
| BaaS(マネージドバックエンド) | サーバーレス | |
|---|---|---|
| 何か | サービス | インフラの仕組み |
| 提供するもの | 認証・DB・ストレージなど一式 | 関数を動かす仕組みだけ |
| 例 | Firebase, Supabase | AWS Lambda, Cloudflare Workers |
サーバーレスはあくまで「サーバーを管理せずに関数を実行できる仕組み」のことで、BaaSはその上にアプリに必要な機能をセットにして載せたもの、というイメージ。実際、BaaSの内部ではサーバーレス技術が使われていることが多いけど、使う側はそれを意識しなくていい。
BaaSはサーバーレスを含む、より広い概念と理解しておけばOK。
向いているケース・向いていないケース
正直なところ、BaaSが万能というわけではない。
BaaSが向いている場面
- 認証・CRUD・ファイル管理が中心のアプリ
- 個人開発やスタートアップで早くMVPを出したいとき
- フロントエンドエンジニアがバックエンドも一人で担当するとき
自前バックエンドの方がいい場面
- 金融・医療など複雑なビジネスロジックが必要なとき
- 既存システムとの連携が複雑なとき
- ベンダーロックインをどうしても避けたいとき
規模が大きくなってくると、BaaSの従量課金コストが自前サーバーより高くなってくるケースもある。最初はBaaSで始めて、必要になったら移行するという戦略が現実的だと思う。
まとめ
| 用語 | ざっくりいうと |
|---|---|
| マネージドバックエンド | バックエンドの管理をサービスに丸投げするアプローチ |
| BaaS | マネージドバックエンドの正式名称。ほぼ同義 |
| サーバーレス | 関数を動かすためのインフラの仕組み。BaaSより狭い概念 |