🐁

PocketBase という OSS SaaS を触ってみたら Go のフレームワークとしておもしろそうだった

2024/09/08に公開

はじめに

無料デプロイシリーズでなんかいいネタがないかなと探していたところ 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

名前が酷似している FirebaseSupabase といったサービスと似たようなことができると思います。
解説記事を書かれている方がいらっしゃいましたのでそちらもご参考ください。

https://zenn.dev/alea12/articles/59424f1c4adfeb

https://qiita.com/bear_montblanc/items/2fe0da8a8452e12d926d

Extend with Go

個人的に注目しているのは Extend with Go を活用することで Go で拡張ができることです。

v0.22.20 では以下の拡張を行うことができます。

サンプルコードで示されているようにわりと実装を差し込むことができます。

https://github.com/pocketbase/pocketbase/blob/master/examples/base/main.go

パスルーティングライブラリとしては labstack/echo が利用されています。あらかじめ PocketBase の認証に合わせたミドルウェアが用意されているので認証・認可まわりも実装が楽にできそうな印象でした。

ORM としては go-ozzo/ozzo-dbx をフォークして利用されています。PocketBase は FAQ に記載があるように embedded SQLite(in WAL mode) を利用し他のデータベースをサポートする予定はないとのことです。

ほかにも面白そうな機能として統合テストを実装するために pocketbase/pocketbase/tests パッケージがあります。
テーブル駆動テストにてAPIごとに実行することが可能なようです。

おわりに

PocketBase はセルフホスティングが必要だったり水平スケーリングができなかったりとするので利用には要検討な感じもありますが、 Go のフレームワークとして学ぶことがありそうなリポジトリでした。

個人的に JWT まわりの設計・ミドルウェアでの扱いは読んでて面白かったです。

https://github.com/pocketbase/pocketbase/blob/master/apis/middlewares.go

おまけ

無料でデプロイする方法として Fly.io への手法が紹介されています。

https://github.com/pocketbase/pocketbase/discussions/537

Koyeb というサービスでも同じことできないかなと試してみましたが無料枠だとボリュームマウントのコマンドが権限エラーにより実行できず諦めました .....

https://www.koyeb.com/docs/reference/volumes

脚注
  1. ほかにはBeegoなどがあるでしょうか ↩︎

Discussion