「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で Ginv1.12.0をインストールできる(実測)- Gin の最小構成は
gin.Default()→r.GET()→r.Run()の3行だけ - JSON レスポンスは
c.JSON(200, gin.H{...})で返せる - 本記事のコマンドは Ubuntu 24.04 LTS(Docker公式イメージ)で実際に検証した結果を掲載しています
目次
- Gin とは何か — Go の Web フレームワーク比較
- 前提環境と Ubuntu 別 Go バージョン
- STEP 1:Go をインストールする
- STEP 2:Gin をインストールする
- STEP 3:Hello World サーバーを作って動かす
- STEP 4:ルーティングの基本(GET / POST / パスパラメータ)
- STEP 5:JSON レスポンスを返す
- よくあるエラーと解決策
- まとめ
動作確認環境
本記事のコマンドは 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 の主な特徴は以下の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(Jammy)の apt では go1.18.1(パッケージ名 2:1.18~0ubuntu2)が候補として提示されました。Ubuntu 24.04(Noble)では go1.22.2(2: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:パッケージリストを更新する
Get:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
Reading package lists… Done
apt update を忘れがちですが、これをやらないとパッケージの候補が古いままになります。
手順2: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 から公式バイナリをダウンロードします。

$ 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 を作る
$ go mod init ginapp
go: creating new go.mod: module ginapp
go mod init ginapp は go.mod ファイルを作るコマンドです。ginapp はモジュール名で、自分のプロジェクト名や GitHub のパス(例: github.com/yourname/ginapp)を入れるのが一般的です。
手順2:go get で Gin を取得する
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

Ubuntu 24.04 の Docker コンテナで実際に実行した結果です。github.com/gin-gonic/gin v1.12.0 が取得されました。Gin は bytedance/sonic(高速 JSON エンコーダ)や quic-go、protobuf などの依存パッケージも一緒にダウンロードします。
STEP 3:Hello World サーバーを作って動かす
Gin でシンプルな HTTP サーバーを動かしてみましょう。main.go を作って go run するだけです。
手順1:main.go を作成する
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 で起動する
[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 で動作確認
{“message”:”Hello, Gin!”}

{"message":"Hello, Gin!"} が返ってきたら成功です。gin.Default() は Logger と Recovery ミドルウェアが最初から組み込まれているので、アクセスログが自動的に表示されます。
STEP 4:ルーティングの基本(GET / POST / パスパラメータ)
Gin でよく使うルーティングのパターンをまとめます。
① GET / POST
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の一部を変数として受け取る)
id := c.Param(“id”)
c.JSON(200, gin.H{“user_id”: id})
})
$ curl http://localhost:8080/user/42
{“user_id”:”42″}
③ クエリパラメータ(?key=value)
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.H(map[string]any のエイリアス)を使うのが一番シンプルです。
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」
main.go:3:8: cannot find module providing package github.com/gin-gonic/gin
原因:go get を実行する前に go mod init をしていないか、go.mod が存在しないディレクトリで実行している。
対処:プロジェクトのルートディレクトリで以下を順番に実行してください。
$ go get github.com/gin-gonic/gin@latest
$ go run main.go
②「bind: address already in use」
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 を実行すると自動的に解決します。
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 init→go get github.com/gin-gonic/gin@latestで Ginv1.12.0をインストールできる- Gin の最小構成は
gin.Default()→r.GET()→r.Run(":8080")の3行 - JSON は
c.JSON(200, gin.H{...})、パスパラメータはc.Param()、クエリはc.DefaultQuery()で取れる - エラーが出たら
go mod tidyとgo mod initの実行順序を確認する
Go + Gin で API サーバーを作ったら、次は VPS に本番デプロイしてみましょう。本格的なサーバー運用を始めるなら、コストパフォーマンスの高い VPS が必要です。




コメント