goで開発しているとコード変更のたびにビルドするのが面倒くさいので
realizeを使ってライブリロードしてサクサクコーディングできるように環境構築した時の設定をメモっておいてます。
パッケージ構造
.
├── api/
│ └── main.go
├── .realize.yaml
├── docker-compose.yml
└── Dockerfile
設定ファイル
Dockerfile
go get
でrealize
を取得しておきます。
またCMDにはrealize
の起動コマンドを設定しておきます。
FROM golang:1.13
RUN go get github.com/oxequa/realize
EXPOSE 8080
CMD [ "realize", "start", "--run" ]
docker-compose.yml
.realize.yaml
が配置されているディレクトリをworking_dir
に設定しておきます。
今回はdocker-compose.yml
と同じディレクトリに配置したので、volumesに設定したディレクトと同じ場所を指定しています。
version: "3"
services:
go:
build: .
ports:
- 8080:8080
volumes:
- ./:/app
working_dir: /app
.realize.yaml
realize
の設定ファイルです。
拡張子はyml
じゃなくてyaml
です!
ググると出てくるこちらの記事 → Realize が Go 1.11 の Modules で使えない に書いてありますが
realizeはGo Modulesに対応していないようで、issueの解決策にあるようにcommand
にちょっと設定が必要になります。
settings:
legacy:
force: false
interval: 0s
schema:
- name: api
path: api
commands:
build:
status: true
method: go build -o /go/bin/api
run:
status: true
method: /go/bin/api
watcher:
extensions:
- go
paths:
- /
ignored_paths:
- .git
- .realize
動作確認
テスト用のコード
api/main.go
は以下のようなSampleを出力するだけのAPIを用意します。
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Sample")
})
http.ListenAndServe(":8080", nil)
}
確認①
起動すると以下のようなログが出ます
$ docker-compose up
〜〜〜 略 〜〜〜
go_1 | [15:11:08][API] : Watching 1 file/s 1 folder/s
go_1 | [15:11:08][API] : Build started
go_1 | [15:11:10][API] : Build completed in 2.703 s
go_1 | [15:11:10][API] : Running..
この状態でlocalhost:8080を叩くとSample
が出力されます
$ curl http://localhost:8080
Sample
とりあえずAPIが動いていることが確認できました。
確認②
続けてテスト用のコードを編集して保存してみます。
(fmt.Fprintf()
をSample -> HogeHogeに変更しただけ)
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "HogeHoge")
})
http.ListenAndServe(":8080", nil)
}
保存すると以下のようにログが出力されます。
変更されたファイルが表示され、自動でビルドされているのがわかります。
go_1 | [15:16:18][API] : GO changed /app/api/main.go
go_1 | [15:16:18][API] : Build started
go_1 | [15:16:19][API] : Build completed in 1.777 s
go_1 | [15:16:19][API] : Running..
この状態でlocalhost:8080を叩くと変更後のHogeHoge
が出力されました。
$ curl http://localhost:8080
HogeHoge