1. 一覧が返る
  2. 出品は201で id が採番される
  3. 名前が空なら400
  4. 購入できると売り切れになる
  5. 売り切れの商品は409
  6. 無い商品は404
コース一覧
Node.js入門
つくる:DB版fleama

Node.js入門

Node.jsの実行モデル、npm、Expressによるルーティング、REST API設計、データベース接続、トランザクションを使った購入処理、トークン認証まで、バックエンド開発の基礎を、毎レッスン実際にコードを書き、フリマアプリのAPIを自分の手で作りながら学びます。

1
Node.jsとは
01. Node.jsとは15分
02. スクリプトを実行する15分
03. npmとは15分
04. package.json15分
05. npmスクリプト15分
06. つくる:プロジェクト始動20分
07. 第1章クイズ10分
2
モジュールと非同期の復習
01. import/export15分
02. ファイルを読み書きする15分
03. async/await復習15分
04. JSONの取り回し15分
05. つくる:データ層20分
06. 第2章クイズ10分
3
はじめてのサーバー
01. サーバーとリクエスト15分
02. Expressを導入する15分
03. ルーティング15分
04. JSONを返す15分
05. 開発の回し方15分
06. つくる:サーバー始動20分
07. 第3章クイズ10分
4
REST APIのきほん
01. RESTの考え方15分
02. 一覧を返す15分
03. 1件を返す15分
04. 登録を受ける15分
05. 更新と削除15分
06. ステータスコード15分
07. つくる:商品CRUD完成20分
08. 第4章クイズ10分
5
リクエスト処理と検証
01. クエリパラメータ15分
02. 並び替えとページング15分
03. 入力検証15分
04. ミドルウェア15分
05. エラーハンドリング15分
06. つくる:検索API完成20分
07. 第5章クイズ10分
6
データベース接続
01. DBにつなぐ15分
02. 一覧・詳細をDB化15分
03. 出品をDB化15分
04. SQLインジェクション20分
05. 更新・削除をDB化15分
06. 購入トランザクション20分
07. つくる:DB版fleama20分
08. 第6章クイズ10分
7
認証のきほん
01. 認証と認可15分
02. パスワードハッシュ15分
03. ログインとトークン15分
04. 保護ルート15分
05. 本人のものだけ15分
06. つくる:認証完備20分
07. 第7章クイズ10分
8
総合制作
01. fleama API完成20分
02. Reactと接続する20分
03. サーバーで常駐させる20分
04. 自由拡張20分
05. 完成と次のステップ15分

つくる:DB版fleama

新しいことは出てきません

この回では、新しい知識は 1 つも出てきません。第6章で書いたものを 1 つにまとめて、fleama のデータ層をデータベースへ移し切ります。

移行が終わって何が変わったか

第2章のファイル版第6章のDB版
1 件追加全件を読み書きINSERT 1 回
絞り込み全件を読んで filterWHERE で必要な分だけ
id の採番自分で最大値を計算AUTOINCREMENT に任せる
途中で止まったとき壊れた状態が残るROLLBACK で戻せる

最後の行が、このコースでいちばん大きい変化です。壊れた状態が残らないことを、仕組みとして保証できるようになりました。

ルートの側は変わっていない

第2章で分けておいたおかげで、変えたのはデータの出し入れだけです。GET /items が一覧を返すことも、無ければ 404 を返すことも、第4章で決めたまま変わっていません。

外に見せる約束を変えずに、中身を入れ替えられる。 これが層を分ける目的でした。React 側から見れば、裏でデータベースに移ったことは分かりません。

ここまでに手に入れたもの

何をどのレッスンで
つないで表を作るDBにつなぐ
一覧と1件を読み分ける一覧・詳細をDB化
安全に書き込む出品をDB化
つなぐ危険を知るSQLインジェクション
変更系と changes更新・削除をDB化
全部か何もしないか購入トランザクション

手を動かす

演習では、第6章のすべてを備えた fleama API を組み立てます。購入までデータベースで動く形が完成します。

要件

  1. POST /items は name が空なら 400、通れば INSERT して読み直した商品を 201 で返す
  2. POST /items/:id/buy は 商品が無ければ 404、売り切れなら 409 を返す
  3. 購入できるときは BEGIN から COMMIT までで売切れ化と購入記録を行い、{id, sold} を 200 で返す

入出力例

request("GET", "/items") → "200 [{"id":1,"name":"レザースニーカー","price":4800,"sold":0},{"id":2,"name":"木製のスツール","price":3500,"sold":1}]" request("POST", "/items", {"name":"古着のデニムジャケット","price":6200}) → "201 {"id":3,"name":"古着のデニムジャケット","price":6200,"sold":0}" request("POST", "/items", {"name":"","price":1000}) → "400 {"error":"商品名は必須です"}" request("POST", "/items/1/buy", {"buyer":"田中"}) → "200 {"id":1,"sold":1}" request("POST", "/items/2/buy", {"buyer":"田中"}) → "409 {"error":"すでに売り切れです"}" request("POST", "/items/999/buy", {"buyer":"田中"}) → "404 {"error":"商品が見つかりません"}"

ヒント

出品は「検証 → INSERT → 読み直して 201」の順です

購入は先に商品を取り出して、404 と 409 を判定してから `BEGIN` に入ります

`BEGIN` の中で失敗したら `ROLLBACK` を呼びます。何も起きていない状態に戻ります

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

関連レッスン

  • 第6章クイズ

    データベース接続とトランザクションの理解を4択で確認します。

  • 認証と認可

    未ログインで出品APIを叩いて課題を確かめ、認証と認可を区別できるようになります。

  • fleama API完成

    第4章で作った一覧表と突き合わせ、仕様を満たし切れるようになります。

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

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

  • データベースデータを構造化して保存する仕組み
  • SQLデータベースを操作するための共通言語
  • トランザクション「全部成功 or 全部なかったことに」をまとめる単位
  • エンドポイント「この URL を叩くとこの機能が動く」入口の住所
  • APIアプリ間でデータをやり取りする窓口
main.js
学習モード
エディタを読み込んでいます

メモ

つくる:DB版fleama

⌘S で保存