読者です 読者をやめる 読者になる 読者になる

コマンド一発で今いるディレクトリに対してhttpでアクセスしたい

題名通りで時々ローカルにあるファイルを file:// のfileプロトコルではなくてhttpでアクセスしたいってことがありました
こんな時はrubyだと library webrick (Ruby 2.4.0) を使うと実現できます

例えば下記のようなhtmlファイルがあったとして

index.html

<html>
  <body>
    <h1>hoge</h1>
  </body>
</html>

ファイルと同じディレクトリにてhttp_server.rbなんてファイルを作成します

require 'webrick'

WEBrick::HTTPServer.new(DocumentRoot: './', Port: '8080').start

あとはコマンドラインにて

$ ruby http_server.rb

でhttpサーバーが立ち上がったので http://localhost:8080 でアクセスすると先程のhtmlファイルが見られるようになります
とはいえhttpサーバーを立ち上げたい時に毎回 .rb ファイルを作成しては面倒
ここで出て来るのがrubyコマンドの -e オプションですね
この後にスクリプトを指定することでコマンドラインから実行することが出来ます

$ ruby -r webrick -e "WEBrick::HTTPServer.new(DocumentRoot: './', Port: '8080').start"

-r を指定することでスクリプトの実行前にKernel.#requireでrequireしてくれます

これでコマンドラインから一発でhttpサーバーが立ち上げれるようになりました