コース一覧
    Node.jsバックエンド実践
    DBにつなぐ

    Node.jsバックエンド実践

    入力検証、ミドルウェア、エラー処理、データベース接続を学び、実用的なバックエンドAPIを安全に組み立てられるようにします。

    1
    リクエスト処理と検証
    01. クエリパラメータ15分
    02. 並び替えとページング15分
    03. 入力検証15分
    04. ミドルウェア15分
    05. エラーハンドリング15分
    06. つくる:検索API完成20分
    07. 第5章クイズ10分
    2
    データベース接続
    01. DBにつなぐ15分
    02. 一覧・詳細をDB化15分
    03. 出品をDB化15分
    04. SQLインジェクション20分
    05. 更新・削除をDB化15分
    06. 購入トランザクション20分
    07. つくる:DB版fleama20分
    08. 第6章クイズ10分

    DBにつなぐ

    ファイルではもう足りない

    第2章で作ったデータ層は、JSON ファイルに全件を書き戻す形でした。商品が数十件ならこれで動きます。

    ですが問題が出てきます。

    • 1 件足すだけでも全件を読み書きする
    • 「価格が 3000 円以上」を探すには全件を自分で調べる
    • 2 人が同時に出品すると、片方の書き込みが消える

    データベースは、この 3 つをまとめて解決するために作られたものです。

    このコースで使うもの

    Node.js 22 には、SQLite というデータベースが最初から入っています。npm で何かを入れる必要はありません。

    JavaScript

    const { DatabaseSync } = require("node:sqlite");
    const db = new DatabaseSync(":memory:");

    :memory: は「メモリの中に作る」という指定です。プログラムが終われば消えます。ファイル名を渡せば、そのファイルに残ります。

    実務では PostgreSQL や MySQL を使うことが多いのですが、SQL の書き方はほとんど同じです。ここで身につけたことはそのまま使えます。

    表を用意する

    データベースには、まず入れ物の形を教えます。

    JavaScript

    db.exec(`
      CREATE TABLE items (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT,
        price INTEGER,
        sold INTEGER DEFAULT 0
      )
    `);

    AUTOINCREMENT は、第4章で自分で書いた「最大の id + 1」を、データベースが代わりにやってくれる指定です。DEFAULT 0 は、指定しなければ 0 が入るという意味です。

    3つの呼び出し方

    SQL を実行する方法は、返ってくるものによって分かれます。

    書き方返るもの使う場面
    db.exec(sql)何も返らない表を作る、まとめて流す
    db.prepare(sql).get(...)1 行1 件だけ取る
    db.prepare(sql).all(...)行の配列一覧を取る
    db.prepare(sql).run(...)実行結果書き込む

    get は見つからなければ undefined、all は見つからなければ空の配列を返します。第4章で「1 件は 404、一覧は空配列」と決めたことに、そのまま対応します。

    手を動かす

    演習では、データベースにつないで表を作り、1 件取り出すところまでを書きます。まずは往復できることを確かめてください。

    要件

    1. node:sqlite の DatabaseSync でメモリ上のデータベースを作る
    2. items 表を id INTEGER PRIMARY KEY name TEXT price INTEGER の形で作る
    3. 受け取った商品を入れ、指定された id の商品を {id, name, price} の形で返す(無ければ null)

    ヒント

    表を作るのは `db.exec("CREATE TABLE ...")` です

    同じ INSERT を何度も使うので、`db.prepare(...)` を先に 1 回だけ作って `run` を繰り返します

    1 件取り出すのは `.get(id)` です。見つからないと `undefined` が返るので、そこで `null` を返します

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/10

    関連レッスン

    • 一覧・詳細をDB化

      商品一覧をDB読みに置き換え、ファイルからDBへ移行できるようになります。

    • 出品をDB化

      出品APIをDB書き込みにし、安全に書き込めるようになります。

    • SQLインジェクション

      文字列連結の危険を再現してから直し、プレースホルダが必要な理由を説明できるようになります。

    • 更新・削除をDB化

      編集と取下げをDB化し、変更系を移行できるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • applicationJSON 本文を送るときの Content-Type
    • データベースデータを構造化して保存する仕組み
    • Node.jsJavaScript をサーバ側で動かすランタイム
    • メモリプログラムとデータを一時保持する高速領域
    • PostgreSQL機能が豊富なオープンソースのRDBMS
    • MySQL広く使われるオープンソースのRDBMS
    • SQLデータベースを操作するための共通言語
    • 配列サイズ固定の同型データの集まり
    main.js
    エディタを読み込んでいます

    メモ

    DBにつなぐ

    ⌘S で保存