Express.jsの開発を始めるまでのローカル準備テンプレ
October 30, 2020
完全な自分用備忘録。
前提:Node.js はインストール済みとする。
まず、Express のアプリ開発用スペースとして、適当なディレクトリを作る。ここでは、express_workspace とする。
1.ジェネレータでスケルトンを作成 #
Express.js 公式の参考ページ:https://expressjs.com/ja/starter/generator.html
ジェネレータを利用してスケルトンを作成するために、express-generator というパッケージ をインストールしておく。express_workspace 上で、以下を実行。
npm install express-generator
(npm のバージョンが 5.0 以降だと、npm install はデフォルトでモジュールを package.json の dependencies(依存関係)リストに追加する。それ以前のバージョンの npm だと、依存関係リストに追加するためには -save オプションを明示しなければいけない。npm のバージョンが古い場合は、-save オプションをつけて「npm install express -save」と実行する。)
上記実行後、カレントディレクトリに node_modules と package-lock.json が作られている。
(なお、公式サイトの手順に従うと、-g のオプションをつけてグローバル環境にインストールしているが、ローカルで済むものは極力ローカルへのインストールにしておきたいため、ここではグローバルのオプションはつけないで実行。)
(ジェネレータの機能は、Express 3系までは標準搭載されていたが、4系では別パッケージとして分離されたため、このように別途インストールが必要になった。)
インストールできたことを確認する。
./node_modules/.bin/express -h
ヘルプ一覧が表示されれば、インストールされているということ。
(公式サイトの手順に従い、express-generator をグローバルでインストールした場合は自動的にパスが通るため、express までのパスを記述しなくても「express -h」だけで実行可能。)
インストールした express-generator を使って、アプリケーション・スケルトンを作成する。
ここではテンプレートエンジンには EJS、CSS プリプロセッサには LESS を指定。これは各自の好みに応じて。
(オプションを付けないと、Node.js のデフォルトで、テンプレートエンジンは Pug(旧 Jade)、CSS のプリプロセッサは無し(素の CSS)になる。)
./node_modules/.bin/express --view=ejs --css=less myapp
カレントディレクトリに myapp が作成される。myapp に移動後、npm install を実行し、依存するモジュールをインストールする。
cd myapp
npm install
(EJS テンプレートエンジンを使うのに必要なパッケージである「ejs」や、LESS のコンパイラパッケージである「less-middleware」はこのとき自動的にインストールされるので、個別インストールは不要。)
npm install 実行後、最終的に myapp の構成は以下のようになっている。
myapp
├── app.js
├── bin
│ └── www
├── node_modules
│ └── (many modules)
├── package-lock.json
├── package.json
├── public
│ ├── images
│ ├── javascripts
│ └── stylesheets
│ └── style.less
├── routes
│ ├── index.js
│ └── users.js
└── views
├── error.ejs
└── index.ejs
2.サーバを立ち上げて確認する #
以下を実行。
npm run start
http://localhost:3000
にアクセスすると、Hello World のページが表示される。サーバを停止するには「control + C」を押す。
(npm run start を実行すると、package.js の中の scripts 部分にある start の内容が実行される。以下の部分。)
"scripts": {
"start": "node ./bin/www"
}
(つまり npm run start は、「node ./bin/www」とコマンドしているのと同じこと。そのまま「node ./bin/www」と入力してサーバを立ち上げることもできる。)
(start コマンドとして定義している場合は、run を省略して、npm start で実行することもできる。逆に、start ではない名称でコマンドを登録した場合は、run を省略することはできない。)
3.共通レイアウトを使用できるようにする #
テンプレート部分に共通レイアウトを適用できるよう、express-ejs-layouts を使用する。
参考:https://www.npmjs.com/package/express-ejs-layouts
まずはインストール。
npm install express-ejs-layouts
app.js を編集して、express-ejs-layouts を適用する。
上段でモジュールを require しているところに下記を追加。
var expressLayouts = require('express-ejs-layouts');
中段で app.use している部分に下記を追加。require した express-ejs-layouts を実行する。
app.use(expressLayouts);
views ディレクトリ直下に「layout.ejs」を作成し、共通テンプレート部分を記載のうえ、個別に読み込ませる部分に<%- body %>と書く。以下は例。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<link rel="stylesheet" href="/stylesheets/style.css" />
<title><%= title %></title>
</head>
<body>
<%- body %>
</body>
</html>
4.ファイル変更時にサーバを自動再起動させる #
参考(次のページ内の「ファイルの変更時にサーバの再起動を有効にする」という部分):https://developer.mozilla.org/ja/docs/Learn/Server-side/Express_Nodejs/skeleton_website
nodemon をインストール。
npm install nodemon
package.json を編集して、npm run devstart と入力した際に nodemon で起動させるようにする。scripts 部分を以下のように更新。
// 更新前
"scripts": {
"start": "node ./bin/www"
},
// 更新後
"scripts": {
"start": "node ./bin/www",
"devstart": "nodemon ./bin/www"
},
5.再度サーバを立ち上げて確認する #
サーバを立ち上げて確認する。以下を実行。
npm run devstart
nodemon を利用して立ち上げることで、サーバを立ち上げたままファイルを更新した際にも、画面をリロードすれば、更新後のファイルを読み込んで表示するようになっている。
以上 #
あとは開発していくだけ。