静的なHTTPサーバーが欲しくなること、多々あると思います。
- SPAを作っている時
- クライアントサイドのみのWebアプリを作っている時
- 人にちょっとファイルを渡したい時
こんな時に、カレントディレクトリ以下をサーブするだけのHTTPサーバーが欲しくなると思います。
そのような用途では、Python の http server モジュールが有名です。
現状: python -m http.server
以下のようにすると、カレントディレクトリ以下をサーブするHTTPサーバーが立ち上がります。
$ python -m http.server
私は使ったことは殆どないのですが、python2の場合は以下のコマンドになります。
$ python -m SimpleHTTPServer
上記コマンドを実行した後、ブラウザにてlocalhost:8000
にアクセスすることでカレントディレクトリ以下を閲覧することが出来ます。
また、python以外の言語でも同様のことが可能なようです。
開発用ローカルサーバを立ち上げる方法 - Qiita
問題点
上記のコマンドによって静的HTTPサーバーを立てることが可能ですが、私は問題点がいくつかあると感じています。
- コマンドが長い
- ポートがかぶる
- ブラウザが開かない
順々に説明していきます。
コマンドが長い
python -m http.server
というコマンド、長いですね。
まるで万里の長城のようです。
これだけ長いと実行する際に打つのが大変です。
また、コマンド名を覚えるのが大変ですね。Pythonの場合は2系と3系でモジュール名が違うのも少々厄介です。
この問題はpeco
などを使用しシェルのヒストリを検索することで解決することが出来ます。
しかし、毎回peco
を呼び出す手間を考えると、最初から短いコマンドであった方が楽ですね。
ポートがかぶる
python
を使用する方法だと、デフォルトでは8000番でHTTPサーバーが立ち上がります。
つまり既に他のアプリケーションが8000番を使用していると、HTTPサーバーを立ち上げることが出来ません。
そして、ポート番号の重複はよく発生します。
開発中のWebアプリが既に8000番を使用している状況は少なくないでしょう。
また、別のディレクトリで既にpython -m http.server
を実行しているだけでも重複してしまいます。
これはpython -m http.server 8888
などポート番号を明示的に指定することで回避可能です。
しかし、明示的にポート番号を指定する手間が発生します。
- まず8000番でHTTPサーバーを建てて
- 使われていたら別の番号で建て直す
と、2段構えでコマンドを実行する手間が発生することも多々あるでしょう。
ブラウザが開かない
HTTPサーバーを起動した後、我々が行うことで一番多いのは
立ち上げたサーバーにブラウザからアクセスする
という行動であることはほぼ間違いないと思います。
ブラウザを開き、アドレスバーにlocalhost:8000
などと打ち込むのは案外面倒なことです。
どうせなら、HTTPサーバーを起動したらそのままブラウザが開いてほしいですね。
解決策: www
そこで、解決策として、www
と言うコマンドを作成しました。
使い方
$ www
以上です。とても簡単ですね。
www
コマンドを実行すると、HTTPサーバーがランダムなポートで立ち上がり、ブラウザが自動的に開きます。
- 短い名前
- ランダムなポート
- 自動的に開くブラウザ
の3つによって、上で挙げた3つの問題が全て解決しています。
インストール
Go言語がインストールされている環境では、以下のコマンドを実行することでインストールが可能です。
$ go get github.com/pocke/www
また、リリースページからバイナリをダウンロードしてパスが通った場所に配置することでもインストールが可能です。
その他の機能
ポート番号の指定
-p
or --port
オプションで明示的にポート番号を指定してサーバーを起動することが出来ます。
$ www -p 8000 # or $ www --port 8000
通常使用時にはランダムなポートでいいと思います。
しかし、例えばwww
経由で人にファイルを受け渡しする際などはポート番号を明示的に指定できた方が便利でしょう。
リロード機能
友人からのリクエストで機能追加しました。
www
を起動しているターミナルでreload
と入力してからEnterを入力することで、もう一度ブラウザを開くことが出来ます。
誤ってブラウザのタブを閉じてしまった場合や、タブを複数開きたい場合に便利でしょう。
まとめ
GitHubでStarがほしい