Node.js + Express環境構築 〜開発からXserverに公開まで〜
更新日:2025/03/10

はじめに
Node.jsとExpressを使ったWeb開発は、JavaScriptの知識だけで前後端のプログラミングができる点が魅力です。本記事ではExpress.jsフレームワークの基本概念から、開発環境のセットアップ、さらに本番環境へのデプロイまでを一貫して解説します。
Webアプリケーション開発を始めたばかりの方や、すでに開発はできるけれど本番環境への公開に不安がある方にとって、実践的なガイドとなることを目指しています。
Express環境のセットアップ
Node.jsのインストール
まずはNode.jsの公式サイトから、推奨版(LTS版)をダウンロードしてインストールします。インストール後、ターミナルで以下のコマンドを実行して正常にインストールされたことを確認しましょう。
node -v
npm -v
Express Generatorの導入
Express Generatorは、Expressアプリケーションの雛形を素早く作成するためのツールです。以下のコマンドでグローバルにインストールします。
npm install -g express-generator
プロジェクトの作成と基本構造
Express Generatorを使って新しいプロジェクトを作成します。ここではEJSをテンプレートエンジンとして使用します
express --view=ejs myapp
cd myapp
npm install
または、現在のディレクトリにファイルを生成する場合:
express --view=ejs .
npm install
このコマンドにより、以下のような構造のプロジェクトが生成されます:
myapp/
├── app.js # アプリケーションのメインファイル
├── bin/
│ └── www # 起動スクリプト
├── package.json # プロジェクト情報と依存関係
├── public/ # 静的ファイル格納フォルダ
│ ├── images/
│ ├── javascripts/
│ └── stylesheets/
│ └── style.css
├── routes/ # ルーティングロジック
│ ├── index.js
│ └── users.js
└── views/ # ビューテンプレート
├── error.ejs
└── index.ejs
Express.jsの基本的な仕組み
ExpressとWebサーバーの違い
ExpressはWebサーバーそのものではなく、Webアプリケーションフレームワークです。両者の違いを理解することが重要です:
- Webサーバー(Apache, Nginx):HTTPリクエストを受け付け、静的ファイルを配信することが主な役割。プロセス管理やセキュリティ機能も提供。
- Express:Node.js上で動作するフレームワークで、動的なコンテンツ生成、APIの構築、データベース連携などアプリケーションロジックの実装に特化しています。
実運用時は、Webサーバー(Nginx/Apache)がフロントエンドとして動作し、Expressがバックエンドのアプリケーションロジックを担当するという構成が一般的です。
ルーティングロジックの仕組み
ルーティングとは、特定のURLとHTTPメソッド(GET, POST, PUT, DELETEなど)の組み合わせに対して、どの処理を実行するかを定義する仕組みです。
// routes/index.js の例
const express = require('express');
const router = express.Router();
// GETリクエストが「/」に来た時の処理
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
// GETリクエストが「/about」に来た時の処理
router.get('/about', function(req, res, next) {
res.render('about', { title: 'About Us' });
});
module.exports = router;
Express Generatorで生成されたプロジェクトでは、ルーティングロジックはroutes
フォルダに配置され、app.js
でそれらが統合されます。
開発環境での作業フロー
npm startでの起動
開発環境では、以下のコマンドでアプリケーションを起動します:
npm start
これにより、Express Generatorで生成されたpackage.json
に定義されたスクリプトが実行されます。
"scripts": {
"start": "node ./bin/www"
}
起動すると、デフォルトでは3000番ポートでサーバーが立ち上がり、ブラウザでhttp://localhost:3000
にアクセスして確認できます。
開発時の便利なツール
開発効率を上げるために、ファイルの変更を検知して自動的にサーバーを再起動してくれるnodemon
を使うことをお勧めします。
npm install -g nodemon
nodemon ./bin/www
または、package.jsonに開発用スクリプトを追加する方法もあります:
"scripts": {
"start": "node ./bin/www",
"dev": "nodemon ./bin/www"
}
これで、npm run dev
コマンドで開発モードでの起動が可能になります。
本番環境へのデプロイ
レンタルサーバーへのSSH接続
レンタルサーバーにアプリケーションをデプロイするには、まずSSHでサーバーに接続します:
ssh username@your-server.com
Nodebrewをインストールします。
curl -L git.io/nodebrew | perl - setup
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
100 26039 100 26039 0 0 12526 0 0:00:02 0:00:02 --:--:-- 12526
Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew
========================================
Export a path to nodebrew:
export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================
パスを通す
Nodebrewへのパスを通します:
vi ~/.bash_profile
エディタが開いたら、以下の行を追加します:
vi ~/.bash_profile
エディタ上で「i」キーを押して挿入モードに入ります(画面下部に「– INSERT –」と表示されます)
Windows: 右クリック または Shift+Insert Mac: Command+V
保存して終了
- 「Esc」キーを押してコマンドモードに戻ります
:wq
と入力し、Enterキーを押します(writeして終了という意味)
保存して閉じたら、変更を反映させます:
source ~/.bash_profile
これでNodebrewのパスが正しく通りました。次のコマンドでパスが通っていることを確認できます:
echo $PATH
PATH内に「.nodebrew/current/bin」が含まれていれば成功です。
Node.jsのインストール
安定版のNode.jsをインストールします:
nodebrew install stable
Fetching: https://nodejs.org/dist/v22.14.0/node-v22.14.0-linux-x64.tar.gz
######################################################################## 100.0%
Installed successfully
nodebrew use v22.14.0
use v22.14.0
node -v
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.27' not found (required by node)
これはライブラリの互換性問題が発生しています。最新のNode.jsバージョン(v22.14.0)がXserverの環境で動作するために必要なライブラリバージョンが見つからないという問題です。
古いバージョンのNode.jsをインストール
nodebrew use v17.6.0
use v17.6.0
node -v
v17.6.0
Expressのインストール
# パッケージのインストール (Node.js v12以上の場合)
npm init -y
npm install express@4.17.1
PM2を使ったアプリケーション管理
PM2は、Node.jsアプリケーションを本番環境で実行・管理するためのプロセスマネージャーです。
# PM2のインストール
npm install -g pm2
# アプリケーションの起動
pm2 start ./bin/www --name "myapp"
# アプリケーション一覧の表示
pm2 list
# アプリケーションの再起動
pm2 restart myapp
# ログの表示
pm2 logs myapp
# サーバー再起動時の自動起動設定
pm2 startup
pm2 save
PM2の主な利点:
- アプリケーションのクラッシュ時に自動再起動
- ログの管理と確認が容易
- 複数のアプリケーションインスタンスを実行可能(ロードバランシング)
- CPU・メモリ使用率のモニタリング
Webサーバーとの連携
実運用では、NginxやApacheなどのWebサーバーをフロントエンドとして使用し、Expressアプリケーションにリクエストをプロキシすることが一般的です。
Apacheでのバーチャルホスト設定
Apacheを使用する場合は、まず必要なモジュールを有効化します:
sudo a2enmod proxy
sudo a2enmod proxy_http
次に、バーチャルホスト設定ファイルを作成します:
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
ProxyPreserveHost On
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
ErrorLog ${APACHE_LOG_DIR}/myapp-error.log
CustomLog ${APACHE_LOG_DIR}/myapp-access.log combined
</VirtualHost>
設定を有効化し、Apacheを再起動します:
sudo a2ensite myapp.conf
sudo systemctl restart apache2
環境変数の管理
本番環境では、適切な環境変数の設定が重要です:
sudo a2ensite myapp.conf
sudo systemctl restart apache2
または、PM2を使用する場合:
pm2 start ./bin/www --name "myapp" --env production
参考サイト
【2分で】XserverにNode.jsを導入する簡単な方法【レンタルサーバー】
https://babl.tech/blog/node-js-on-rental-server

-
検索
(例) debug search etc.. -
カテゴリー
-
mixhostでのWordPress利用について
更新日:2024/04/02
299 view
-
scrollHint
更新日:2024/03/13
249 view
-
XML Sitemap Generator for Google不具合のダウングレード対応、代替プラグイン
更新日:2024/06/13
235 view
-
【SnowMonkey】納品までのフローまとめ
更新日:2025/02/15
163 view
-
ワードプレスでフォントを変えたいとき、プラグインを使えば初心者でも簡単
更新日:2025/02/16
144 view
-
【Googleサーチコンソール】検索画面で表示させたくない「Googleのインデックス削除」
更新日:2024/06/07
129 view
-
【ショートコード】編集画面で任意の場所にHTMLファイルを挿入
更新日:2024/01/26
122 view
-
キーワード検索で上位表示させる方法【SEO】
更新日:2023/10/28
120 view
-
tailwindcss使い方
更新日:2024/03/13
120 view
-
Recline: GitHub Copilotで動作するClaude 3.5 Sonnet搭載の開発支援ツール
更新日:2025/01/20
110 view
-
WordPressプラグイン「All-in-One WP Migration」のトラブル
更新日:2022/03/31
84 view
-
ワードプレスセキュリティー対策まとめ【2025年】「site guard wordpress」「BackWPup バージョン5でUI変更!?」
更新日:2025/02/25
76 view
-
SSHを使用してGitHubのリポジトリをクローン、複数の接続元で公開鍵をディレクトリで区別する方法
更新日:2025/01/13
47 view
-
VSCodeで開発効率を劇的に向上させる!Roo-Clineプラグイン完全ガイド【Gemini API】
更新日:2025/02/08
41 view
-
「JSONスキーマ」と「Few-shot Learning」で実現する次世代生成AIソフトウェア開発の可能性
更新日:2025/02/12
40 view
-
WordPressの無料画像素材のおすすめダウンロードサイト!
更新日:2022/02/22
35 view
-
リファクタリング【VSCode Javasctipt Python】
更新日:2025/03/09
35 view
-
形態素解析とは?初心者でもわかるツールの使い方と実践例
更新日:2025/02/08
33 view
-
【Next.js AWS】音声文字起こし&要約、分析アプリケーション(S3)(Transcribe)(Amazon Bedrock)
更新日:2025/02/13
30 view
-
VSCodeプラグイン「 Pretter – Code formatter」「PHP Intelephense 」
更新日:2025/01/06
26 view