このレッスンのロックを解除するには、まず「レッスン1:RESTとHTTPの基礎」を完了してください。前のレッスンに戻る

はじめに

REST APIを構築するには、まず動作するプロジェクトの基盤が必要です。このレッスンでは、Node.jsプロジェクトの初期化、Expressのインストール、最小限のサーバーの記述、そして実際に動作していることの確認まで、すべてのステップを順を追って説明します。最後まで終えると、HTTPリクエストに応答する実行中のサーバーが完成します — これは以降のすべてのレッスンの基礎となるものです。

ここでは、Node.js(v18以降)とnpmがすでにマシンにインストールされていることを前提としています。続行する前に、以下の2つのコマンドで確認してください:

bash
node --version
npm --version

いずれかのコマンドがエラーを返した場合は、nodejs.orgからNode.jsをダウンロードしてください(npmも同梱されています)。

プロジェクトの初期化

プロジェクト用の新しいディレクトリを作成し、Node.jsパッケージとして初期化します。initコマンドはpackage.jsonファイルを生成し、プロジェクトのメタデータと依存関係を管理します。

bash
mkdir my-rest-api
cd my-rest-api
npm init -y

`-y`フラグはすべてのデフォルトを承認するため、プロジェクト名やバージョンなどについてプロンプトが表示されません。package.jsonはいつでも手動で編集できます。この時点では、ディレクトリにはその1つのファイルしか含まれていません — まだコードはありません。

次に、Expressをインストールします:

bash
npm install express

これでExpressとその依存関係がnode_modulesフォルダにダウンロードされ、package.jsonの「dependencies」に依存関係として記録されます。また、package-lock.jsonが作成されます — これは依存関係の正確なバージョンを固定し、チーム内のすべての開発者が同一のパッケージをインストールできるようにします。

npm initでpackage.jsonを作成、npm install expressでExpressをnode_modulesに追加しpackage.jsonのdependenciesを更新、そしてserver.jsがExpressをインポートしてアプリを作成する、という3ステップを示すフローチャート

最初のサーバーの構築

プロジェクトのルートにserver.jsというファイルを作成します。このファイルがアプリケーションのエントリーポイントになります。

javascript
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.json({ message: 'Server is running' });
});
app.listen(PORT, () => {
console.log(`Server listening on http://localhost:${PORT}`);
});

各部分を順に説明します:`require('express')`はフレームワークをインポートします。`express()`を呼び出すと、アプリケーションインスタンスが生成され`app`に格納されます。`app.get()`はルートハンドラーを登録します — 第1引数はURLパス、第2引数はリクエストオブジェクト(`req`)とレスポンスオブジェクト(`res`)を受け取るコールバックです。`res.json()`はJSONレスポンスを送信し、Content-Typeヘッダーを自動的に設定します。最後に、`app.listen()`はサーバーをポートにバインドし接続の受け入れを開始します。

サーバーを起動します:

bash
node server.js

コンソールメッセージが表示されるはずです。ブラウザでhttp://localhost:3000を開くか、curlを使用してください:

bash
curl http://localhost:3000

期待される出力:

json
{"message": "Server is running"}

開発ワークフローの改善

コードを変更するたびに手動でサーバーを再起動するのは面倒です。開発依存関係としてnodemonをインストールしましょう — nodemonはファイルを監視し、変更を検知すると自動的に再起動します。

bash
npm install --save-dev nodemon

次に、package.jsonにdevスクリプトを追加します:

json
{
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js"
}
}

これで開発モードでサーバーを起動できます:

bash
npm run dev

server.jsを編集して保存すると、何もしなくてもnodemonがプロセスを再起動します。`start`スクリプトはnodemonが適さない本番環境用として残しておきます。

もう一つ改善点があります:受信するJSONリクエストボディをパースしましょう。Expressはデフォルトではこれを行いません。ルートより前にこのミドルウェアの行を追加してください:

javascript
app.use(express.json());

これがないと、クライアントがJSONペイロード付きのPOSTリクエストを送信した際に`req.body`が`undefined`になります。今ここで追加しておけば、後々デバッグで混乱する手間が省けます。

まとめ

これで完全に機能するExpressプロジェクトが完成しました:依存関係を管理するpackage.json、インストール済みのExpress、ポート3000で待ち受けるserver.js、動作するGETルート、高速な繰り返し開発のためのnodemon、そしてJSONボディパースが有効になっています。これは、このコースの後半で扱うすべてのREST APIパターンの出発点として使用されるまさにそのスケルトンです。次のレッスンではルーティング — 複数のエンドポイントを定義し、APIの成長に合わせてそれらを整理すること — に取り掛かります。