DenoからTextDBを扱うモジュールを作った
Denoでデータを保存したいとき、どのような方法を使っているでしょうか。
ローカルに保存するならテキストファイルなどに書き出すことができますが、オンラインに保存したい場合もあります。
既に、denodbという複数のDBに対応したORMがあります。
また、Deno Deployのチュートリアルでも、FaunaDB、DynamoDB、Firebaseを扱う方法が紹介されています。
しかし、個人的に開発の初期段階からしっかりした(という言い方も変ですが)DBを使うのはtoo-muchかな、という感じがしています。
簡単なデータ保存であれば、TextDBというサービスがミニマルで良いのではないかと思っています。
このTextDBを扱うDenoモジュールを作成したので紹介します。
TextDBとは
「APIが用意されているフリーのオンラインメモ」として使える便利なサービスです。
リポジトリはこちら。
TOPページに行くとUUIDが発行され、https://textdb.dev/data/[id]
のパスにアクセスして内容を確認できます[1]。
curl -d "hello world" -H "content-type: text/plain" https://textdb.dev/api/data/[id]
のようにPOSTリクエストを送ることでデータを追記できます。
TOPページには
A simple way to share small amounts of data
とあるので、本格的なデータストアとして使うのは無理だと思いますが、開発段階での単純なテキストデータや、自分用のメモを残す程度なら十分使えるのではないかと思います[2]。
textdb
モジュールの説明
作成したtextdb
というモジュールを作りました。
リポジトリはこちらです。
TextDB
とJsonDB
というクラスを提供しています。
インスタンスの初期化の際には、保存に使うTextDBのページIDが必要です。
使用例はモジュールおよびリポジトリのREADMEに記載しています。
TextDB
TextDBに保存されているデータをそのまま取得・更新できます。
以下のメソッドが定義されています。
get
保存されているテキストを取得します。
put
引数として渡されたテキストを保存します。
データは上書き保存となります。
clear
保存されているテキストを消去します。
JsonDB
TextDBにJSON形式でデータを保存し、KVSのように使用できます。
データはRecord<string, unknown>
形式である必要があり、ただの文字列や数値の利用は想定していません。
以下のメソッドが定義されています。
all
データを全件取得します。
save / saveMany
引数として渡されたデータに_id
(UUID v4形式)というプロパティを付加して保存します。
もし_id
がデータ内にある場合は、それを用いてアップサート処理を行います。
返り値は保存されたIDです。
find / findMany
_id
を用いて検索を行います。
返り値は見つかったデータです。
delete / deleteMany
_id
を用いて削除を行います。
返り値は削除された件数です。
where
受け取ったレコード({ gender: "m" }
など)を用いて一致検索を行います。
返り値は見つかったデータです。
clear
保存されているデータを消去します。
おわりに
TextDBおよびそれを扱うための自作モジュールtextdb
の紹介記事でした。
オンラインでデータを保存・共有したいけど本格的なDBを使うほどでもない、という場合に便利かと思います。
また、不備や改善点が見つかりましたらIssueやPull Requestを出していただけるとありがたいです。
Discussion