Node.jsでNoSQLなDBを使うときは、MongoDBなどと組み合わせるのがよくあるパターンかと思います。
ただ、MongoDBは別途インストールが必要なので、ちょっとNoSQLなDBのお勉強という程度で使うには少し面倒です。
また、OS環境へのインストールが必要ということで、Electronで作ったアプリのように、実行するファイル類一式を配布するようなケースにはMongoDBはマッチしません。
そんな時に使えそうなNeDBという組み込み型DBのライブラリがあります。
https://github.com/louischatriot/nedb
NeDBは、完全にJavaScriptだけで書かれているDBなので、npmから取得してきたスクリプト類だけでNoSQLなDBを利用することができます。
アプリのコード一式と一緒に配布するような用途にバッチリなライブラリです。
イメージ的にはNoSQL界のSQLite的な立ち位置ですかね。
ここでは、TypeScriptからNeDBを使ってみます。
ちょうど先日、TypeScript2.0がリリースされたので、TypeScritp2.0を使い、型定義ファイルもnpmから取得する方法で扱ってみたいと思います。
参考リンク
NeDBの各種APIは、MongoDBのAPIのサブセットとなっているため、MongoDBの入門資料などの知識をそのまま流用できます。
以下あたりのリンクが参考になります。
http://dotinstall.com/lessons/basic_mongodb_v3
また、NeDBの使い方の説明は↓の記事がわかりやすいです。
http://qiita.com/tinymouse/items/0731eef4aebf2779bd0b
準備
インストール
- package.jsonの生成
- フォルダを作り、
npm init
コマンドで、package.jsonを生成します。
- フォルダを作り、
- TypeScriptのインストール
npm install typescript --save-dev
とコマンドを実行し、TypeScriptコンパイラをインストールします。
- NeDBのインストール
- 続いて、
npm install --save nedb
のコマンドを実行し、nedbをインストールします。
- 続いて、
- 型定義ファイルのインストール
npm install --save-dev @types/nedb
を実行
各種プロジェクトの準備
続いて、色々と設定ファイル類の準備をしていきます。
tsconfig.json/package.jsonをそれぞれ以下のように編集します。
tsconfig.json
{"compilerOptions": {"module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": true}}
package.json
{"name": "nedb-test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": {"build": "tsc", "prestart": "npm run build", "start": "node index.js"}, "author": "", "license": "ISC", "devDependencies": {"@types/nedb": "0.0.31", "typescript": "^2.0.3"}, "dependencies": {"nedb": "^1.8.0"}}
使ってみる
準備が整ったので、NeDBを使ってサンプルコードを書いてみます。
初めの一歩
とりあえず、以下のようなコードで、オンメモリなDBを作り、そこにドキュメントを作成&読み出しをしてみます。
import Datastore = require('nedb'); var db = new Datastore(); var doc = { name: "hoge", age: 20 }; db.insert(doc, function(err) {var result = db.find({}, (err, docs) => { console.dir(docs); }); });
ファイルにデータを保存
import Datastore = require('nedb'); var db = new Datastore({ filename: 'data/database.db', autoload: true}); var doc = { name: "hoge", age: 20 }; db.insert(doc, function(err) {var result = db.find({}, (err, docs) => { console.dir(docs); }); });
検索
import Datastore = require('nedb'); var db = new Datastore({ filename: 'data/database.db', autoload: true}); var doc = [{ name: "hoge", age: 20 }, { name: "hoge1", age: 25 }, { name: "hoge2", age: 30 }, ]; db.insert(doc, function(err) {var result = db.find({age: 25}, (err, docs) => { console.dir(docs); }); });
DBファイルの中身
ファイルに保存したDBファイルの中身を見てみると、こんな風にプレーンテキストなJSONデータが格納されてました。
所感
MongoDBに慣れた方々だったら、いきなりJavaScriptでも何の問題もなく書けるかもしれませんが、
この手のNoSQL系DBの経験がない自分にとっては、TypeScriptで各種関数の説明や引数の説明が出るのはとても便利でした。
APIのドキュメント以上に、インテリセンスがライブラリの使い方を教えてくれる、という感じがします。