ham-capのブログ

プログラミング学習の記録

【Node.js】Node.jsのコード内からSQLite3を使ってみる

フィヨルドブートキャンプでNode.jsを使ってCLIを作成する課題があり、データの保存先をSQLiteにしたくてnode-sqlite3というnpmを使ってみたので、導入方法をメモしておきます。(SQLite本体がマシンの中に入っていることと、Node.jsがインストールされていることが前提になります。)

インストール

$ npm install sqlite3 --save-dev

ローカルインストールなので--save-devオプションをつけました。

モジュールの読み込み

import * as sqlite3 from "sqlite3"

エラー。 どうして…。

TypeError: sqlite3.Database is not a constructor

上記のエラーを調べてみると、同じ状況のissueを見つけました。

TypeError: sqlite3.Database is not a constructor with ES6 imports

ここの回答によるとどうやらimportの書き方を微妙に間違えているようで、以下のように書き直すことで解決しました。

import sqlite3 from "sqlite3";

任意のクエリを発行

あとはデータベースとテーブルを作成すれば、Node.jsのコード内で任意のクエリを発行してDBの操作ができるようになります。

const db = new sqlite3.Database('DB名');
db.serialize(() => {
  db.run('CREATE TABLE if not exists テーブル名(カラム名)');
  db.run('INSERT INTO テーブル名 (カラム名) values(?)', ['hoge']);
});

注意点

sqlite3が行う処理は基本的に非同期処理となります。 そのため、上記のようにテーブルを作成→レコードの保存という順序を守って同期的に処理を実行したい場合はDatabase#serializeメソッドで一連の処理を囲んであげる必要があります。

まとめ

以上のように、かなり手軽に導入できてすぐにSQLiteを操作することができるようになります。 特にMacは最初からSQLiteが入っているのでnpmのインストールだけで必要な作業はほぼ終わってしまうため非常に便利です。

参考

node-sqlite3

SQLite入門

node.jsでsqlite3を利用する