Python の http.server を使って簡単にWebサーバーを立てる

記事タイトルとURLをコピーする

こんにちは、技術1課の加藤です。
最近、AWSの機能をデモするためにフロントエンドをちょこちょこ書いています。そんな中で、ちょろっとWebサーバーを立ててアクセスしたいなーと思った時に便利なTipsです。

http.server モジュールを使う (Python 3系)

Python 環境を用意されている方は、 http.server モジュールを利用することでWebサーバーを立てることができます。

$ python -V
Python 3.x.x
$ python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

これでコマンドを実行したディレクトリをドキュメントルートにしたWebサーバーが立ち上がります。
デフォルトのポートが 8000 になっているため、 http://127.0.0.1:8000/http://localhost:8000 でローカルのWebサーバーにアクセスすることができます。

SimpleHTTPServer モジュールを使う (Python 2系)

Python の 2 系では、http.server ではなく SimpleHTTPServer というモジュールを使います。

$ python -V
Python 2.x.x
$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

こちらも同じく、コマンドを実行したディレクトリがドキュメントルートとなってWebサーバーが立ち上がります。
(※ Python 2系は 2020年1月1日をもってサポートが終了しています。使う際は自己責任でお願いします)

おまけ1. ポートを指定したい場合

コマンドの後にポート番号をつけることで、ポート指定してサーバーを立ち上げることができます。

$ python -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...

おまけ2. Python コマンドの m オプション

Python コマンドの mオプションはモジュールをスクリプトとして実行するコマンドです。
Python 3系を使っている人の中には、仮想環境を作成する venv を利用する際に

$ python -m venv <virtualenv_name>

というコマンドを打ったことがある方、いるんじゃないでしょうか。あの mオプションはこれ。venv モジュールをスクリプトとして動かしています。 これを使うと、 jq (jsonをパースするコマンドラインツール) のようなことが Python のみでできたりします。

$ echo '{"key": "value"}' | python -m json.tool
{
    "key": "value"
}

他にも便利な使い方があるかもしれないので、探してみても面白いかもしれません。