1. 本番の設定がそろっているとき
  2. 何も指定が無いときは既定値
  3. PORT が数値にならないときも既定値
  4. 秘密が空文字なら設定されていない扱い
コース一覧
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分

サーバーで常駐させる

手元で動くのと、公開するのは別

npm run dev で動いているサーバーは、あなたが端末を閉じた瞬間に止まります。公開するには、閉じても動き続ける形にする必要があります。

これを常駐と呼びます。サーバー構築入門で学んだ systemd の出番です。

設定を書く

プレーンテキスト

[Unit] Description=fleama API [Service] WorkingDirectory=/var/www/fleama ExecStart=/usr/bin/node app.js Restart=always Environment=PORT=3000 [Install] WantedBy=multi-user.target

Restart=always が大切です。何かの理由で落ちても、自動で起動し直してくれます。落ちない仕組みではなく、落ちても戻る仕組みを用意しておくのが実務の考え方です。

開発用の起動を使わない

本番では node --watch を使いません。ファイルを見張る必要が無いうえ、勝手に再起動されると困るからです。

第1章で start と dev を分けて登録したのは、この日のためでした。

JSON

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

環境ごとに変わるものをコードに書かない

第3章で process.env.PORT を扱いました。同じ考え方で、環境によって変わる値はすべて外から渡します。

JavaScript

const port = process.env.PORT || 3000; const allowedOrigin = process.env.ALLOWED_ORIGIN || "http://localhost:5173";

公開したら ALLOWED_ORIGIN は本番のアドレスになります。コードは同じまま、設定だけが変わる形にしておきます。

秘密の値は特に外へ出す

パスワードやトークンの元になる値を、コードに直接書いてはいけません。

JavaScript

const secret = "my-secret-key"; // 絶対に避ける

コードは共有され、履歴にも残ります。一度書いたものは、後から消しても履歴から読めます。秘密は環境変数で渡す、と覚えてください。

手を動かす

演習では、環境変数から設定を組み立てる関数を書きます。無いときの既定値と、秘密の扱いに気を配ってください。

要件

  1. port は PORT を数値に直したもの(無い・数値にならないなら 3000)
  2. allowedOrigin は ALLOWED_ORIGIN(無ければ http://localhost:5173)
  3. hasSecret は SECRET_KEY が空でなければ true。値そのものは返さない

入出力例

buildConfig({"ALLOWED_ORIGIN":"https://fleama.example.com","PORT":"8080","SECRET_KEY":"abc123"}) → {"allowedOrigin":"https://fleama.example.com","hasSecret":true,"port":8080} buildConfig({}) → {"allowedOrigin":"http://localhost:5173","hasSecret":false,"port":3000} buildConfig({"PORT":"abc","SECRET_KEY":"abc123"}) → {"allowedOrigin":"http://localhost:5173","hasSecret":true,"port":3000} buildConfig({"SECRET_KEY":""}) → {"allowedOrigin":"http://localhost:5173","hasSecret":false,"port":3000}

ヒント

`port` の求め方は、第3章の「開発の回し方」で書いたものと同じです

`allowedOrigin` は `||` で既定値に落とせます

`hasSecret` は `Boolean(...)` に通せば、空文字や未指定が `false` になります

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

関連レッスン

  • 自由拡張

    欲しいAPIを設計から実装し、自分で機能を足せるようになります。

  • 完成と次のステップ

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

  • Reactと接続する

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

  • fleama API完成

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

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

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

  • サーバークライアント(ブラウザなど)がリクエストを送り、サーバーがレスポンスを返す。
  • パスワードDBが漏洩しても元のパスワードがわからないようにするため。
  • トークンLLM が扱う最小の文字単位
  • 環境変数JWT_SECRET など秘匿値を渡す手段
  • 変数データに名前をつけて参照する仕組み
  • 関数処理に名前を付けて再利用できる単位
main.js
学習モード
エディタを読み込んでいます

メモ

サーバーで常駐させる

⌘S で保存