shinatra - わずか5行のbashコードで作られた超シンプルなWebサーバー

S 20161125 83414

現在のインターネットを支える技術といっても良い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サーバーが起動します。

S 20161125 83454

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サーバを集めてみた」に纏められていますので、興味のある方はそちらも参考にしてみると良いと思います。

スポンサーリンク