はじめに
HTTPリクエストの内容を表示するだけ、という単機能WebサーバをExpressで作ってみました。
告知を兼ねて記事としてシェアします。
TL;DR
作ったコードは一式GitHubに上がっています。
- GitHub: kulikala/http-ephemeral-server
- npm: http-ephemeral-server
用途
こんな時に使うと便利だと思います。
- APIでリクエストする時に、正しくHTTPヘッダが設定できているか確認したい
- POSTした値が正しく解釈されるか確認したい
- 複数のコンテナアプリケーションを作って、互いに通信する構成を作る時、とりあえずのイメージを使いたい
- ALBでECSに振り分ける構成をCloudFormationで作る時、アプリがまだできていないけど、とりあえずECRのリポジトリがほしい時
背景
用途の4つ目を叶えたかったのが、今回一番の目的でした。
PHPからインスパイア
PHPには<? phpinfo(); ?>という便利メソッドがあって、Apache + PHPで環境作った後、このphpinfo();でサーバの構成情報やHTTPリクエスト情報を確認していました。
Dockerに載せやすい形
Node.jsにはhttp-serverという便利サーバがあって、簡単にインストール&静的ファイルをサーブできます。
このツールと同じくらい簡単にインストールできて、HTTPリクエスト情報が目視しやすくって、Dockerに載せやすい形を模索していました。
便利ポイント
環境変数でポートを指定できる
環境変数でサーバがリスニングするポートを変えることができます。
Dockerはポートマッピングが重要だからこそ、イメージを作成した後にポートを変更できるのは便利です。
使い方
3つの使い方ができます。
- コマンドラインツールとしてインストール
- Dockerイメージとしてビルド
-
npmパッケージとしてライブラリ利用
コマンドラインツールとしてインストール
npmでグローバルインストールすると、どのワーキングディレクトリからでも一発起動します。
インストール
$ npm install http-ephemeral-server -g
起動
$ http-ephemeral-server
デフォルトポートは3000になっているので、 http://localhost:3000 にアクセスすると、こんな感じの画面が表示されます。
ポート番号を変更する
ポート番号は、環境変数PORTで指定します。
$ PORT=8000 http-ephemeral-server
今度は、 http://localhost:8000 で表示されます。
短いコマンド
http-ephemeral-serverは長すぎてタイポしそうです。
短いバージョンを用意しています。
$ hes
URLは自由
http://localhost:3000/hoge/bar/foo?The:quick:brown:fox:jumps:over:the:lazy:dog
というURLにアクセスすると、画面は同じでurlの項目が変化します。
Dockerイメージとしてビルド
Dockerfileをリポジトリ内に用意しています。
GitHubからcloneしてローカルでビルドします。
ローカルにclone
$ git clone https://github.com/kulikala/http-ephemeral-server.git
$ cd http-ephemeral-server
dockerコマンドを使う
docker image buildでビルドします。
-t http-ephemeral-server:latestでビルドしたイメージにタグを付けています。
$ docker image build -t http-ephemeral-server:latest .
docker container runで起動します。
$ docker container run -d -p 3000:80 http-ephemeral-server:latest
デフォルトでは、コンテナ内ではEXPOSE 80するようにDockerfileで記述しています。
ブラウザからアクセスできるようにするには、-p 3000:80などホストポートをコンテナポートにマッピングしてあげます。
-dオプションを指定しないで起動すると、Nodeのプロセスにアタッチします。
ポートを変更してビルド
--build-argオプションでPORT変数に値を渡してあげます。
$ docker image build -t http-ephemeral-server:latest --build-arg PORT=3000 .
起動時にポート番号を変更
PORT環境変数を渡して起動すると、実行時のポート番号を変更します。
実行時に8000番ポートに変更し、 http://localhost:8000 にマッピングするには次のようにします。
$ docker container run -d -p 8000:8000 -e PORT=8000 http-ephemeral-server:latest
docker-composeコマンドを使う
便利ですよね、docker-compose。
docker起動時のオプションなどはよく忘れてしまうので、起動するコンテナが1つの場合でも、docker-compose.yml書いておくことにしています。
$ docker-compose build
$ docker-compose start
リポジトリ内のdocker-compose.ymlではホストの8000番ポートにマッピングしているので、ブラウザから http://localhost:8000 にアクセスすると応答するようになります。
npmパッケージとしてライブラリ利用
http-ephemeral-serverは、Express application generator で生成したExpressアプリケーションになっています。
npmでインストール
$ npm install http-ephemeral-server --save
require()する
require('http-ephemeral-server')するとExpressのApplicationインスタンスが取得できるので、
const app = require('http-ephemeral-server')
app.listen(3000)
みたいな形で利用できます。
ぜひ、使ってみてください!

