2012/04/13更新

[node] node.jsでsqlite3を使う方法。インストールから実装サンプルまで。苦労点も。

このエントリーをはてなブックマークに追加            

node.jsをアプリケーションサーバーのとして使う為に、 sqlite3という軽量なDBをnode.jsで扱うことに取り組みました。
sqlite3のインストール、sqlite3用のnode.jsモジュールの追加、 実装サンプルをブログに残したいと思います。苦労した点もあったので書きます。
なお、node.jsやnpmのインストールは、こちら(node.jsを始めました!とっても簡単なインストール編)を参照ください。

困っている時の写真




sqlite3のインストール

node.jsで使うsqlite3をイントールします。 (何とMacでは最初から入ってました。)
今回は、Ubuntuに導入する手順ですが、他のOSでも似たようにしてみて下さい。
$ sudo apt-get install libsqlite3-dev
ここでのポイントは、インストールするsqlite3のバージョンが3.6以上でないとだめという点です。
バージョンの高い開発版を今回はインストールしました。
このバージョンが低いと、後続のインストール処理で依存関係の解消ができず失敗してしまいます。。

動作確認は、以下のコマンドを打って、バージョンが表示されたらOK。
$ sqlite3 -version




node-sqlite3を導入する

node.jsでsqlite3を利用する為に、node-sqlite3をインストールします。
npmで行う場合には、以下のコマンドでできます。
$ npm install sqlite3
最初、上記コマンドを発行したら、dnsの問題でエラー終了しました。
Proxyがあったので、proxy設定を以下のように行うと上手くいきました。http, httpsともにプロキシ設定が必要なようです。
npm config set proxy http://プロキシサーバー:ポート番号
npm config set https-proxy http://プロキシサーバー:ポート番号
Macだと上手くいくのですが、Ubuntuだとなぜか上手くいかず。。 依存関係の問題を解消出来ないようでした。

そこでnpmは諦めて、gitからソースコードをダウンロード&インストールしました。
以下の感じです。
$ git clone http://github.com/developmentseed/node-sqlite3.git
$ cd node-sqlite3
$ ./Configure
$ make
$ make install

これでインストール完了です。
node.jsで、「require("sqlite3")」と使いたいので、ディレクトリ名を変えて、またnode_modulesディレクトリに移動します。
node_modulesの読み込みルールについては、こちらLoading from node_modules Floders(日本語)を参照ください。
$ cd ../
$ mv node-sqlite3 sqlite3
$ mv sqlite3 node_modules/

ちゃんと導入できたか、確認してみます。
$ node
> require("sqlite3")
/* ここにrequire("sqlite3")の内容が出たらOK */




node.jsでsqlite3を使うサンプル

以下のサンプルを作成してみました。
テーブルの作成、データの登録、更新、参照を行うサンプルです。
// sqlite3を使う準備
var sqlite3 = require("sqlite3").verbose();
// :memory:を指定すると揮発性のDBができる。
// DBファイルを指定する事で、永続化したDBを扱う事もができる。
var db = new sqlite3.Database(":memory:");

// serialize関数を使うと、
// それぞれの行が実行されたら、次の行が実行される。
// parallel関数を用いることで、平行実行もできる。
db.serialize(function () {

  // テーブルを作成する。
  db.run("CREATE TABLE team (info TEXT)");

  // データを登録する。
  var stmt = db.prepare("INSERT INTO team VALUES (?)");
  for (var i = 0; i < 10; i++)
    stmt.run("team " + i);
  stmt.finalize();
      
  // データを更新する。
  var stmt2 = db.prepare("UPDATE team SET info = ? WHERE info = ?");
  for (var i = 0; i < 10; i+=3)
    stmt2.run("team 10" + i, "team " + i);
  stmt2.finalize();
      
  //参照する。
  // 参照用関数は他にもあるが、今回は取得したものを1件ずつ扱うeach関数を利用する。
  // 引数(row)のプロパティに、SELECT句で指定した要素があるので、
  // たとえば「row.info」といったアクセスで値を取り出せる。
  db.each("SELECT rowid AS id, info FROM team", function (err, row) {
    console.log(row.id + " : " + row.info);
  });
});

// DBを閉じる。
db.close();

上記内容を、「dbfirst.js」というファイル名で保存して、以下のように実行すると 動きます。
$ node dbfirst.js




参考資料

node-sqlite3のGitHubのページをスゴく参考にしました。ありがとうございます(^ー^)ノ
上記サンプルで利用した関数以外にもAPI説明がありますので、もし興味があればぜひ。
https://github.com/developmentseed/node-sqlite3




最後に

node.jsでDBが使えるようになると、本格的なWebアプリケーションも組めそうです(*´∇`*)
node.jsについてもっともっと色々と使ってみよっと。
長文お読み頂きましてありがとうございました。






こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。