Go Gin on Ubuntu — GolangのWebフレームワーク開発環境構築

開発環境

「UbuntuにGoのWebアプリを作りたいけど、どのフレームワークを使えばいいのか……」という疑問をよく聞きます。Go の Web フレームワークの中でもGin は圧倒的にシンプルで高速なのが特徴で、初めての Go Web 開発にもちょうどいい選択肢です。

本記事では Ubuntu 24.04 LTS の Docker 公式イメージで実際にコマンドを実行し、Go のインストールから Gin を使った Hello World サーバーの起動まで、一通りの手順を解説します。Ubuntu 24.04 の apt では go1.22.2 が入ること、Gin の最新版は v1.12.0 であることを実際に確認しました。

この記事のポイント

  • Ubuntu 24.04 で apt install golang-go をすると go1.22.2 が入る(22.04 なら go1.18.1
  • go get github.com/gin-gonic/gin@latest で Gin v1.12.0 をインストールできる(実測)
  • Gin の最小構成は gin.Default()r.GET()r.Run() の3行だけ
  • JSON レスポンスは c.JSON(200, gin.H{...}) で返せる
  • 本記事のコマンドは Ubuntu 24.04 LTS(Docker公式イメージ)で実際に検証した結果を掲載しています

目次

  1. Gin とは何か — Go の Web フレームワーク比較
  2. 前提環境と Ubuntu 別 Go バージョン
  3. STEP 1:Go をインストールする
  4. STEP 2:Gin をインストールする
  5. STEP 3:Hello World サーバーを作って動かす
  6. STEP 4:ルーティングの基本(GET / POST / パスパラメータ)
  7. STEP 5:JSON レスポンスを返す
  8. よくあるエラーと解決策
  9. まとめ

動作確認環境

本記事のコマンドは Ubuntu 24.04.4 LTS(Docker公式イメージ ubuntu:24.04)で検証しています。Ubuntu 22.04 でも基本的な手順は同じですが、apt で入る Go のバージョンが go1.18.1 になります。

Gin とは何か — Go の Web フレームワーク比較

Gin(ジン)は Go 製の軽量 Web フレームワークです。GitHub のスター数は5万を超えており、Go の Web フレームワークの中では最も広く使われています。

gin-gonic/gin GitHub リポジトリ(Playwright 実撮影 2026-06-14)
gin-gonic/gin GitHub リポジトリ(Playwright 実撮影 2026-06-14)

Gin の主な特徴は以下の3点です。

  • httprouter ベースの高速ルーター(net/http 標準に比べて大幅に高速)
  • JSON のバリデーションとバインディングが標準で充実
  • ミドルウェアチェーンが書きやすい(ロギング・リカバリーが最初から組み込まれている)

「Golang Web フレームワーク どれ使う?」と悩んでいる人には、まず Gin を試してみることをおすすめします。シンプルな HTTP サーバーならネイティブの net/http でも書けますが、ルーティングやミドルウェアを自前で書くのは大変です。正直、Gin を使った方が数段楽です。

前提環境と Ubuntu 別 Go バージョン

Gin をインストールする前に、Ubuntu のバージョンによって apt で入る Go のバージョンが異なることを確認しておきましょう。実際に Docker コンテナで apt-cache policy golang-go を実行して調べました。

Ubuntu 22.04 vs 24.04 golang-go バージョン比較(実測 2026-06-14)
Ubuntu 22.04 vs 24.04 golang-go バージョン比較(実測 2026-06-14)

Ubuntu 22.04(Jammy)の apt では go1.18.1(パッケージ名 2:1.18~0ubuntu2)が候補として提示されました。Ubuntu 24.04(Noble)では go1.22.22:1.22~2build1)です。

go1.18.x は2022年リリースで Go Generics が追加された世代です。Gin は go1.18 以降をサポートしているので、Ubuntu 22.04 の apt 版でも Gin を動かすことはできます。ただし go.dev の最新版(go1.24.4)との差は大きく、本格的な開発をするなら公式バイナリのインストールを検討してください

Ubuntu バージョン apt 版 Go Gin 動作 推奨度
24.04 LTS (Noble) go1.22.2 OK ★★★★☆
22.04 LTS (Jammy) go1.18.1 OK(Gin は go1.18 対応) ★★★☆☆
24.04 + 公式バイナリ go1.24.4 OK(最新機能使用可) ★★★★★

STEP 1:Go をインストールする

まず Go 本体を Ubuntu に入れます。ここでは apt 版(手軽・go1.22.2)で進めます。最新版が必要な場合は後述の公式バイナリ方式を選んでください。

手順1:パッケージリストを更新する




ubuntu@linuxlab: ~
$ sudo apt update
Get:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
Reading package lists… Done

apt update を忘れがちですが、これをやらないとパッケージの候補が古いままになります。

手順2:golang-go をインストールする




ubuntu@linuxlab: ~
$ sudo apt install -y golang-go
Reading package lists… Done
The following NEW packages will be installed:
golang-go golang-1.22-go golang-1.22-src golang-src …
Setting up golang-go:amd64 (2:1.22~2build1) …
$ go version
go version go1.22.2 linux/amd64

go version go1.22.2 linux/amd64 と表示されれば成功です。Ubuntu 24.04 で実際に確認した出力です。

(任意)公式バイナリで go1.24.4 をインストールする

最新版(go1.24.4)が必要な場合は、go.dev から公式バイナリをダウンロードします。

go.dev/dl ダウンロードページ(Playwright 実撮影 2026-06-14)
go.dev/dl ダウンロードページ(Playwright 実撮影 2026-06-14)



ubuntu@linuxlab: ~
$ wget https://dl.google.com/go/go1.24.4.linux-amd64.tar.gz -O /tmp/go.tar.gz
$ sudo rm -rf /usr/local/go
$ sudo tar -C /usr/local -xzf /tmp/go.tar.gz
$ echo ‘export PATH=$PATH:/usr/local/go/bin’ >> ~/.bashrc
$ source ~/.bashrc
$ go version
go version go1.24.4 linux/amd64

注意:sudo rm -rf は慎重に

sudo rm -rf /usr/local/go は Go のインストールディレクトリを丸ごと削除します。実行前に ls /usr/local/go でディレクトリの中身を確認してください。

STEP 2:Gin をインストールする

Go が入ったら、次はプロジェクトを作って Gin をインストールします。Go 1.11 以降は go mod(Go Modules)を使うのが標準です。

手順1:プロジェクトディレクトリと go.mod を作る




ubuntu@linuxlab: ~
$ mkdir ginapp && cd ginapp
$ go mod init ginapp
go: creating new go.mod: module ginapp

go mod init ginappgo.mod ファイルを作るコマンドです。ginapp はモジュール名で、自分のプロジェクト名や GitHub のパス(例: github.com/yourname/ginapp)を入れるのが一般的です。

手順2:go get で Gin を取得する




ubuntu@linuxlab: ~/ginapp
$ go get github.com/gin-gonic/gin@latest
go: downloading github.com/gin-gonic/gin v1.12.0
go: downloading golang.org/x/net v0.51.0
go: downloading google.golang.org/protobuf v1.36.10
go: added github.com/gin-gonic/gin v1.12.0
$ go list -m github.com/gin-gonic/gin
github.com/gin-gonic/gin v1.12.0
Gin v1.12.0 インストールログ(ubuntu:24.04 実測 2026-06-14)
Gin v1.12.0 インストールログ(ubuntu:24.04 実測 2026-06-14)

Ubuntu 24.04 の Docker コンテナで実際に実行した結果です。github.com/gin-gonic/gin v1.12.0 が取得されました。Gin は bytedance/sonic(高速 JSON エンコーダ)や quic-goprotobuf などの依存パッケージも一緒にダウンロードします。

著者アイコン
著者アイコン

go get のダウンロードは初回だけで、2回目以降はキャッシュが効くので速いです。モジュールキャッシュは $GOPATH/pkg/mod/ に入ります。

STEP 3:Hello World サーバーを作って動かす

Gin でシンプルな HTTP サーバーを動かしてみましょう。main.go を作って go run するだけです。

手順1:main.go を作成する




ubuntu@linuxlab: ~/ginapp
$ cat > main.go << ‘EOF’
package main

import “github.com/gin-gonic/gin”

func main() {
r := gin.Default()
r.GET(“/”, func(c *gin.Context) {
c.JSON(200, gin.H{“message”: “Hello, Gin!”})
})
r.Run(“:8080”)
}
EOF

手順2:go run で起動する




ubuntu@linuxlab: ~/ginapp
$ go run main.go
[GIN-debug] [WARNING] Creating an engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] GET / –> main.main.func1 (3 handlers)
[GIN-debug] Listening and serving HTTP on :8080

手順3:別のターミナルから curl で動作確認




ubuntu@linuxlab: ~(別タブ)
$ curl http://localhost:8080/
{“message”:”Hello, Gin!”}
Gin Hello World の main.go と実行例(illustrative)
Gin Hello World の main.go と実行例(illustrative)

{"message":"Hello, Gin!"} が返ってきたら成功です。gin.Default() は Logger と Recovery ミドルウェアが最初から組み込まれているので、アクセスログが自動的に表示されます。

STEP 4:ルーティングの基本(GET / POST / パスパラメータ)

Gin でよく使うルーティングのパターンをまとめます。

① GET / POST




main.go の抜粋
r.GET(“/ping”, func(c *gin.Context) {
c.JSON(200, gin.H{“message”: “pong”})
})
r.POST(“/login”, func(c *gin.Context) {
username := c.PostForm(“username”)
c.JSON(200, gin.H{“user”: username})
})

② パスパラメータ(URLの一部を変数として受け取る)




main.go の抜粋
r.GET(“/user/:id”, func(c *gin.Context) {
id := c.Param(“id”)
c.JSON(200, gin.H{“user_id”: id})
})
$ curl http://localhost:8080/user/42
{“user_id”:”42″}

③ クエリパラメータ(?key=value)




main.go の抜粋
r.GET(“/search”, func(c *gin.Context) {
q := c.DefaultQuery(“q”, “golang”)
c.JSON(200, gin.H{“query”: q})
})
$ curl “http://localhost:8080/search?q=gin”
{“query”:”gin”}

STEP 5:JSON レスポンスを返す

API サーバーとして使う場合、JSON レスポンスの返し方を覚えておく必要があります。Gin では gin.Hmap[string]any のエイリアス)を使うのが一番シンプルです。




ubuntu@linuxlab: ~/ginapp
// gin.H を使う(シンプルな場合)
c.JSON(200, gin.H{“status”: “ok”, “count”: 42})

// 構造体を使う(型安全にしたい場合)
type Response struct {
Status string `json:”status”`
Count int `json:”count”`
}
c.JSON(200, Response{Status: “ok”, Count: 42})

c.JSON() の第一引数は HTTP ステータスコードです。200(OK)のほか、400(Bad Request)、404(Not Found)、500(Internal Server Error)などを適宜使います。

Gin のレスポンスメソッド 用途
c.JSON() JSON レスポンス c.JSON(200, gin.H{"ok": true})
c.String() テキストレスポンス c.String(200, "Hello")
c.HTML() HTML テンプレート c.HTML(200, "index.html", gin.H{})
c.Redirect() リダイレクト c.Redirect(301, "/new")

よくあるエラーと解決策

①「cannot find module providing package github.com/gin-gonic/gin」




ubuntu@linuxlab: ~/ginapp
$ go run main.go
main.go:3:8: cannot find module providing package github.com/gin-gonic/gin

原因go get を実行する前に go mod init をしていないか、go.mod が存在しないディレクトリで実行している。

対処:プロジェクトのルートディレクトリで以下を順番に実行してください。




ubuntu@linuxlab: ~/ginapp
$ go mod init ginapp
$ go get github.com/gin-gonic/gin@latest
$ go run main.go

②「bind: address already in use」




ubuntu@linuxlab: ~/ginapp
$ go run main.go
listen tcp :8080: bind: address already in use

原因:8080 ポートを他のプロセスが使っている。

対処lsof -i :8080 で使用中のプロセスを確認して止めるか、Gin のポートを変更してください(r.Run(":8081"))。

③「go: updates to go.sum needed; to update it: go mod tidy」

go.sum の不整合が起きている状態です。go mod tidy を実行すると自動的に解決します。




ubuntu@linuxlab: ~/ginapp
$ go mod tidy
go: downloading …
$ go run main.go

まとめ

Ubuntu 24.04 に Go と Gin をインストールして Hello World サーバーを動かす手順を、実際に Docker コンテナで検証した結果とともに解説しました。

  • Ubuntu 24.04 の apt install golang-go では go1.22.2 が入る(22.04 なら go1.18.1
  • go mod initgo get github.com/gin-gonic/gin@latest で Gin v1.12.0 をインストールできる
  • Gin の最小構成は gin.Default()r.GET()r.Run(":8080") の3行
  • JSON は c.JSON(200, gin.H{...})、パスパラメータは c.Param()、クエリは c.DefaultQuery() で取れる
  • エラーが出たら go mod tidygo mod init の実行順序を確認する

Go + Gin で API サーバーを作ったら、次は VPS に本番デプロイしてみましょう。本格的なサーバー運用を始めるなら、コストパフォーマンスの高い VPS が必要です。

sysbench CPU ベンチ ubuntu:24.04 実測(参考値)
sysbench CPU ベンチ ubuntu:24.04 実測(参考値)

コメント

タイトルとURLをコピーしました