🚀

PocketBase が Firebase / Supabase の代替として面白いかも

2023/11/30に公開

PocketBase はオープンソースのバックエンドフレームワーク。GitHub では 27,000 Star を集めているが、日本ではまだあまり話題になっていない様子。Go + SQLite 製で、"backend in 1 file" とシングルバイナリでデータベースを含むバックエンド全体をデプロイできることを謳っている。

https://pocketbase.io/

  • Realtime Database
  • Authentication
  • File storage
  • Admin dashboard

といった機能を備えていて、 FirebaseSupabase といった BaaS に近い。大きく異なるのは自分でデプロイ環境を用意することが前提とされている点。デプロイ先としては Fly.io といった PaaS や Vultr などの VPS が推奨されている。FAQ で、4 ドル/月で運用できる VPS の格安プランでも 10,000 件以上の同時接続に対応できるとされている。

技術構成

  • バックエンドは Go 製。フロントエンド向けの SDK は JavaScript / Dart が用意されている。
  • API は REST ベース。コミュニティでは GraphQL も提案されたが、早期に REST のみで開発を進めると意思決定した模様。
  • データベースは SQLite (WAL Mode) が使われている。
  • バックエンドでビジネスロジックを追加したい場合、Go または JavaScript を使って拡張することが可能。
  • ファイルストレージはデフォルトで Amazon S3 に対応しているが、 Cloudflare R2 が使えたという報告 もある。
  • OAuth2 Provier は Apple, Google, GitHub など主要どころが抑えられていて、toC の開発で困ることはなさそう。SSO や SAML には現状対応していない。
  • メールはデフォルトで sendmail が使われる(!)が、 SMTP サーバーが設定可能で推奨されている。

メリット

  • Firebase / Supabase といった BaaS にロックインされない。
  • 低廉なコストでバックエンドを構築できる。うまく組めば、最近流行っている Vercel + PlanetScale などの構成よりもさらにコストを抑えて MVP をリリースできそう。
  • Go 製なので Portability が高く、PaaS / VPS の切り替えが現実的な作業コストで可能。
  • GitHub リポジトリの README やコメント・ドキュメントが非常に充実している。バックエンドのベンチマーク結果 もリポジトリとして公開されており、これだけでも一読の価値がある。

デメリット

  • 特性上 Vertical Scaling にしか対応していない。
  • 関連して、複数のリージョンにデプロイすることが困難。
  • BaaS にはロックインされないが、PocketBase にはロックインされる。PocketBase 自体のアップデートや PaaS / VPS の負荷監視など、運用コストが嵩む点に注意が必要。
  • フロントエンドで JavaScript を採用する場合、TypeScript サポートが弱い。有志が typed-pocketbase を公開している が、今後公式によってどの程度 TypeScript サポートが重視されるかは不透明。

感想

GraphQL 非対応、セルフホスティングと局所的に見れば流行に逆行している向きもあるが、BaaS に頼らずバックエンドを手軽にセルフホスティングしたいといったニーズはありそう。また、ニッチかもしれないが Intranet 内に小さいサービスをデプロイしたいといったケースにも向いている。

Horizontal Scaling に対応しないので、必然的に用途は国内限定のサービス開発に限られるが、小さいアプリケーションの MVP 開発には向いているのかもしれない。開発者がとても活発に Commit / Discussion に参加しているのが好印象(その分 SPOF にならないか心配でもある)。

Discussion