125
84

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Go3Advent Calendar 2018

Day 4

Goでサーバー開発するときのMakefileを晒してみる

Last updated at Posted at 2018-12-03

はじめに

この記事は、Go3 Advent Calendar の4日目の記事です。

Goで開発する際にはテストの実行やlintの実施といった細々としたコマンドを Makefile にまとめることが多いと思います。
これにはコマンド入力の手間を省くのももちろんですが、チーム内でコマンド実行の方法を統一するという意味もあります。「手元でのテストはReadmeに書いてある通りに実行してね」と伝えるよりも、Makefileにまとまってる方が親切です。

ということで、何番煎じか分かりませんが今回は業務で使っている Makefile を晒してみたいと思います。

ちなみに主に以下のツールを利用しています。

  • パッケージ管理: dep
  • 自動リロード: realize
  • DB migration管理: goose

Makefile

以下の物を使用しています。

setup:
	go get -u github.com/golang/dep/cmd/dep
	go get -u golang.org/x/lint/golint
	go get -u golang.org/x/tools/cmd/goimports
	go get -u bitbucket.org/liamstask/goose/cmd/goose
	go get -u github.com/oxequa/realize
	go get -u github.com/motemen/gore
	go get -u github.com/golang/mock/gomock
	go get -u github.com/golang/mock/mockgen
dep:
	dep ensure
lint:
	go tool vet app
	golint -set_exit_status app/...
fmt: lint
	goimports -w app
build: fmt lint
	go build -o dist/server app/server.go
run:
	realize start -n app-server
test:
	env ENV=test go test -cover -race -count=1 ./app/...
goose:
	goose up
	goose -env test up
setup-db: goose
	bin/mysql -T < db/dummy.sql

軽く解説

setup

setupでは開発に必要なcliツールのインストールをまとめてやっています。
depではこういった実行ツール系の依存を解決できないため、このプロジェクトで使うツールの一覧をまとめるという意味もあります。

fmt + lint

lint コマンドではgo vetとgolintによるコード解析をまとめて実施しています。分けて実施する意味もあまりないでしょうし。
fmtではgoimportsによるコードのformattingをしています。最初にlintを実施しているため、普段はmake fmtとやってlintingもformattingもまとめて実施しています。

test

testは何気に環境の指定やオプション指定などで暗黙知が生まれやすいコマンドだと思っています。
-raceなどは当然ciでもチェックしていますが、push前に手元でも見つけられるようにつけています。

ただしこのmake testコマンドはpush前の最終確認などで使うことが多く、開発中はvscodeやIDEの機能を使ってファイル単位でテストを走らせることが多いです。そのためどちらかというと利便性よりも網羅性側に切り倒して作っています。

run

開発中のhot reloadのためにrealizeを導入しています。ただし若干使い方が面倒なため、上のsetupでrealizeを導入しmake runコマンドで勝手に実行することで、新人さんなどがrealizeの存在を意識せず便利な開発環境が使えるようにしています。

終わりに

今回はプロジェクトで使用しているMakefileを晒してみました。
開発中に実行するコマンド類は暗黙知になりやすいため、出来るだけそのようなことが無いようにしていきたいと思います。

125
84
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
125
84

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?