1
1

Dockerで環境構築(GIN(GO)+Air)

Last updated at Posted at 2024-02-23

はじめに

初めまして!
エンジニアになって数年、今まで本を読むだけでしたが、もっとプライベートで楽しみながら成長したい!自分が学んだ足跡を残していきたい!と思い記事をかきました!
最終的には自在に開発できるようになりたいと思っています。:triumph:
いろいろな記事を参考にさせてもらっています。:bow_tone2:
その中でもこれってどういう意味?とかつまづいたところを念入りに書いていこうかと思います。:fist:

今回の目的

友人と進めているアプリ開発でGINを使おうって話が上がりました!折角だからDockerで立ち上げたろう、と思ったのでイチからどう進めていったか書いていきます!

作成した環境

使用したものや事前準備

・Macbook Pro
・GIN(GO)
・Air
・Docker

主に参考にさせていただいた記事

検証:GOプロジェクト作成

まず、コンテナを起動して、Bashでシェルセッションを開始します。

docker run -it --rm golang:latest /bin/bash

プロジェクトを作成するためにホームディレクトリへ移動します。

cd

スクリーンショット 2024-02-23 8.13.23.png

ディレクトリを作成し移動します。

mkdir hello
cd hello

依存関係を管理してくれるgo.modファイルを作成します。
作成したいディレクトリ配下でinitを実行します。(検証なのでモジュールパスはexampleです。)

 go mod init example/hello 

go.modファイルの中を確認するとモジュールパスも記載されていることがわかります。

スクリーンショット 2024-02-23 8.30.27.png

実行用にhello.goファイルを作成します。
vimが入っていないと思うのでまずはそこから

apt update
apt install -y vim

vimを実行し下記のソースを貼り付けます。

vim hello.go
package main 

import "fmt" 

func main() { 
    fmt.Println("Hello, World!") 
}

実行してみましょう。

go run .

下記のように表示されていればOKです。

スクリーンショット 2024-02-23 8.38.39.png

外部パッケージのインポートも試してみます。
hello.goを下記のソースで上書きしましょう。

package main

import "fmt"

import "rsc.io/quote"

func main() {
    fmt.Println(quote.Go())
}

依存関係を更新

go mod tidy

ちゃんと依存関係に含まれていることと実行できることを確認できました。

スクリーンショット 2024-02-23 8.43.41.png

GOプロジェクトの作成は理解できたので、exitで抜けてコンテナは削除します。

検証:GINプロジェクト作成

まっさらな状態になったところで次はGINプロジェクトの作成です。
下記コマンドを実行してください。

docker run -it --rm -p 8080:8080 golang:latest /bin/bash 

プロジェクトファイルを作成します。

mkdir -p $GOPATH/src/github.com/myusername/project && cd "$_"

サンプルの実行ファイルを取得しましょう。

curl https://raw.githubusercontent.com/gin-gonic/examples/master/basic/main.go > main.go

スクリーンショット 2024-02-23 9.31.20.png

go.modを生成します。

go mod init github.com/myusername/project

依存関係を更新します。

go mod tidy

実行して、アクセスしてみましょう。
http://localhost:8080/

go run main.go

接続を確認できました。(ソース実行は後半でやります)

スクリーンショット 2024-02-23 9.34.38.png

スクリーンショット 2024-02-23 9.35.12.png

本題:compose.ymlを作成して環境構築

今までの過程を通して、compose.ymlに実行内容を落とし込んでいきます。
単純に立ち上げるとホットリロードではないため、毎回コンテナをリスタートしなければいけなくなります。
面倒なのでAirも入れます。

version: '3'
services:
 golang:
  #プロジェクトを新規作成したい時はコメントアウトのコマンドを実行
  #docker compose run golang \
  #bash -c "curl https://raw.githubusercontent.com/gin-gonic/examples/master/basic/main.go > main.go \
  #&& go mod init github.com/takizawa0548/project \
  #&& go mod tidy"
  image: golang:latest
  ports:
   - 8080:8080
  volumes:
   - ./app:/go/src/github.com/takizawa0548/project
  working_dir: /go/src/github.com/takizawa0548/project
  command: bash -c "go install github.com/cosmtrek/air@latest && go mod tidy && air"

プロジェクト作成のコマンドです。(長いので正直あまり良くないと思いますがいい方法が思いつきませんでした。)
compose.ymlのあるフォルダで実行します。

docker compose run golang \
bash -c "curl https://raw.githubusercontent.com/gin-gonic/examples/master/basic/main.go > main.go \
&& go mod init github.com/takizawa0548/project \
&& go mod tidy"

コンテナを立ち上げます。

docker compose up

値が返ってくるかも含めて確認します。
http://localhost:8080/ping

ソースの実行も確認ができました。

スクリーンショット 2024-02-23 10.25.45.png

スクリーンショット 2024-02-23 10.21.25.png

値も変えてみましょう。

スクリーンショット 2024-02-23 10.58.48.png

更新します。変更されたことを確認できました!
スクリーンショット 2024-02-23 10.59.22.png

最後に

これでいいのかは、もっと開発しないとわからないですがとりあえずGINプロジェクトを作成できました!
次はつなぎ込みとかできたらなと思います・・・!

次のお話

編集中・・・

1
1
0

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
1
1