言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

いろんな言語で Hello World (Web 編)

最近は言語の標準ライブラリに Web サーバーが付いてくる事がよくある。だれがこんなの使うんだろうと思っていたが、ちょっとデモしたいだけの時など、複雑なサーバー設定が不要なので、こういう組み込みライブラリを使った環境も便利なのかもしれない。

Python

まず一番単純なウェブサーバは次のプログラムで実現出来る。http://localhost:8000 でアクセス。

import SimpleHTTPServer
SimpleHTTPServer.test()

というわけで SimpleHTTPServer を参考に、どんな URL を指定されてもとにかく Hello World! と言うウェブアプリ(?) を作るとこうなる。

import BaseHTTPServer

class HelloHandler(BaseHTTPServer.BaseHTTPRequestHandler):

    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        self.wfile.write("<h1>Hello, world!</h1>")

BaseHTTPServer.test(HelloHandler)

のように BaseHTTPRequestHandler のサブクラスを作ればよい。リクエストに対応するメソッドは、do_なんとか のように動的に決まる。GET の場合はdo_GET。あとは self.wfile に結果を書き出せばそれがクライアントに伝わる。

Ruby

Ruby で一番最初の Python のウェブサーバと同じような事をするにはこうする。C-c しても死なないので注意。

require 'webrick'
WEBrick::HTTPServer.new({:Port => 8000, :DocumentRoot => Dir::pwd}).start

次に Hello, world! の方もやってみる。

require 'webrick'

s = WEBrick::HTTPServer.new( :Port => 8000 )
s.mount_proc("/"){|req, res|
  res['Content-Type'] = "text/html"
  res.body = "<h1>Hello, world!</h1>"
}

trap("INT"){ s.shutdown }
s.start

Ruby の方はクラスを作るかわりにブロックに処理してみた。python のように サブクラスと do_GET での処理も出来る。マウントポイントを使って複数のサービスを一つのウェブサーバーに登録させるという高級な事も出来る。

いろんな言語といいつつ PythonRuby だけで疲れてしまったので終了。他にも標準ライブラリにウェブサーバの含まれる言語があったら教えてください。

参考