PocketBase という OSS SaaS を触ってみたら Go のフレームワークとしておもしろそうだった
はじめに
無料デプロイシリーズでなんかいいネタがないかなと探していたところ PocketBase という OSS SaaS の存在を知りました。
どんなことができるのだろうと遊んでみたら Go としては珍しく[1]フレームワークとしても使えそうだなっと思ったのでご紹介します。
PocketBase とは
PocketBase is an open source Go backend, consisting of:
- embedded database (SQLite) with realtime subscriptions
- built-in files and users management
- convenient Admin dashboard UI
- and simple REST-ish API
PocketBase は、オープンソースの Go バックエンドで、次のもので構成されています:
- リアルタイムのサブスクリプションが組み込まれた組み込みデータベース(SQLite)
- 組み込みのファイルとユーザー管理
- 便利な管理者ダッシュボードUI
- シンプルなREST-ish API
名前が酷似している Firebase や Supabase といったサービスと似たようなことができると思います。
解説記事を書かれている方がいらっしゃいましたのでそちらもご参考ください。
Extend with Go
個人的に注目しているのは Extend with Go を活用することで Go で拡張ができることです。
v0.22.20
では以下の拡張を行うことができます。
- Event hooks
- Routing
- Database
- Record operations
- Collection operations
- Migrations
- Jobs scheduling
- Console commands
- Sending emails
- Rendering templates
- Logging
- Testing
- Custom models
サンプルコードで示されているようにわりと簡単に独自の実装を差し込むことができます。
パスルーティングライブラリとしては labstack/echo が利用されています。あらかじめ PocketBase の認証に合わせたミドルウェアが用意されているので認証・認可まわりも実装が楽にできそうな印象でした。
ORM としては go-ozzo/ozzo-dbx をフォークして利用されています。PocketBase は FAQ に記載があるように embedded SQLite(in WAL mode) を利用し他のデータベースをサポートする予定はないとのことです。
ほかにも面白そうな機能として統合テストを実装するために pocketbase/pocketbase/tests パッケージがあります。
テーブル駆動テストにてAPIごとに実行することが可能なようです。
おわりに
PocketBase はセルフホスティングが必要だったり水平スケーリングができなかったりとするので利用には要検討な感じもありますが、 Go のフレームワークとして学ぶことがありそうなリポジトリでした。
個人的に JWT まわりの設計・ミドルウェアでの扱いは読んでて面白かったです。
おまけ
無料でデプロイする方法として Fly.io への手法が紹介されています。
Koyeb というサービスでも同じことできないかなと試してみましたが無料枠だとボリュームマウントのコマンドが権限エラーにより実行できず諦めました .....
Discussion