Webページなんかを作ったりしていると、何かと「ちょっと確認」したいときにHTTPサーバーを起動したいという機会は多いと思います。
アプリケーションの配布用のサイト、個人サイト、etc...
htmlファイルをそのまま開くのも悪くはないですし、特に問題なく動くことも多いですが、絶対パスでのファイル指定やXHR/FetchでのOrigin成約に阻まれること、://
スキームで問題が起こることもしばしばあります。
そんなときは簡易的なHTTPサーバーを建てるのが一番ですが、みなさんどのように建てていますでしょうか?
Pythonで建てる
メジャーな方法の1つに、Pythonで建てるという方法があります。
Python2系ではSimpleHTTPServerが、Python3系ではhttp.serverがあり、以下のような記述でサーバーを建てることが可能です。
$ python -m SimpleHTTPServer
$ python3 -m http.server
悪くはないですし、私も利用していましたが、何分融通が効きづらいこと、入力量が多いことから面倒でした。
また、ブラウザ自体は自動で立ち上がらないので、自分で開ける必要がありました。
PHPで建てる
次に、つい最近まで私はPHPでサーバーを建てるようになっていました。
PHPで建てる利点としては、以下の様なものがあります。
- Document rootの指定が簡潔
- ポートの指定もまた簡潔
-
0.0.0.0
指定が可能(ローカルネットワークで他の人に確認してもらいやすい)
実際に利用していたのが以下となります。
$ php -S # 通常時
$ php -S 0.0.0.0:8080 # 8080に建てたい時
$ php -S 0.0.0.0:8080 -t ./public_html # パスを指定したい時
Pythonよりは簡潔で楽でしたが、依然としてそれなりの記述量はあり、また、ブラウザを自動で開いてくれることはありませんでした。
pocke/wwwを使う
最終的に、私はpocke/wwwを利用することとしました。
これは、Goで書かれたシンプルなHTTPサーバーで、以下のような特徴があります。
- wwwの3文字のコマンドで立ち上がる
- 毎回ランダムなポート上で立ち上がるため、競合が少ない
- 自動でブラウザも立ち上げてくれる
と、非常に便利な代物になっており、オプションで0.0.0.0
指定やポート指定も可能となっており、現在メイン利用してるHTTPサーバーのプログラムとなっています。
導入方法
GitHubを参考に、コマンド一発でインストールします。なお、導入にはGoの環境が必要となります。
$ go get github.com/pocke/www
使い方
ドキュメントルートのディレクトリに入り、以下のコマンドで自動で立ち上がります。
$ www
まとめ
wwwを利用すると、非常に手軽かつ便利に、HTTPサーバーを立ち上げることが可能です。
今まで大抵gemかnpmで導入されてきたCLIツールを、珍しくgo getで入れることになり、golangの需要の高まりも見られる良い機会でした。
モダン環境を整えないでRiotなどでサッと作るタイプのJavaScript開発や、マークアップでのWebページの作成など、何かと活躍の場は多く、作業効率を上げるためには非常に良いツールではないかと思います。
おまけ
もう一つの選択肢として、シェルスクリプトのエイリアスとして解決させる方法があったりします。
私は、wwwを利用しないときは、以下のエイリアスでブラウザの自動オープンなどを行っていました。
alias http="open http://0.0.0.0:8080 & php -S 0.0.0.0:8080"