🛠️
ワンライナーのHTTPサーバを忘れるのでテスト用のスクリプトを作ってみた
はじめに
開発をしてると画像や生成されたHTMLなどをローカルのHTTPサーバにホスティングしたり、フロントエンド書いてて取り合えずモックのAPIサーバを立ち上げたいときは良くあります。
そのたびにいつも「ワンライナー HTTPサーバ」でGoogle先生に聞いたり、自分のコマンド履歴から探してるんですがめんどくなってスクリプト書いたのでメモに残しておきます。そのうち作ったこと自体忘れると思うので。。。
httpd4test
- Rubyベースの簡易Webサーバ。WEBrickのラッパー
- カレントディレクトリのWebホスティングをサポート
- API用にEcho Serverをサポート (CROS対応済み)
- DockerがあればRubyは無くても動作
インストール
内部でDockerを利用しているので、事前にDockerが動作する事は確認。
$ sudo sh -c 'curl https://raw.githubusercontent.com/koduki/httpd4test/main/cli/httpd4test > /usr/bin/httpd4test && chmod a+x /usr/bin/httpd4test'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 186 100 186 0 0 704 0 --:--:-- --:--:-- --:--:-- 704
$ httpd4test -h
Usage: httpd4test [OPTION]...
This is http server for testing
Options:
-p, --port port number of http server
-m, --message echo message
-h, --help this message
--json change content-type to 'application/json'
使い方
静的コンテンツのホスティング
カレントディレクトリをデフォルトポート8080でホスティング
$ touch a b c
$ ls -l
total 0
-rw-r--r-- 1 koduki koduki 0 Dec 26 12:17 a
-rw-r--r-- 1 koduki koduki 0 Dec 26 12:17 b
-rw-r--r-- 1 koduki koduki 0 Dec 26 12:17 c
$ httpd4test
[2020-12-26 20:17:47] INFO WEBrick 1.7.0
[2020-12-26 20:17:47] INFO ruby 3.0.0 (2020-12-20) [x86_64-linux]
Server is listening on :8080
Return local contents
[2020-12-26 20:17:47] INFO WEBrick::HTTPServer#start: pid=1 port=8080
動作確認。
$ lynx http://localhost:8080/
Index of /
Index of /
Name Last modified Size
Parent Directory 2020/12/26 20:49 -
a 2020/12/26 20:17 0
b 2020/12/26 20:17 0
c 2020/12/26 20:17 0
_____________________________________________________________
WEBrick/1.7.0 (Ruby/3.0.0/2020-12-20) at localhost:8080
ダミーAPIの作成
引数で渡したJSONを返す。
$ httpd4test -p 5000 -m '{"message":"Hello World"}' --json
[2020-12-27 00:25:25] INFO WEBrick 1.7.0
[2020-12-27 00:25:25] INFO ruby 3.0.0 (2020-12-20) [x86_64-linux]
Server is listening on :5000
Return value is {"message":"Hello World"}
[2020-12-27 00:25:25] INFO WEBrick::HTTPServer#start: pid=1 port=5000
curlコマンドで確認。
$ curl -v http://localhost:5000/
* Trying 127.0.0.1:5000...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET / HTTP/1.1
> Host: localhost:5000
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Headers: X-Requested-With, Origin, X-Csrftoken, Content-Type, Accept
< Content-Type: application/json
< Server: WEBrick/1.7.0 (Ruby/3.0.0/2020-12-20)
< Date: Sun, 27 Dec 2020 00:26:55 GMT
< Content-Length: 25
< Connection: Keep-Alive
<
* Connection #0 to host localhost left intact
{"message":"Hello World"}%
まとめ
おそらく似たこと、あるいはこれ以上をしてくれるツールは星の数ほどあるけど、探すのも使い方を覚えるのも面倒なので作ってみました。
今回はDockerを使ってるけどfootprintが悪いのでmrubyかRubyPackerでシングルバイナリにしようかな。。。
ちなみにコンテナは無意味にRuby 3で作ったので手持ちのスクリプトでは始めてRuby3向けに書いたコードになります。ほぼどのRubyでも動く程度のコード量ですがw
それではHappy Hacking!
Discussion