はじめに
Go言語はシンプルかつ効率的なプログラミング言語であり、特にサーバーサイド開発において非常に人気があります。本記事では、GoのWebフレームワークであるGinを使った環境をDockerで構築する方法を解説します。Ginを使うことで、Goのパフォーマンスを最大限に引き出しつつ、シンプルなWebアプリケーションの作成が可能です。
また、Dockerを使うことで、Goの環境構築が効率的になり、アプリケーションを簡単にデプロイできるようになります。今回は、Hello World
を返す基本的なAPIを構築し、Dockerで動かす方法を紹介します。
ファイル構成
まずはプロジェクトのファイル構成を確認しましょう。
.
├── app
│ ├── go.mod
│ ├── go.sum
│ └── main.go
├── Dockerfile
├── docker-compose.yml
└── README.md
- appフォルダ:Goのソースコードを格納。
- Dockerfile:Dockerイメージをビルドするための設定ファイル。
- docker-compose.yml:コンテナの構成を管理するファイル。
- README.md:プロジェクトの説明や使い方などを記載するファイル(今回は省略)。
Dockerfileの作成
まずは、GoのアプリケーションをDocker上で動かすためのDockerfileを作成します。Dockerfileは、Goの公式Dockerイメージを基に、アプリケーションをビルド・実行します。
# 1. Goのバージョンを指定
FROM golang:1.18
# 2. 必要なパッケージをインストール
RUN apt-get update && apt-get install -y git
# 3. 作業ディレクトリを設定
WORKDIR /go/src/app
# 4. ホストマシンからアプリケーションファイルをコンテナにコピー
COPY ./app .
# 5. Goアプリケーションを実行
CMD ["go", "run", "."]
解説
- FROM golang:1.18:Go言語の公式イメージを使っています。このバージョンは必要に応じて変更できます。
- RUN apt-get update:Gitなどの依存パッケージをインストールします。
- WORKDIR:作業ディレクトリを
/go/src/app
に設定します。アプリケーションコードはここに配置されます。 - COPY:ホストマシンの
app
フォルダの内容をコンテナ内にコピーします。 - CMD:コンテナが起動するときに実行するコマンドです。
go run
でアプリケーションを実行します。
docker-compose.ymlの作成
Docker Composeを使うことで、アプリケーションを簡単にビルド・起動できるようにします。docker-compose.ymlを作成し、複数のコンテナをまとめて管理できるようにしておくと便利です。
version: "3"
services:
app:
container_name: ir-backend # コンテナの名前を指定
build:
context: .
dockerfile: ./Dockerfile
tty: true # コンテナを終了させない
volumes:
- ./app:/go/src/app # ホストのappフォルダをコンテナにマウント
ports:
- 8080:8080 # ローカルホストとコンテナのポートをバインド
解説
- services:Docker Composeで管理するサービスの定義です。
app
はGoアプリケーションのサービスを定義しています。 - volumes:ホストマシンの
app
フォルダをコンテナ内にマウントします。これにより、ファイルの変更がリアルタイムでコンテナに反映されます。 - ports:ホストマシンのポート8080とコンテナ内のポート8080をバインドします。これでブラウザから
localhost:8080
にアクセスできるようになります。
Goモジュールの初期化とGinのインストール
Goモジュールの初期化
Goモジュールは、Goの依存関係を管理するための仕組みです。app
ディレクトリ内でモジュールを初期化します。
mkdir -p ./app
cd ./app
go mod init helloworld
これにより、go.mod
ファイルが作成され、依存関係が管理できるようになります。
Ginのインストール
Ginは、Goで非常に人気のあるWebフレームワークです。Ginをインストールするためには、以下のコマンドを実行します。
go get -u github.com/gin-gonic/gin
これで、Ginの依存関係がプロジェクトに追加されます。
Goアプリケーションの作成
次に、Goのアプリケーションを作成します。今回は、Hello World
をJSON形式で返す簡単なAPIを作成します。
main.go
以下のコードをmain.go
に記述します。
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
// Ginのルーターを作成
router := gin.Default()
// ルートエンドポイントを定義し、Hello Worldを返す
router.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello World",
})
})
// ポート8080でサーバーを起動
router.Run(":8080")
}
解説
- gin.Default():Ginのデフォルトのルーターを作成します。
- router.GET(“/”):
GET
リクエストに対して、Hello World
のメッセージをJSON形式で返します。 - router.Run(“:8080”):サーバーをポート8080で起動します。
アプリケーションのビルドと実行
すべてのファイルが揃ったら、以下のコマンドでDockerコンテナをビルドし、アプリケーションを実行します。
docker compose up --build
コンテナがビルドされ、アプリケーションが起動します。ブラウザでhttp://localhost:8080
にアクセスすると、以下のJSONデータが返されます。
{
"message": "Hello World"
}
これで、Ginを使ったGoのWebアプリケーションをDocker環境で動かすことができました。
まとめ
今回の記事では、Dockerを使ってGo言語(Gin)の環境を構築し、簡単なAPIを作成する手順を解説しました。Dockerを使うことで、ローカル環境に依存せず、再現性のある開発環境を構築できます。また、将来的にはデータベースとの連携やテスト環境の整備も行えるようになります。
この記事のポイント
- Dockerfileとdocker-compose.ymlを使ったGo環境の構築。
- Goモジュールの初期化と、Ginフレームワークのインストール方法。
Hello World
を返すシンプルなAPIの実装。- Dockerコンテナを使ってアプリケーションを起動し、Webアクセスを確認。
コメント