現在のインターネットを支える技術といっても良いWWW。ChromeやFirefoxといったブラウザからの要求に対して応答を返すサーバーはWebサーバーと呼ばれています。
本日紹介する「shinatra」は、なんとこのこのWebサーバーを、わずか5行のコードによって動かしてしまうbashスクリプトです。
プログラムの構造を解析すれば一見複雑なWebサーバーが、基本はシンプルなテキストベースのメッセージのやりとりによって成り立っていることが理解できるでしょう。
使用方法
bashスクリプトなのでUNIX系OSで簡単に実行することができます。
macOSでは以下の手順で試すことができます。
git clone https://github.com/benrady/shinatra.git cd shinatra.git ./shinatra.sh open http://localhost:8080/
デフォルトでは8080ポートでWebサーバーが起動します。
Webブラウザに「OK」というレスポンスが返ってきていることがわかります。
コマンドラインオプションによってポートやレスポンスを変更することもできます。
./shinatra.sh [port] [response]
内部構造
shinatra.shは以下のようなbashスクリプトとなっています。
#!/bin/bash RESPONSE="HTTP/1.1 200 OK\r\nConnection: keep-alive\r\n\r\n${2:-"OK"}\r\n" while { echo -en "$RESPONSE"; } | nc -l "${1:-8080}"; do echo "================================================" done
キーとなるncコマンドはTCPやUDPを利用してデータを送受信することができるコマンドです。実はncコマンドを利用して簡易Webサーバーを立てる方法は、知る人ぞ知る方法とされ、shinatra.shも例に漏れず、その方法を採用している模様です。
ただしコマンドライン引数によってポート番号やレスポンスが変更できるように工夫が加えれています。
まとめ
shinatraはncコマンドで作られたシンプルなWebサーバーです。
Webサーバーはこの方法以外に、Python、Ruby、PHPなどさまざまな言語を使って簡単に動かすことができます。Qiitaの「ワンライナーWebサーバを集めてみた」に纏められていますので、興味のある方はそちらも参考にしてみると良いと思います。