こんにちは!
7月に入り、いよいよ夏本番ですね。
熱中症や夏バテに気をつけながら今年の夏も乗り切りたいですね!
さて、最近はGo言語の需要が増えてきているようで、私も扱えるようになりたいと思い、せっかくならWebアプリを開発してみることにしました。
Go言語とは?
Go言語とは、Googleが開発したシンプルかつ高速な処理が可能なプログラミング言語で、「YouTube」や「メルカリ」など、有名なサービスにも使われているそうです。
Webアプリ開発における私のサーバーサイドのスキルは、TypeScript(Node.js), Python, PHPがメインでしたが、ここにGo言語も追加しちゃおうと思った次第です。
何をつくる?
よくあるTODO管理アプリでもいいのですが、せっかくならもう少し実用的なものをと思いまして・・
URL短縮サービスを作ってみることにしました。
私が新人エンジニアだった頃、初めて1人で設計~運用まで全て行ったプロジェクトでして、思い入れがあったりしますw
機能としては単純で、
- 画面
- URL生成:元のURLを入力 → ランダム文字列(key)を生成して紐づけ
- URL管理:一覧確認やURLの無効化
- 「https://(ドメイン)/(キー)」にアクセスされたら元のURLにリダイレクト
といったものを構築します。
実務では有効期限やアクセス数のカウントなど、いろいろ考えるべき点はあると思いますが、最小限の機能で開発します。
どう作る?
Go言語の学習を目的としていて、ケチな私はサーバーレスで費用を抑えた設計にします。

Lambda Web Adapterを使って、Go言語のフレームワーク(Gin)をデプロイすることにします。
2023年頃まではLambdaでGo言語のランタイムをサポートしていたそうですが、今はAmazon Linux 2023になるそうです。

コンテナで開発してそのままデプロイするから関係ないけど😉
環境構築
Go言語
WSL(Ubuntu)内にGo言語の環境構築を行います。
公式サイトのリンクから、Linux版をダウンロードします。


# 解凍
$ tar -zxvf go1.26.4.linux-amd64.tar.gz

goというディレクトリができました。(ダウンロード時のIdentiferというのはゴミなので削除でOKです)
次に、ディレクトリを他のプログラムたちと同じところに移動します。
$ sudo mv go /usr/local
# 他が全部rootなので合わせておく
$ sudo chown -R root:root go
これでインストール完了です。最後にパスを通します。
$ vim ~/.profile
# 一番下に下記を追加
export PATH=$PATH:/usr/local/go/bin
# 再読み込み
$ source ~/.profile
# 確認
$ which go
# /usr/local/go/bin/go
$ go version
# go version go1.26.4 linux/amd64
Gin
Go言語のフレームワークのGinをインストールしてみます。
# ディレクトリの作成・移動
$ mkdir ShortUrl && cd $_
# Goモジュールの初期化
$ go mod init ShortUrl
# Ginのインストール
$ go get -u github.com/gin-gonic/gin
次にサンプルコードの配置します。

package main
import "github.com/gin-gonic/gin"
func main() {
router := gin.Default()
router.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello, World!",
})
})
router.Run(":8080")
}サーバーを起動してみます。
$ go run main.go

無事、環境構築ができました。
Docker
最後にDocker環境でGinを動かしてみます。
ディレクトリ構成を変更しました。
$ tree
.
├── Dockerfile
├── app
│ └── main.go
├── docker-compose.yaml
├── go.mod
├── go.sum
└── infrastructure.drawio.png
docker-compose.yaml
version: '3.8'
services:
web:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./:/app
ports:
- "8080:8080"
environment:
- PORT=8080Dockerfile
# ベースイメージを指定
FROM golang:1.26.4-alpine3.24 AS builder
# ワーキングディレクトリを設定
WORKDIR /app
# Goモジュールを取得するためにgo.modとgo.sumをコピー
COPY go.mod go.sum ./
RUN go mod download
# アプリケーションのソースコードをコピー
COPY . .
# アプリケーションをビルド
RUN go build -o main ./app
# 実行用の軽量イメージ
FROM alpine:latest
# ビルドしたバイナリをコピー
WORKDIR /root/
COPY --from=builder /app/main .
# アプリケーションを実行
CMD ["./main"]
# ポート8080を公開
EXPOSE 8080# ビルド・起動
$ docker compose up -d --build
ブラウザで http://localhost:8080 にアクセス

無事Docker環境構築できました。
環境構築してみての感想
参考サイトやAI先生のおかげでスムーズに環境構築ができました。
少しコードをいじってみて気づきましたが、ソースコードを変更しても、コンテナの再起動をしないと反映されないようです。
Reactをさわっていた身からすると、ホットリロードがないのは不便に感じますね。
調べてみたら、「air」というGo言語のホットリロードツールがあるようなので、次回はそれを試していこうと思います。
参考
投稿者プロフィール
-
学んだことをアウトプットしていきます!
好きなこと:音楽鑑賞🎵 / ドライブ🚗 / サウナ🧖
























