.zshrc
にstatic_httpd
って関数つくってる。
dotfiles/.zshrc at master · kamipo/dotfiles · GitHub
function static_httpd { if type plackup > /dev/null; then plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root => ".")->to_app' elif type ruby > /dev/null; then if ruby -v | grep -qm1 'ruby 2\.'; then ruby -run -e httpd -- --port=5000 . else ruby -rwebrick -e 'WEBrick::HTTPServer.new(:Port => 5000, :DocumentRoot => ".").start' fi elif type python > /dev/null; then if python -V 2>&1 | grep -qm1 'Python 3\.'; then python -m http.server 5000 else python -m SimpleHTTPServer 5000 fi elif type node > /dev/null; then node -e "var c=require('connect'), d=process.env.PWD; c().use(c.logger()).use(c.static(d)).use(c.directory(d)).listen(5000);" elif type php > /dev/null && php -v | grep -qm1 'PHP 5\.[45]\.'; then php -S 0.0.0.0:5000 elif type erl > /dev/null; then erl -eval 'inets:start(), inets:start(httpd, [{server_name, "httpd"}, {server_root, "."}, {document_root, "."}, {port, 5000}])' fi }
むかしはplackup
だけ書いてたんだけど、あんまりPerlつかってなかった時期にPlack入れてるかどうか自信ないとすぐにHTTPD上げれないから、そのときにとりあえずHTTPD上げれそうなやつ調べて全部書いておいた。
この中だとRubyとPythonが標準モジュールだけでディレクトリインデックス表示できる。
追記
一応Python3ではSimpleHTTPServerというモジュールはなくなっててhttp.serverになっていますので、かみぽさんのzshrcにpython2かpython3かが追加されたらさらにすばらしい
— Yoshifumi YAMAGUCHI (@ymotongpoo) February 20, 2013
Python3ではSimpleHTTPServer
がなくなってhttp.server
になっているそうなので、python2かpython3かを.zshrc
に追加しておきました!
if python -V 2>&1 | grep -qm1 'Python 3\.'; then python -m http.server 5000 else python -m SimpleHTTPServer 5000 fi
追記おわり。
Perlはディレクトリインデックス表示だとPlackとPlack::App::Directory入れてないといけないけど、Perlは標準モジュールが貧弱なんでPerlでWeb開発してる人は必ず入れてるからまあよしとします。
PHPは5.4以降のbuilt-in web serverが使えるけどディレクトリインデックスは表示できなかった。
あとNodeも試したんだけど、まずconnect
入れないとワンライナーじゃ無理そうなのと、カレントディレクトリをドキュメントルートにできなくてサブディレクトリにしないといけなかったので含めなかった。こんな感じ。
node -e "var connect=require('connect'); connect().use(connect.static('public')).use(connect.logger()).listen(5000);"
追記
@sugyanにprocess.env.PWD
でフルパス指定すればいけることを教えてもらいました!__dirname
は試したんだけどワンライナーだと'.'
になってダメで諦めてた…。ディレクトリインデックスがかっこよかった。
node -e "var c=require('connect'), d=process.env.PWD; c().use(c.logger()).use(c.static(d)).use(c.directory(d)).listen(5000);"
追記おわり。
あとErlangはちょっとやってみたかっただけのオマケです。