こんにちは、のびすけです。
先日ちょっと調べていてKVdbという簡単にストアできるサービスを知りました。
触ってみつつ、結構便利だったので紹介しつつJavaScriptのライブラリも作ったのでこちらも合わせて紹介してみます。
ちなみに、"地球上で最もシンプルなAPI" と本家サイトに書いてました。
Stop wasting time setting up NoSQL databases. Get a key-value database and web API up and running in seconds. Perfect for serverless apps, prototyping, metrics, and more. Simplest API on the planet.
"NoSQLデータベースの設定に時間を無駄にするのはもう終わりです。Key-ValueデータベースとWeb APIを数秒で構築して実行できます。サーバーレスアプリ、プロトタイピング、メトリクスなどに最適です。地球上で最もシンプルなAPIです。" とのことです。
驚き屋っぽいですが驚いてるわけではなくそう書いているという事実紹介ですね笑
使ってみましたが確かにシンプルで良さげでした。
便利だったんですけど日本語での記事がほぼないのでちょっとまとめてみました。
ハッカソンやプロトタイプ開発でシンプルにデータをストアしたい
サーバーレスな仕組みなどプロセスが終わってしまって情報の保持が出来ないプログラムや、前回の情報を覚えておいて比較したいなどちょっとした情報の保持に使えるサービスを探していて見つけました。
GitHub Issueやスプレットシートとかにちょっと保存したい。みたいなイメージですがあれらはAPIキーの発行と利用がちょっと複雑ですよね。
このKVdbだと アカウント登録はせずにちょっとしたデータを保存できます。
見つけた時はハッカソンなどで重宝しそう...! って感じでテンションが上がりました 笑
利用の前に、各種名称と階層イメージ
バケットとキーとバリューです。
あくまでもイメージですが、バケットという箱の中にキーとバリューを入れていくイメージです。
- バケット
- key: value
キーも特定のフォルダのような使い方にもできそうなので
- バケット
|-- キー
|--- 値
って感じの認識でも良いと思います。
使い方
使ってみましょう。
1. バケット作成
$ curl -d 'email=hogehoge@gmail.com' https://kvdb.io
XXXXXXXXX
XXXXXXXXXという名前のバケットができます。シンプル!
最初のバケット作成は特に登録不要で、初回のバケット作成後にメール承認の流れとなります。
なのでちゃんとメールが届く 有効なメールアドレスにしましょう。
2. メールアドレスの確認
初回バケット作成のリクエストをすると、メールアドレスに確認をします。
一回ログインすると再度メールが行く模様です。
なんか往復してる気もしますが...
これでメールの確認ができました。
これをしないとバケットに対して操作をしようとしても以下のようなエラーが返ってきます。
'email address not verified. visit https://kvdb.io/login to activate your account.'
3. キーを指定して値の保存
XXXXXXXXXという名前のバケットの中にmyNameキーとn0bisukeという値を保存します。
$ curl -d 'n0bisuke' https://kvdb.io/バケット名/myName
XXXXXXXXXという名前がバケット名だとして、curl -d 'n0bisuke' https://kvdb.io/XXXXXXXXX/myNameとなります。
これでn0bisukeという値が保存されました! バケット作成 => 保存 なので2ステップです。 シンプル!
キーも自由なので、こんなでもいけますね。
$ curl -d 'MacBook' https://kvdb.io/バケット名/myItem
4. キーを指定して値の読み取り
$ curl https://kvdb.io/バケット名/myName
これでn0bisukeが表示されます。
さっきの二個目の例でmyItemを指定してみるとMacBookが表示されます。
$ curl https://kvdb.io/バケット名/myItem
この辺りまで出来たらなんとなく利用イメージはつくかなと思います。
次の一覧など、5以降は必要があればで大丈夫かなと。
5. キーの一覧を確認する
https://kvdb.io/<バケット名>/という形でバケット名を指定してブラウザで表示すると一覧を見ることができます。
https://kvdb.io/XXXXXXXXX/ などになります。最後にスラッシュが必要でした。
CURLだとこんな感じで一覧表示ができます。
$ curl 'https://kvdb.io/バケット名/' -u 'supersecret:'
myItem
myName%
?values=true&format=jsonを付けるとJSONで取得できます。
この辺は公式ドキュメント参照 https://kvdb.io/docs/api/#list-keys
$ curl 'https://kvdb.io/バケット名/?values=true&format=json' -u 'supersecret:'
[["myItem","MacBook"],["myName","n0bisuke"]]%
6. キーを指定して値の読み取り
先ほどすでにmyNameのキーにはn0bisukeという値が入っていましたが、ここに以下のように更新を掛けても反映されません。
$ curl -d 'Sugawara' https://kvdb.io/バケット名/myName
以下のように、-PATCHをつけて更新すると情報が更新されました。
$ curl 'https://kvdb.io/バケット名/myName' -d 'Sugawara' -PATCH
$ curl 'https://kvdb.io/バケット名/?values=true&format=json' -u 'supersecret:'
[["myItem","MacBook"],["myName","Sugawara"]]%
7. JSONとして保存する
ヘッダーでapplication/jsonを指定するとJSON形式で保存されます。
$ curl -H "Content-Type: application/json" \
-d '{"name": "test", "value": 123}' \
https://kvdb.io/バケット名/mydata
JSON文字列でも良いですが、管理画面上でもJSONタイプとして認識されます。
ちなみにヘッダーを指定しないとテキストタイプとして認識されます。
$ curl -d '{"name": "n0bisuke", "location": "インターネット"}' https://kvdb.io/バケット名/myData
8. その他機能
公式ドキュメントをみると複数のデータ処理をまとめて実行するトランザクションやインクリメントなどのAPIがありました。
この辺りはドキュメント全てを見分けではないですが痒いところに手が届くと感じるときもありそう。
JavaScriptのSDK作ってみた
こんな感じで、CURLから扱うだけでもかなりシンプルです。
ただやはりJavaScriptから扱いたいのでSDKをバイブコーディングで作ってみました。(AIが)
一応公式のSDKもあるのですが、メンテされてないのとバケット作成やトランザクションなどちょくちょくメソッド実装されてないものがあって使いたい機能がなかったのでCodexに作ってもらいました。
$ npm i kvdb-client
で使えます。
バケット作成サンプル
公式にバケット作成がなかったです。
import { KVdbClient } from "kvdb-client";
const email = process.env.KVDB_EMAIL; //自分のメール
if (!email) {
throw new Error("KVDB_EMAIL is required");
}
const bucket = await KVdbClient.createBucket(email);
console.log("bucket:", bucket);
メールドレスを指定して実行するだけでバケットが作成できます。
データの出し入れサンプル
import { KVdbClient } from "kvdb-client";
const bucket = process.env.KVDB_BUCKET; //作成したバケットのID
const token = process.env.KVDB_TOKEN; //(なくてOK 任意)
if (!bucket) {
throw new Error("KVDB_BUCKET is required");
}
const kv = new KVdbClient({ bucket, token });
await kv.set("myName", "n0bisuke");
const name = await kv.get("myName");
console.log("myName:", name);
await kv.set("myData", { name: "test", value: 123 }, { json: true });
const data = await kv.get("myData", { parseJson: true });
console.log("myData:", data);
const keys = await kv.list();
console.log("keys:", keys);
この辺は公式にもあるのでお好きな方を。。。
データ操作のトランザクションサンプル
公式になかったトランザクションです。まとめて処理したいときはあるのでこれがあるとありがたい。
import { KVdbClient } from "kvdb-client";
if (!bucket) {
throw new Error("KVDB_BUCKET is required");
}
const kv = new KVdbClient({ bucket, token });
await kv.transaction([
{ set: "users:email:new@example.com", value: "user 1" },
{ delete: "users:email:old@example.com" }
]);
console.log("transaction done");
所感、終わりに
結構便利そうだと感じています。
無料で手軽なのがちょうど良い
スプレッドシートのAPIで情報を保持しようかと思ったのですがちょっとしたことをやるのにGoogle系APIは認証がちょっとヘビーすぎるよなーといったケースで役立ちそうです。
ステートの保持がない定期実行系などにも良さそう
定期的に実行してその結果を次の実行まで保持しておきたい。サーバーレスで必要な時にだけ起動するプロセスなどの一時保存先とかには相性が良さそうな気もしました。
こちらの定期実行Discrod Botを作った時に利用しましたが良い感じでした。
セキュリティ注意
簡単に見ることができちゃうのでセキュリティはほぼないとも言えます。重要な情報などは入れずに適切な情報だけ扱うようにしましょう。
データのプライバシーポリシーなども僕はちゃんと読んでないのでストアされたデータがどこかで二次利用されたりのリスクを感じる人はポリシーを読みつつ注意しましょう。
総じて ハッカソンなどで重宝するかも
用途限定ではありますが、ちょうど良さがあってプロトタイピング文脈だと色々な実装の隙間に使えそうな気がしました。
SDKはバイブコーディングなので不具合あるかもしれないですがその場合はコメントなど下さいませ。






