このリポジトリは、Express.js を使用して構築された多機能なAPIモックサーバーです。以下の主要な機能を提供します。
- ローカルモックAPI処理: 特定のエンドポイントに対してモックデータを返します。
- 透過的プロキシ機能: モックに定義されていないリクエストを実際のバックエンドAPIサーバーへ転送します。
- ローカルHTTPSサポート:
hostsファイルとmkcertを利用し、HTTPS環境で動作します。
このモックサーバーは、アプリケーションコードを変更することなく、特定のドメインへのリクエストをローカルモックサーバーへ透過的にリダイレクトするように設計されています。 HTTPSにも対応しており、より本番に近い環境でのテストが可能です。
このモックサーバーを起動・利用するための手順は以下の通りです。
プロジェクトのルートディレクトリで、必要なNode.jsパッケージをインストールします。
npm installa. mkcert を使用して、ローカル開発用のSSL証明書を発行します。これにより、ブラウザやアプリがあなたのローカルHTTPSサーバーを信頼するようになります。
brew install mkcertb. ローカル認証局 (CA) のセットアップ
mkcert でローカル認証局(CA)を作成し、システムに登録します。これにより、このCAが発行する証明書はあなたのPC上で信頼されるようになります。
mkcert -installc. ドメイン用サーバー証明書の発行
サーバーで使用するドメイン用のSSLサーバー証明書と秘密鍵を発行します。
mkcert <ターゲットドメイン>このコマンドを実行すると、カレントディレクトリに <ターゲットドメイン>.pem(証明書)と <ターゲットドメイン>.pem(秘密鍵)の2つのファイルが生成されます。
生成した証明書と秘密鍵のパスを安全に管理し、サーバーが設定を読み込めるようにします。
a. 証明書ファイルの整理・配置
生成された .pem ファイルと -key.pem ファイルを、プロジェクトのルートに作成した certs ディレクトリ内に移動します。
mkdir -p certs
mv <ターゲット>.pem certs/
mv <ターゲット>-key.pem certs/b. 環境変数設定ファイル (.env) の作成
プロジェクトのルートにある .env.template ファイルを参考に、.env ファイルを新規作成します。この .env ファイルに、あなたの環境に合わせた設定値を記述します。
hostsファイルの設定 (管理者権限)
hosts ファイルを編集し、ターゲットドメインへのリクエストをローカルのモックサーバーへ振り向けます。
注意: この作業には管理者権限が必要です。また、開発終了後は必ず設定を元に戻してください。
a. ターミナルで以下のコマンドを実行し、hosts ファイルを開きます。(パスワードの入力が求められます)
sudo nano /etc/hostsb. hosts ファイルの末尾に、以下の行を追加します。これにより、ターゲットドメインへのアクセスがローカルマシン (127.0.0.1) に向けられます。
127.0.0.1 <ターゲットドメイン>
【重要】 ファイル内に元々記述されている 127.0.0.1 localhost や ::1 localhost といった行は、システムの正常な動作に不可欠です。絶対に削除したりコメントアウトしたりしないでください。
c. ファイルを保存して閉じます。(nanoエディタの場合: Ctrl + O で保存、Enterキー、Ctrl + X で終了)
d. (任意) hosts ファイルの変更確認:
cat /etc/hosts で追加した行が表示されるか確認できます。
ping <ターゲットドメイン> を実行し、127.0.0.1 からの応答があれば正しく設定されています。(Ctrl + C で停止)
プロジェクトのルートディレクトリで以下のコマンドを実行し、モックサーバーを起動します。
注意: ポート 443 のような特権ポートを使用する場合、sudo が必要になることがあります。
sudo node server.jsサーバーが正常に起動すると、以下のようなログがコンソールに出力されます。
HTTPS Mock API Server with Proxy is running.
--------------------------------------------------------------------------------
>> Listening on: https://localhost:443
>> Your 'hosts' file should point 'jsonplaceholder.typicode.com' to 127.0.0.1.
>> Application should send API requests to its original target domain
(e.g., [https://jsonplaceholder.typicode.com/some-api-path](https://jsonplaceholder.typicode.com/some-api-path))
>> Mocked API Endpoints (handled locally):
- User API: /users (accessed via [https://jsonplaceholder.typicode.com/users](https://jsonplaceholder.typicode.com/users))
>> Requests to all other paths will be proxied to: [https://jsonplaceholder.typicode.com](https://jsonplaceholder.typicode.com) (via IP: 172.64.32.182)
User data for mocks is stored in: /Users/myuser/uncoming-api/resource/users.json
--------------------------------------------------------------------------------
サーバーが起動したら、WebブラウザやAPIテストツール、または実際に開発しているアプリケーションからAPIリクエストを送信して動作を確認できます。
モックサーバーのサンプル実装によって、ターゲットドメインに新しいエンドポイント /users が追加されていることを確認します。
ターゲットドメインに jsonplaceholder.typicode.com を指定していた場合、https://jsonplaceholder.typicode.com/users にアクセスすることで確認できます。
開発やテストが終了したら、必ずサーバーと hosts ファイルの設定を元に戻しましょう。
a. モックサーバーの停止
サーバーを起動したターミナルで Ctrl + C を押すのが最も安全で一般的です。
注意: killall node コマンドは、実行中の すべての Node.jsプロセスを強制終了するため、他のプロジェクトのサーバーを停止してしまう可能性があります。使用には注意してください。
b. hosts ファイルの設定を元に戻す (最重要)
hosts ファイルへの変更はPC全体のネットワークリクエストに影響を与えます。開発やテストが終了したら、必ず追加した行を削除またはコメントアウトして元に戻してください。 これを怠ると、本来アクセスしたい外部APIサーバーに接続できなくなる可能性があります。
既存のモックサーバーに新しいAPIエンドポイントのモックを追加する方法を説明します。
現在、このプロジェクトにはサンプル実装として、/routes/users.js で定義されたユーザー関連のモックAPIと、そのデータソースである /resource/users.json が用意されています。新しいモックを実装する際は、これらを参考に進めることができます。
- モックデータの用意:
resource ディレクトリ内に、新しいAPIエンドポイントが返すレスポンスデータをJSON形式で作成します。例えば、products.json のようなファイルです。
- Express ルートの定義:
routes ディレクトリ内に、新しいモックAPIのエンドポイントを定義するJavaScriptファイルを作成します。例えば、products.js のようなファイルです。このファイル内で、Expressのルーターを使って、定義したモックデータを返す処理を実装します。
server.jsへのルート追加:
メインの server.js ファイルを開き、新しく作成したモックAPIのルートファイルを読み込み、Expressアプリケーションにマウントします。
例:
// モックAPIのルートを読み込みは、**プロキシミドルウェアの適用より前に**実行する必要があります
const productRoutes = require('./routes/products');
app.use('/products', productRoutes);
// --- プロキシミドルウェアの適用 (モックAPIルート定義の後に配置) ---
app.use(defaultProxy);これらの手順を完了したら、モックサーバーを再起動してください。これで、https://<ターゲットドメイン>/products や https://ターゲットドメイン/products/1 のようなURLで、新しいモックデータにアクセスできるようになります。