よしかわーるど

プログラミングで世界を変える

2019年3月29日にやったこと

やったこと

Makefileの修正を行った.

docker-composeのMySQLコンテナでエラーが出るので, 修正を行った.

depからgo moduleに変更した.

内容

make だけでコンテナが起動し, データベースの作成, テーブルの作成を終わらせるようにしました.

GOCMD=go
GORUN=$(GOCMD) run
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test
GOGET=$(GOCMD) get
GODOC=$(GOCMD)doc
COMPOSE=docker-compose
EXEC=$(COMPOSE) exec
BUILD=$(COMPOSE) build
UP=$(COMPOSE) up -d
LOGS=$(COMPOSE) logs
STOP=$(COMPOSE) stop
RM=$(COMPOSE) rm
DOWN=$(COMPOSE) down
API=$(EXEC) api
DB=$(EXEC) db
REACT=$(EXEC) react
DBNAME:=fieldsensing
TESTDBNAME:=test_fieldsensing
MYSQL:=mysql --defaults-extra-file=/home/access.cnf

all: docker/up migrate/init migrate/up ## docker up & migrate

front: docker/up npm/install ## docker up & npm install

migrate/init: ## migrate init
  $(DB) /home/wait.sh
  $(DB) $(MYSQL) -e "create database if not exists \`$(DBNAME)\`"

migrate/test-init: ## migrate test database init
  $(DB) /home/wait.sh
  $(DB) $(MYSQL) -e "create database if not exists \`$(TESTDBNAME)\`"

migrate/up: ## migrate up
  $(API) goose up

migrate/down: ## migrate down
  $(API) goose down

docker/build: ## docker build
  $(BUILD)

docker/up: ## docker up
  $(UP)

docker/logs: ## docker logs
  $(LOGS)

docker/stop: ## docker stop
  $(STOP)

docker/clean: ## docker clean
  $(RM)

docker/down: ## docker down
  $(DOWN)

api/bash: ## api container bash
  $(API) bash

react/bash: ## react container bash
  $(REACT) bash

db/bash: ## db(MySQL) container bash
  $(DB) bash

npm/install: ## npm install
  $(REACT) npm install

npm/watch: ## npm watch
  $(REACT) npm run watch

npm/build: ## npm build
  $(REACT) npm run build

run: ## go run main.go
  $(API) $(GORUN) main.go

test: ## go test
  $(API) $(GOTEST) -v ./...

doc: ## godoc http:6060
  $(GODOC) -http=:6060

help: ## Display this help screen
   @grep -E '^[a-zA-Z/_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'

DBコンテナが完璧に起動しないとエラーが出るので, 以下のShell Scriptを実行しています.

#!/bin/sh
ESC="\e["
ESCEND=m
COLOR_OFF=${ESC}${ESCEND}
maxcounter=45

counter=1
echo "Waiting for MySQL"
while ! mysql --protocol TCP -uroot -p"$MYSQL_ROOT_PASSWORD" -e "show databases;" > /dev/null 2>&1; do
    sleep 1
    printf "."
    counter=`expr $counter + 1`
    if [ $counter -gt $maxcounter ]; then
        >&2 echo "We have been waiting for MySQL too long already; failing."
        exit 1
    fi;
done
echo "${ESC}32${ESCEND}"
echo "\nMySQL ready!!"
echo "${COLOR_OFF}"

go modules でライブラリの管理を始めました.

コンテナとdepの相性が悪かったので安心して導入できました.

export GO111MODULE=on