Open3

1ファイルでバックエンドが構築可能なオープンソース「PocketBase」を試す

kun432kun432

たまたま目にしたこれ

https://x.com/qdrant_engine/status/1856711217588674684

スレに技術スタックが書かれているのだが(表示上切れている)

https://x.com/qdrant_engine/status/1856711220671263007

✅ PocketBase (@pocketbase) as an authentication and database backend.

この「PocketBase」が気になって調べてみた。

GitHubレポジトリ

https://github.com/pocketbase/pocketbase

PocketBaseは、オープンソースのGo製バックエンドで、以下の機能が含まれています:

  • リアルタイムサブスクリプション機能を備えた組み込みデータベース(SQLite)
  • ビルトインのファイルおよびユーザー管理機能
  • 便利な管理ダッシュボードUI
  • シンプルなREST風のAPI

ドキュメントとサンプルについては、こちらをご覧ください。

PocketBaseについて書かれている日本語の記事

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

https://zenn.dev/otakakot/articles/3ab3228ef1fb04

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

https://blog.kaboc.cc/posts/20220813-01gabh0x88

なるほど。これはちょっと面白そう。

ライセンスはMITライセンス

kun432kun432

インストール

MacだとHomebrewでインストールできる。

brew info pocketbase
出力
==> pocketbase: stable 0.22.25 (bottled)
Open source backend for your next project in 1 file
https://pocketbase.io/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/p/pocketbase.rb
License: MIT
==> Dependencies
Build: go ✘
==> Analytics
install: 287 (30 days), 561 (90 days), 2,800 (365 days)
install-on-request: 287 (30 days), 561 (90 days), 2,800 (365 days)
build-error: 0 (30 days)

のだけど、バイナリ1つで動くようなので今回は公式のものを使おうと思う。

とりあえず作業ディレクトリ作成

mkdir pocketbase-test && cd pocketbase-test

GithubのRelease、もしくは、公式ドキュメントのダウンロードページからダウンロード。自分はGitHubのReleaseにした。2024/11/17時点の最新はv0.22.25。アーキテクチャに合ったものを選択すること。

wget https://github.com/pocketbase/pocketbase/releases/download/v0.22.25/pocketbase_0.22.25_darwin_arm64.zip

zipを解凍

unzip pocketbase_0.22.25_darwin_arm64.zip
出力
  inflating: CHANGELOG.md
  inflating: LICENSE.md
  inflating: pocketbase

ほんとにバイナリ1つだ。これを起動する。

./pocketbase serve
出力
2024/11/17 13:54:11 Server started at http://127.0.0.1:8090
├─ REST API: http://127.0.0.1:8090/api/
└─ Admin UI: http://127.0.0.1:8090/_/

http://127.0.0.1:8090/_/でダッシュボードにアクセスすると以下のような画面になるので、管理者アカウントを作成する。なお、パスワードは10文字以上必要だった。

ログインできた。

なお、起動したディレクトリにpb_dataというディレクトリが作成されており、ここにデータが含まれている模様。

tree pb_data/
出力
pb_data/
├── data.db
├── data.db-shm
├── data.db-wal
├── logs.db
├── logs.db-shm
├── logs.db-wal
└── types.d.ts

1 directory, 7 files

sqliteでのぞいてみる

sqlite3 pb_data/data.db

テーブル一覧

.table
出力
_admins         _externalAuths  _params
_collections    _migrations     users
kun432kun432

公式ドキュメントはここにあるのだけど、Getting Started的なものはないなー、まあバックエンド用途だから、Getting Startedを作るならフロントエンドの範疇だと思うし、しょうがないのかもしれない。

なお、クライアントSDKは

JavaScript

https://github.com/pocketbase/js-sdk

Dart

https://github.com/pocketbase/dart-sdk

になっている。ブラウザやスマホアプリなどを考えるとまあそうなるよね。

自分的には何かしらPythonで書けないかなーと思って調べてたら、非公式ではあるけどPythonクライアントを作っている方がいる。以下で見つけた。

"Using PB with Python"
https://www.reddit.com/r/pocketbase/comments/1fcse9w/using_pb_with_python/

非公式Pythonクライアント

https://github.com/vaphes/pocketbase

https://github.com/thijsmie/pocketbase

そこでこんなものも紹介されていた。

https://github.com/webstudio-is/webstudio

まあフロントエンドを容易に作れるもので試してみたい。