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

  • 0
    Like
  • 0
    Comment

    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