目的
業務でもGoを使う機会がありそうだし、本格的にフリーな時間を使って触ることにする。
せっかくならフロントもTypescriptを使って考えてみたいけどそれは別の話とする。
目標
業務でいろいろ調べものをよくするからGithub REST API活用したなんかを作ることを目指す。
フレームワークはGinでもよかったが、echoに挑戦する
この記事で目指すこと
バックエンドをGo、DBはMySQLの開発環境を作る。
個人的にはDockerが扱いやすいのでDockerで用意する。
開発環境の用意
初期作業
ネットを探せば見つかるだろうが、せっかくなので1からつくる
実はGoのコンテナを用意するのは少し面倒(何回か作ったのでなれてきてはいる)
STEP1 docker-compose.ymlおよびDockerFileの用意
STEP1でのフォルダ構成以下のようになる
.
├── echo/
│ └── Dockerfile
└── docker-compose.yml
用意するdocker-compose.ymlはGo絡みの作業を優先するのでまずは以下の内容で用意
version: '3'
services:
go_echo:
container_name: go_echo
build:
context: ./echo/
volumes:
- ./echo:/go/src/app
tty: true
environment:
- TZ=Asia/Tokyo
Dockerfileも簡潔に用意する。作業時にはv1.20がリリースされているのでせっかくなのでこちらを使う
FROM golang:1.20-alpine
RUN apk update && apk add git
RUN mkdir ./app
WORKDIR /go/src/app
準備ができたらdocker-compose.ymlの場所でコマンドを実行
docker-compose up
起動したらコンテナの中に入る
docker exec -it go_echo /bin/bash(Windowsだとshの可能性あり)
コンテナ内でGoの初期化コマンドを実行する
go mod init app
実行結果として
go: creating new go.mod: module app
がでればOKです。
これで作業用のGoプロジェクトの準備が完了です
STEP2 MySQLの用意
続いて、MySQLをDocker環境内に用意する。
フォルダ構成は次のようになる。
.
├── database/(new)
├── echo/
│ ├── go.mod
│ └── Dockerfile
└── docker-compose.yml
dockedr-compose.ymlにMySQLのサービスを追加
version: '3'
services:
go_echo:
container_name: go_echo
build:
context: ./echo/
volumes:
- ./echo:/go/src/app
tty: true
environment:
- TZ=Asia/Tokyo
go_echo_db:
image: mysql:5.7
container_name: mysql_host
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: echo
MYSQL_USER: docker
MYSQL_PASSWORD: docker
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./database/data:/var/lib/mysql
ports:
- 3306:3306
dockerが起動しているときは再起動、起動していなければ起動を行う
docker-compose up
用意したdatabaseフォルダ内にファイルがたくさん作成されれば成功
これは、MySQLのDB情報を永続化させているため、初期軌道したときにMySQLの初期処理でファイルが用意されるため
環境構築はこれで完了!!
終わりに
今回は環境構築でDocker環境を用意しただけ
次からは本格的なecho周りの設定を行う