1ファイルでバックエンドが構築可能なオープンソース「PocketBase」を試す
たまたま目にしたこれ
スレに技術スタックが書かれているのだが(表示上切れている)
✅ PocketBase (@pocketbase) as an authentication and database backend.
この「PocketBase」が気になって調べてみた。
GitHubレポジトリ
PocketBaseは、オープンソースのGo製バックエンドで、以下の機能が含まれています:
- リアルタイムサブスクリプション機能を備えた組み込みデータベース(SQLite)
- ビルトインのファイルおよびユーザー管理機能
- 便利な管理ダッシュボードUI
- シンプルなREST風のAPI
ドキュメントとサンプルについては、こちらをご覧ください。
PocketBaseについて書かれている日本語の記事
なるほど。これはちょっと面白そう。
ライセンスはMITライセンス。
インストール
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
公式ドキュメントはここにあるのだけど、Getting Started的なものはないなー、まあバックエンド用途だから、Getting Startedを作るならフロントエンドの範疇だと思うし、しょうがないのかもしれない。
なお、クライアントSDKは
JavaScript
Dart
になっている。ブラウザやスマホアプリなどを考えるとまあそうなるよね。
自分的には何かしらPythonで書けないかなーと思って調べてたら、非公式ではあるけどPythonクライアントを作っている方がいる。以下で見つけた。
"Using PB with Python"
非公式Pythonクライアント
そこでこんなものも紹介されていた。
まあフロントエンドを容易に作れるもので試してみたい。