はじめに
REST APIを構築するには、まず動作するプロジェクトの基盤が必要です。このレッスンでは、Node.jsプロジェクトの初期化、Expressのインストール、最小限のサーバーの記述、そして実際に動作していることの確認まで、すべてのステップを順を追って説明します。最後まで終えると、HTTPリクエストに応答する実行中のサーバーが完成します — これは以降のすべてのレッスンの基礎となるものです。
ここでは、Node.js(v18以降)とnpmがすでにマシンにインストールされていることを前提としています。続行する前に、以下の2つのコマンドで確認してください:
いずれかのコマンドがエラーを返した場合は、nodejs.orgからNode.jsをダウンロードしてください(npmも同梱されています)。
プロジェクトの初期化
プロジェクト用の新しいディレクトリを作成し、Node.jsパッケージとして初期化します。initコマンドはpackage.jsonファイルを生成し、プロジェクトのメタデータと依存関係を管理します。
`-y`フラグはすべてのデフォルトを承認するため、プロジェクト名やバージョンなどについてプロンプトが表示されません。package.jsonはいつでも手動で編集できます。この時点では、ディレクトリにはその1つのファイルしか含まれていません — まだコードはありません。
次に、Expressをインストールします:
これでExpressとその依存関係がnode_modulesフォルダにダウンロードされ、package.jsonの「dependencies」に依存関係として記録されます。また、package-lock.jsonが作成されます — これは依存関係の正確なバージョンを固定し、チーム内のすべての開発者が同一のパッケージをインストールできるようにします。
最初のサーバーの構築
プロジェクトのルートにserver.jsというファイルを作成します。このファイルがアプリケーションのエントリーポイントになります。
各部分を順に説明します:`require('express')`はフレームワークをインポートします。`express()`を呼び出すと、アプリケーションインスタンスが生成され`app`に格納されます。`app.get()`はルートハンドラーを登録します — 第1引数はURLパス、第2引数はリクエストオブジェクト(`req`)とレスポンスオブジェクト(`res`)を受け取るコールバックです。`res.json()`はJSONレスポンスを送信し、Content-Typeヘッダーを自動的に設定します。最後に、`app.listen()`はサーバーをポートにバインドし接続の受け入れを開始します。
サーバーを起動します:
コンソールメッセージが表示されるはずです。ブラウザでhttp://localhost:3000を開くか、curlを使用してください:
期待される出力:
開発ワークフローの改善
コードを変更するたびに手動でサーバーを再起動するのは面倒です。開発依存関係としてnodemonをインストールしましょう — nodemonはファイルを監視し、変更を検知すると自動的に再起動します。
次に、package.jsonにdevスクリプトを追加します:
これで開発モードでサーバーを起動できます:
server.jsを編集して保存すると、何もしなくてもnodemonがプロセスを再起動します。`start`スクリプトはnodemonが適さない本番環境用として残しておきます。
もう一つ改善点があります:受信するJSONリクエストボディをパースしましょう。Expressはデフォルトではこれを行いません。ルートより前にこのミドルウェアの行を追加してください:
これがないと、クライアントがJSONペイロード付きのPOSTリクエストを送信した際に`req.body`が`undefined`になります。今ここで追加しておけば、後々デバッグで混乱する手間が省けます。
まとめ
これで完全に機能するExpressプロジェクトが完成しました:依存関係を管理するpackage.json、インストール済みのExpress、ポート3000で待ち受けるserver.js、動作するGETルート、高速な繰り返し開発のためのnodemon、そしてJSONボディパースが有効になっています。これは、このコースの後半で扱うすべてのREST APIパターンの出発点として使用されるまさにそのスケルトンです。次のレッスンではルーティング — 複数のエンドポイントを定義し、APIの成長に合わせてそれらを整理すること — に取り掛かります。