Posted at

Goのサーバーをソースを変更したら自動でリロードするMakefile

More than 1 year has passed since last update.

Goのサーバー開発中にはソースコードを変更したら自動でサーバーが再起動して最新のコードが反映されると素早い開発が可能になり便利です。

Javaのアプリケーション・サーバーなどによく実装されているオートリロードという奴です。サーバーのフレームワークによっては標準で用意されている場合もあるようですが、Goの多くのフレームワークではオートリロードは用意されていません。そこで、Makefileとfswatchでオートリロードを実現したものがこちらです。

fswatchがインストールされていなければbrewなどでインストールしてもらう必要があります。

こちらの記事のコードをベースに修正を加えたものです。

https://medium.com/@olebedev/live-code-reloading-for-golang-web-projects-in-19-lines-8b2e8777b1ea

.PHONY: server restart kill clean

APP = bin/server
GO_FILES = $(wildcard **/*.go)
PID = /tmp/go-server.pid
MAIN = api/main.go

serve: restart
@fswatch -e ".*" -i "\\.go$$" . | xargs -n1 -I{} make restart || make kill

restart: clean kill $(APP)
@$(APP) & echo $$! > $(PID)

kill:
@kill `cat $(PID)` 2> /dev/null || true

$(APP): $(GO_FILES)
@echo "build..."
@go build -o $@ $(MAIN)

clean:
@rm $(APP) || true

と、ここまで書いておいてなんですが、下記のツールを使ったほうが早いかも。。。

あんまりメンテされていないではありますが色々設定できて便利そうです。

https://github.com/pilu/fresh