PocketBase レビュー: 単一バイナリで動く Go 製リアルタイムバックエンドの実力と限界
PocketBase は 1 ファイルで配布されるオープンソースの Go バックエンドで、組み込み SQLite データベース、リアルタイムサブスクリプション、ユーザーとファイル管理、管理 UI、REST 風 API を備えています。
ひと目でわかる
- これは何?
- SQLite とリアルタイム購読、管理 UI を 1 ファイルに詰め込んだ PocketBase を、Go フレームワークとしての拡張性と運用上の注意点を中心に解説する。
- 誰に向いている?
- PocketBase は、小規模から中規模のアプリでバックエンドを素早く立ち上げたい個人開発者やチームに向いている。管理 UI とリアルタイム機能が最初から揃っており、Go でカスタムロジックを追加できる柔軟性も魅力だ。
- 商用利用できる?
- できます。MIT は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。直近 1 日以内に新しいコミットがあります。
- 何の言語で書かれている?
- 主に Go です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
単一ファイルに閉じ込めたバックエンドの全貌
PocketBase は Go で書かれたオープンソースのバックエンドで、SQLite を組み込み、リアルタイム購読、ファイル管理、ユーザー管理、管理ダッシュボード UI を 1 つの実行ファイルにまとめている。README には「embedded database (SQLite) with realtime subscriptions」とあり、REST 風 API も標準で提供される。対象は、バックエンドの構築に時間をかけたくない開発者だ。単一バイナリなので、デプロイはファイルをコピーして実行するだけ。このシンプルさは、小規模なプロトタイプや社内ツールで特に有効に働く。
SQLite とリアルタイム購読の仕組み
データベースは SQLite を採用しており、ファイルベースのため外部 DB サーバーが不要だ。リアルタイム購読は、クライアントが WebSocket で接続し、テーブルの変更イベントを受け取る仕組みと推測される。ただし、README には購読の具体的なプロトコルや実装詳細は記載されておらず、公式ドキュメントの参照が促されている。SQLite は同時書き込みに弱いという特性があるため、高頻度の書き込みが発生するアプリケーションではボトルネックになる可能性がある。この点は、ドキュメントで明示的に制約として挙げられていないが、SQLite の一般的な挙動として考慮すべきだ。
スタンドアロン実行と Go フレームワークとしての二面性
PocketBase は 2 つの使い方を想定している。1 つは、リリースページからダウンロードした実行ファイルをそのまま動かす方法で、`./pocketbase serve` を実行するだけだ。この実行ファイルには JavaScript の拡張機能が有効化されている。もう 1 つは、Go ライブラリとして組み込む方法で、`pocketbase.New()` でアプリを生成し、`OnServe().BindFunc` でルートを追加できる。README の例では `GET /hello` ルートを追加して文字列を返す。この 2 つのアプローチは、ノンプログラマーでも扱える手軽さと、開発者向けの拡張性を両立させている。
実際に動かす: 必要なコマンドと設定
Go フレームワークとして使う場合、Go 1.27 以上が必要だ。`main.go` を作成し、`go mod init myapp && go mod tidy` で依存関係を初期化する。その後 `go run main.go serve` で起動できる。本番向けには `CGO_ENABLED=0 go build` で静的リンクのバイナリを生成する。このコマンドは純 Go の SQLite ドライバを使うため、CGO を無効にしても動作する。リポジトリの `examples/base` ディレクトリで `go build` すれば、リリース版と同等の実行ファイルを作れる。クロスコンパイルも可能で、`GOOS=linux GOARCH=amd64` のように指定する。対応プラットフォームは表で示されており、linux は amd64 から riscv64 まで幅広いが、macOS は amd64 と arm64 のみ。
拡張の実例: ルート追加のコードを読む
README に載っている最小構成のコードは、PocketBase の拡張モデルをよく表している。`app.OnServe().BindFunc` でサーバー起動時のフックを登録し、`se.Router.GET` でルートを追加する。`RequestEvent` がリクエストを表し、`re.String(200, "Hello world!")` でレスポンスを返す。このパターンは、ミドルウェアやバリデーションを追加する際の基礎になる。ただし、README ではこの例以上に踏み込んだ説明はなく、実際の認証や DB 操作のフックはドキュメントを参照する必要がある。コードの見た目はシンプルだが、イベントシステムの全体像を掴むには追加の学習が要る。
テストと開発の流れ
PocketBase 自体は Go 標準の `go test ./...` でテストできる。README には「mixed bag of unit and integration tests」とあり、ユニットテストと統合テストが混在している。カスタムアプリのテストについては、公式の Testing ガイドが用意されている。開発の流れとしては、まず `go run main.go serve` で動作確認し、テストを書きながら機能を追加していく形になる。ただし、v1.0.0 未満のため、API や動作が変わる可能性がある。README には「full backward compatibility is not guaranteed」と警告があり、バージョンアップのたびにコードの修正が必要になるかもしれない。
ライセンスと貢献の現実的な制約
ライセンスは MIT で、商用利用や再配布に制約はほぼない。ただし、プロジェクトへの貢献には注意点がある。README によると、新機能の PR は事前の議論なしに送るべきではなく、メンテナがクローズすることもある。さらに、最近の LLM スパムの影響で PR は一時的に無効化されており、既存コラボレーターのみが PR を開ける状態だ。問題を修正したい場合は、フォークへのリンクを添えて issue を開くことが推奨されている。これは、外部からの貢献を検討している開発者には大きな障壁だ。ただし、ソースコードの利用や改変自体は MIT ライセンスで自由に行える。
編集部の結論
PocketBase は、小規模から中規模のアプリでバックエンドを素早く立ち上げたい個人開発者やチームに向いている。管理 UI とリアルタイム機能が最初から揃っており、Go でカスタムロジックを追加できる柔軟性も魅力だ。一方で、v1.0.0 前のため後方互換性が保証されておらず、大規模なデータ移行や複雑な権限要件がある場合は慎重に検討すべき。導入前に、ロードマップで予定されている変更と、SQLite の同時書き込み制約が自分のユースケースで問題にならないかを確認してほしい。
コミュニティノート