LoginSignup
101
98

More than 5 years have passed since last update.

手軽な HTTP/HTTPS サーバコマンド

Last updated at Posted at 2015-01-18

http や https サーバをローカルにサクッと立てたい時の便利コマンド。

Local Server

local に HTTP サーバを立てたい場合、よくこんなのが使われている。

$ python2 -m SimpleHTTPServer
$ python3 -m http.server

ただ、あまり気に入ってなかった。

  • 長い
  • python のバージョンで変わる
  • コマンドを https に変えても https サーバにはならない
  • content-type を変えたい

特に HTTPS サーバは、 ServiceWorker 周りをいじる時に確認とかで便利なんだけど、証明書を作ったりが面倒。

ということで作り始めたコマンドが落ち着いて来たので載せておく。

http/https コマンド

http か https と叩くだけでカレントにサーバが上がる。
デフォルトポートは 3000 で第一引数で指定もできる。
https は証明書の準備もいらない。

$ http
$ https 8443

https の証明書はコマンドがその都度、自己証明書を内部で生成するので、openssl コマンドとか使わないで済むので楽。(ただし、ブラウザでは毎回あのエラー画面を経由する必要がある、用意すれば一回で済むので自分は用意している)

また、例えば .log とか .md などのファイルがバイナリ扱いされて、ブラウザで開くとダウンロードされてしまうのを防ぐために、 content-type を設定できるようにしている。

ソース

http, https でコマンド自体を分けたかったので、ほとんど重複するが 2 つのファイルにしてる。
色々やった結果、目的達成には Webrick が一番手軽だったのでそこに落ち着いた。

http

#!/usr/bin/env ruby

require 'webrick'


# ここで自由に MIME を設定できるのが便利
mime = WEBrick::HTTPUtils::DefaultMimeTypes.merge({
  "js"       => "text/javascript",
  "json"     => "text/json",
  "log"      => "text/plain",
  "md"       => "text/plain",
  "markdown" => "text/plain",
})

port = ARGV.shift || 3000
config = {
  :Port         => port,
  :DocumentRoot => '.',
  :MimeTypes    => mime
}

server = WEBrick::HTTPServer.new(config)
Signal.trap('INT') { server.shutdown }
server.start

最新版はこちら。

https

証明書を自動生成してる以外ほぼ同じ。
コマンド自体を分けたいから内容はほぼ重複している。

#!/usr/bin/env ruby

require 'webrick'
require 'webrick/https'

port = ARGV.shift || 3000

# ここで自由に MIME を設定できるのが便利
mime = WEBrick::HTTPUtils::DefaultMimeTypes.merge({
  "js"       => "text/javascript",
  "json"     => "text/json",
  "log"      => "text/plain",
  "md"       => "text/plain",
  "markdown" => "text/plain",
})

config = {
  :Port         => port,
  :DocumentRoot => '.',
  :MimeTypes    => mime,
  :SSLEnable    => true,
  :SSLCertName  => [["CN", "devserver"]], # 証明書を自動で生成してくれる
}

server = WEBrick::HTTPServer.new(config)
Signal.trap('INT') { server.shutdown }
server.start

最新版はこちら

バックグラウンドで起動

簡単にログを抑制したり、バックグラウンドで起動しっぱなしにしたい場合のオプションを、以前はコマンドに含めていたが、最近は zsh でやっている。
どういうことかというと、 zsh はコマンドの途中にエイリアスを貼れるのでそれを使っている。

alias -g N="1>/dev/null 2>/dev/null"
alias -g B="1>/dev/null 2>/dev/null &"

これを使うと、コマンド自体にオプションを追加しないでも、汎用的なオプションみたいに定義できて、すべてコマンドで使えるので便利。

# N をつけるとログの抑制
$ http 1>/dev/null 2>/dev/null
$ http N

# B をつけるとさらにバックグラウンド化
$ http 1>/dev/null 2>/dev/null &
$ http B

停止

このコマンドに限らず、バックグラウンドプロセスは peco で探して kill するコマンドを作ってて、これでさくっと探して落とすようにしている。

alias killp="ps aux | peco | awk '{print \$2}' | xargs kill -9"

$ killp # これで http を探してエンター押すだけ

配置

こういうのも dotfiles に入れてパスを通してる。

[https://github.com/Jxck/dotfiles/blob/master/bin/http]

101
98
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
101
98