1. いいねの数はログインなしで見られる
  2. 無い商品の件数は404
  3. ログインしていなければ401
  4. まだの人は付けられる
  5. すでに付けている人は409
  6. 無い商品にはいいねできない
コース一覧
Node.js入門
自由拡張

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分

自由拡張

設計から自分でやってみる

ここまでは、設計図が先にありました。最後は自分で設計するところから始めます。

フリマに足したい機能を 1 つ選んでください。たとえば次のようなものです。

  • いいね — 気になる商品に印を付ける
  • コメント — 商品に質問を書き込む
  • 出品者の一覧 — その人の商品だけを見る

手順は毎回同じ

どの機能でも、進め方は変わりません。第4章から繰り返してきた形です。

プレーンテキスト

1. リソースを決める いいね → likes 2. 表を書く POST /items/:id/like いいねを付ける DELETE /items/:id/like いいねを外す GET /items/:id/likes いいねの数を返す 3. 返すコードを決める 201 / 204 / 200 / 401 / 404 / 409 4. 実装する

表を書くところまでが設計で、実装はその後です。順番を逆にすると、作りながら形が変わっていきます。

迷ったときの判断材料

設計で迷ったら、これまで出てきた基準に当てはめてください。

迷い手がかり
パスに動詞を入れたくなったリソースとメソッドで表せないか
一覧が 0 件のとき空の配列で 200
ログインが要るか誰がやっても同じ結果なら不要
すでにいいね済みだったら状態の矛盾なので 409

同じ操作を2回されたらどうするか

拡張でよく出てくる問いです。いいねを 2 回押されたら、どうしますか。

選択肢は 2 つあります。

  1. 409 を返して断る
  2. すでに付いているので、何もせず成功として返す

どちらも正解です。2 回押しても結果が変わらないようにしておくと、通信が途中で切れて再送されたときに安全です。この性質は、変更系の API を設計するときに何度も出てきます。

手を動かす

演習では、いいね機能を実装します。設計の判断が、コードのどこに現れるかを確かめてください。

要件

  1. POST /items/:id/like は requireAuth を掛け、商品が無ければ 404、すでに付けていれば 409
  2. 付けられたら likes 表に記録し、201 で {itemId, likes} を返す
  3. GET /items/:id/likes はログインなしで {itemId, likes} を返す(商品が無ければ 404)

入出力例

request("GET", "/items/1/likes") → "200 {"itemId":1,"likes":1}" request("GET", "/items/999/likes") → "404 {"error":"商品が見つかりません"}" request("POST", "/items/1/like", null) → "401 {"error":"ログインしてください"}" request("POST", "/items/1/like", null, "token-tanaka") → "201 {"itemId":1,"likes":2}" request("POST", "/items/1/like", null, "token-suzuki") → "409 {"error":"すでにいいね済みです"}" request("POST", "/items/999/like", null, "token-tanaka") → "404 {"error":"商品が見つかりません"}"

ヒント

初期コードには件数を返すルートだけがあります。404 の確認を足し、いいねを付けるルートを作ります

確かめる順番は 401(ミドルウェア) → 404 → 409 です

すでに付けているかは `WHERE item_id = ? AND user_name = ?` で探せます

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

関連レッスン

  • 完成と次のステップ

    作ったAPIの全体像を振り返り、フルスタックの流れを語れるようになります。

  • サーバーで常駐させる

    常駐の設定を書き、本番の形で動かせるようになります。

  • Reactと接続する

    モックを自作APIへ差し替え、フロントとバックをつなげられるようになります。

  • fleama API完成

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

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

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

  • 設計何をどう作るかを決める前工程
  • コメント# で1行コメント。
  • 判断YES/NO 分岐を表す菱形
  • メソッドクラスに属する関数
  • 配列サイズ固定の同型データの集まり
  • エンドポイント「この URL を叩くとこの機能が動く」入口の住所
  • APIアプリ間でデータをやり取りする窓口
main.js
学習モード
エディタを読み込んでいます

メモ

自由拡張

⌘S で保存