コマンドラインからWEBrickを起動

一時的に任意のディレクトリをHTTPサーバに公開したくなったので、WEBrickを起動するスクリプトを組んでみた。既存のものがある気がしなくはないけど、OptionParserの勉強という意味も含めて。

#!/usr/bin/env ruby

require 'optparse'
require 'webrick'
include WEBrick

# WEBrickを起動する際のオプションのデフォルト値
WebrickOptions = {
  :Port => 8000,
  :DocumentRoot => Dir::pwd,
}

OptionParser.new do |opt|
  # パース方法を設定する
  # オプションが指定されていた場合にブロックが評価される
  opt.on('-p', '--Port N', Integer) { |v| WebrickOptions[:Port] = v }
  opt.on('-d', '--DocumentRoot PATH') { |v| WebrickOptions[:DocumentRoot] = v }
  
  # 実際にパースを行う
  opt.parse!(ARGV)
end

# WEBrickを起動する
s = HTTPServer.new(WebrickOptions)
trap("INT") { s.shutdown }
s.start

オプションを指定しない場合は8000番ポートにカレントディレクトリをドキュメントルートとして起動する。

$ ruby webrick

-pオプションもしくは--Portオプションでポート番号を指定し、-dオプションもしくは--DocumentRootでドキュメントルートを指定する。

$ ruby webrick -p 8080 -d ~/Sites

これらの値を指定しない場合にはOptionParser::MissingArgumentが投げられる。

$ ruby webrick -p
#=> OptionParser::MissingArgument

なおここでは使っていないが、オプションの引数を必須としない場合には次のように[を含める。

  opt.on('-p', '--Port [N]', Integer) { |v| WebrickOptions[:Port] = v }

引数が与えられたときにはopt.onのブロックにその値が渡され、引数が与えられなかった場合には「オプションが指定された」という意味でtrueが渡される。

参考文献

追記

gistに追加した