1. PORT が指定されているとき
  2. PORT が無いとき
  3. PORT が空文字のとき
  4. 数値にならない文字列のとき
  5. 既定値が違っても動く
コース一覧
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分

開発の回し方

直すたびに止めて起動し直す

サーバーは起動したあと待ち続けます。ここに落とし穴があります。コードを直しても、動いているサーバーは古いままです。

直したのに応答が変わらない、と悩む時間のほとんどはこれです。起動し直すまで、新しいコードは反映されません。

--watch で自動的に入れ替える

Node.js には、ファイルの変更を見張って自動で起動し直す仕組みがあります。

プレーンテキスト

node --watch app.js

これで保存するたびにサーバーが入れ替わります。第1章で npm run dev に登録したのが、まさにこの形でした。

JSON

{ "scripts": { "start": "node app.js", "dev": "node --watch app.js" } }

開発中は npm run dev、本番では npm start を使います。本番で勝手に再起動されると困るので、分けてあります。

ポートが空かないことがある

止めそこねたサーバーが残っていると、次の起動でこうなります。

プレーンテキスト

Error: listen EADDRINUSE: address already in use :::3000

そのポートは誰かが使っている、という意味です。犯人はたいてい自分が前に起動したサーバーです。前のものを止めるか、別のポート番号を使えば解決します。

ポート番号を決め打ちにしない

本番のサーバーでは、どのポートを使うかを環境が指定してくることがあります。

JavaScript

const port = process.env.PORT || 3000; app.listen(port);

process.env は、第1章で見た process の中にある環境変数です。指定があればそれを使い、無ければ 3000 を使う、という書き方になります。環境ごとに変わる値をコードに埋め込まないのは、第8章で本番へ持っていくときに効いてきます。

手を動かす

演習では、ポート番号を決める関数を書きます。環境変数を優先し、無ければ既定値に落とす形にしてください。

要件

  1. env.PORT が数値として読めるならその数値を返す
  2. PORT が無い・空文字・数値にならない文字列のときは既定値を返す
  3. 返すのは文字列ではなく数値にする

入出力例

resolvePort({"PORT":"8080"}, 3000) → 8080 resolvePort({}, 3000) → 3000 resolvePort({"PORT":""}, 3000) → 3000 resolvePort({"PORT":"abc"}, 3000) → 3000 resolvePort({}, 4000) → 4000

ヒント

文字列を数値にするには `Number(...)` を使います

`Number("abc")` は `NaN` になります。`Number.isNaN(...)` で見分けられます

空文字のときも既定値に落とすので、値があるかどうかも一緒に確かめます

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

関連レッスン

  • つくる:サーバー始動

    健康確認と商品一覧のパスを備え、起動から応答までを自力で組めるようになります。

  • 第3章クイズ

    Expressとルーティングの理解を4択で確認します。

  • RESTの考え方

    fleamaのAPI一覧表を設計し、リソースとメソッドで設計できるようになります。

  • クエリパラメータ

    キーワードとカテゴリで絞る検索APIを書き、検索条件を受け取れるようになります。

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

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

  • サーバークライアント(ブラウザなど)がリクエストを送り、サーバーがレスポンスを返す。
  • Node.jsJavaScript をサーバ側で動かすランタイム
  • ポート番号1台のサーバーで複数のサービスを区別するための番号。
  • 環境変数JWT_SECRET など秘匿値を渡す手段
  • 変数データに名前をつけて参照する仕組み
  • 関数処理に名前を付けて再利用できる単位
main.js
学習モード
エディタを読み込んでいます

メモ

開発の回し方

⌘S で保存