- devd: a local webserver for developers
- 知ったキッカケ
- コマンドパツイチでHTTPサーバになったりリバースプロキシになったりする
- いわゆるライブリロードもいける
- この記事を書いたときのバージョンは 0.3
インストール方法
Go言語製なので下記からダウンロードしたアーカイブの中身のバイナリをパスの通ったところに置くだけです。
go get でもビルド&インストールできます。
go get github.com/cortesi/devd/cmd/devd
簡単な使い方
カレントディレクトリを静的ファイルとして返す Web サーバを起動。
devd .
-o
でブラウザを自動起動する。
devd -o .
-l
でライブリロードが有効になる。
devd -ol .
-w
で監視するディレクトリを指定してライブリロードする(-l
との違いが良くわからない? ディレクトリが指定できるかどうかだけでは無さそうだけど?)。
devd -ow src/ .
リバースプロキシにする。
devd -o http://localhost:8888
リバースプロキシでかつライブリロードもする(-l
だとライブリロードが効かなかった)。
devd -ow src/ http://localhost:8888
-s
をつければ https になる。
devd -os http://localhost:8888
ルートの書き方
↑でプロキシを指定した部分にはルーティングを書くことができます。
ルーティングには下記のようなルートを複数指定できます。root
はリクエストされたURLで、endpoint
は解決されるリソースというかエンドポイントというか実体です。
root=endpoint
root には、/favicon.ico
のような特定のファイル名か、/images/
のようなディレクトリ(終端に /
が必要)を指定することが出来ます。
endpoint にはファイルシステム上のパスや URL を指定できます。
例えば、次のルートだと /assets/
へのリクエストはカレントディレクトリの static/
にマップされます。
devd /assets/=./static/
root が /
から始まらない場合、最初の /
まではサブドメインになります。例えば、次のルートだと http://subdomain.devd.io/images/
がカレントディレクトリの images/
にマッピングされます。
devd subdomain/images/=images/
endpoint に URL を指定するとリバースプロキシになります。
例えば、次のルートだと http://app.devd.io
へのリクエストが http://localhost:8888
へマッピングされます。
devd app/=http://localhost:8888
root が省略された場合 /
になります。つまり、すべてのリクエストにマッチします。なので、下記の例だとすべてのリクエストがカレントディレクトリの ./static
にマップされます。
devd ./static
また、同様に下記もすべてのリクエストが http://localhost:8888
に転送されます。
devd http://localhost:8888
次のように複数を組み合わせて指定できます。
devd /=http://localhost:8888 \
/assets/=./static \
api=http://localhost:9999
リバースプロキシについて
リバースプロキシは上流の SSL 証明書を検証しません。
上流には転送先の Host ヘッダが渡されます(devd.io
とかではなく)。元の Host ヘッダ(devd.io
とか)は X-Forwarded-Host
ヘッダで上流に渡されます。
Windows での問題?
Windows で監視ディレクトリを .
にするとエラーになりました。
$ devd -ol .
devd: error: Could not watch routes for livereload: The filename, directory name, or volume label syntax is incorrect.
cortesi/devd #25によると Windows 10 では発生しないらしいですけど。
次のように .\
と指定すればとりあえず大丈夫でした。
$ devd -ol .\
20:54:42: Listening on http://devd.io (127.0.0.1:80)
20:54:43: GET /
<- 200 OK 4.3kB
さいごに
似たようなツールはいろいろあると思います。わたしは browser-sync をよく使っていました。が、devd はリバースプロキシとかのルーティングの設定をコマンドラインだけでフレキシブルに書けるのが便利そうです。