Go言語

Go 1.26 環境構築とマイクロサービス開発の完全ガイド

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


Contents

スポンサードリンク

1️⃣ 開発環境のセットアップ

このセクションではローカル開発に必要な Go 本体Docker / kubectl / Helm の導入手順を解説します。すべてのコマンドは Linux/macOS を前提としていますが、Windows ユーザーは WSL2 で同様に実行できます。

1.1 Go 1.26 のインストールと環境変数設定

Go はシングルバイナリで高速に動作します。公式サイトの手順に沿ってインストールし、GOROOTGOPATH を正しく構成しましょう。

  1. 公式ダウンロードページ(go.dev/dl)から対象 OS のアーカイブを取得(例: go1.26.4.linux-amd64.tar.gz)。
  2. /usr/local/go に展開し、PATH を通す。

  1. GOROOT と作業領域用の GOPATH を永続化する。

  1. 正しくインストールされたか確認する。

これで Go の開発基盤は完了です。

1.2 Docker、kubectl、helm のインストール

コンテナ化と Kubernetes デプロイには最新版ツールチェーンが必須です。公式ドキュメントの指示に従ってインストールし、バージョンを確認してください。

ツール 推奨バージョン(執筆時点) 公式インストールガイド
Docker Engine / Desktop 24.0 系列以上 https://docs.docker.com/engine/install/
kubectl v1.30 系列以上 https://kubernetes.io/docs/tasks/tools/#kubectl
Helm v3.14 系列以上 https://helm.sh/docs/intro/install/

インストール後は次のコマンドでバージョンを確認します。

~/.kube/config が正しく設定され、EKS または GKE クラスタに接続できることも合わせてチェックしてください。


2️⃣ プロジェクト構成とコードベース

この章では Go のベストプラクティス に沿ったディレクトリレイアウトを示し、実際に手元で動かせるサンプルリポジトリの取得方法を解説します。

2.1 標準的なディレクトリレイアウト(cmd / internal / pkg / api)

Go のマイクロサービスは以下のようにモジュール化すると保守性が向上します。各フォルダの役割と代表的なファイル例を簡潔にまとめました。

  • cmd: ビルド対象のバイナリを配置。main.go は依存性注入だけに留め、ロジックは internal に委譲します。
  • internal: ビジネスロジックやデータアクセス層は外部から直接呼び出せないように保護されます。
  • pkg: ロガーやユーティリティなど、別プロジェクトでもインポート可能なコードを置きます。
  • api: OpenAPI と protobuf のソースを管理し、protocoapi-codegen でコード生成の元にします。

この構成は Go 公式ブログ(The Go Blog – Application Layout)でも推奨されています。

2.2 GitHub サンプルリポジトリの取得手順

実装例をローカルで動かすために、以下の公開サンプルリポジトリをクローンしてください。リンクは実在するものに置き換えました。

※ 注意
- 本リポジトリは MIT ライセンスで公開されており、実務プロジェクトへの取り込みが容易です。
- README.md に記載された「セットアップ」手順に従えば、ローカル環境で即座にビルド・テストが可能です。


3️⃣ API 実装とデータ永続化

この章では REST(chi)gRPC(protobuf + grpc-go) の両方の実装例を示し、データ層は Repository パターンで PostgreSQL と MongoDB を抽象化します。

3.1 REST API(chi)実装例

軽量な HTTP ルーティングに chi を選択した理由はミドルウェアが豊富でかつパフォーマンスが高い点です。以下は CRUD ハンドラの雛形です。

cmd/server/main.gochi.NewRouter() に上記ハンドラを登録すれば、ローカルでもコンテナでも同一コードが動作します。

3.2 gRPC API(protobuf + grpc-go)実装例

gRPC が必要な場合は protobuf と公式の grpc-go を利用します。以下に user.proto の定義と Go コード生成手順を示します。

コード生成(プロジェクトルートで実行):

ハンドラ例(internal/handler/grpc_user.go):

3.3 Repository パターンと DB 接続(pgx / MongoDB driver)

データ層をインターフェースで抽象化することで、REST と gRPC のハンドラから 同一インターフェイス を呼び出せます。

3.3.1 インターフェース定義

3.3.2 PostgreSQL(pgx)実装

3.3.3 MongoDB driver 実装


4️⃣ コンテナ化とローカル開発環境

この章では マルチステージ Dockerfiledocker‑compose を用いた依存サービスの起動方法を示します。イメージサイズ削減や高速ビルドのポイントも併せて解説します。

4.1 マルチステージ Dockerfile の作成手順

本番向けイメージは builder ステージでコンパイルし、runtime ステージで実行ファイルだけをコピーする構成です。以下の例は Go 1.26 と Alpine Linux を使用しています。

ビルドコマンド:

4.2 docker‑compose による依存サービスの起動

ローカル開発ではデータベースやキャッシュ、トレース収集を同時に立ち上げると便利です。以下は最小構成の docker-compose.yml 例です。

起動は次のコマンドで完了します。

これだけで API コンテナと依存サービスが一括起動し、ローカル環境でも本番に近い構成を検証できます。


5️⃣ CI/CD とマルチクラウドデプロイ

この章では GitHub Actions によるパイプライン自動化と、Helm を用いた EKS / GKE への同一チャート展開手順を紹介します。

5.1 GitHub Actions ワークフロー(lint → test → build → push → deploy)

ポイントまとめ

ステップ 目的
golangci-lint コード品質の自動チェック
go test -cover ユニット・インテグレーションテストとカバレッジ測定
Docker ビルド(マルチステージ) 本番イメージをそのまま利用
レジストリプッシュ ECR / GCR へ安全に配布
Helm デプロイ 同一チャートで EKSGKE の両方に展開可能

5.2 Kubernetes マニフェストと Helm チャート化

Helm テンプレートは環境ごとの差分を values.yaml に切り出すことで、クラウド間の設定違い(ロードバランサー種別や IAM ロール)を最小限に抑えられます。

5.2.1 Deployment テンプレート(templates/deployment.yaml)

5.2.2 values.yaml(抜粋)

helm upgrade --install … --set image.tag=$IMAGE_TAG とすれば、EKSGKE の両方で同一チャートがそのまま利用できます。


6️⃣ Observability・セキュリティ・テスト戦略

本章ではサービスの可観測性と安全性を確保するために Istio + OpenTelemetry, Zap + Loki, Prometheus + Grafana の構成例、そして テスト手法認証・暗号化 のベストプラクティスをまとめます。

6.1 Istio と OpenTelemetry による分散トレース設定

サービスメッシュとして Istio を導入し、OpenTelemetry Collector がトレースを集約します。以下は公式ドキュメントに基づくインストール手順です(2024 年版を最新版へ適用)。

OpenTelemetry Collector デプロイ(otelcol 0.94 系)

Go アプリ側のトレーサー初期化

この構成で全リクエストが Istio の Envoy を経由し、OpenTelemetry Collector が Jaeger/Tempo へ送信します。

参考: Istio と OTel の公式ガイド(https://istio.io/latest/docs/tasks/observability/tracing/

6.2 ロギングとメトリクス(Zap + Loki, Prometheus + Grafana)

Zap ロガー実装例

Loki + Promtail の導入(Helm)

  • Loki は JSON ログをそのまま検索でき、Grafana のデータソースとして簡単に統合できます。
  • PrometheusGrafana を併用すれば、CPU・メモリだけでなくカスタムアプリ指標(例: リクエストレイテンシ)も可視化可能です。

公式ドキュメント: https://grafana.com/docs/loki/latest/

6.3 テスト戦略(ユニット・インテグレーション・契約テスト)

種類 主なツール 実装上のポイント
ユニット testing, testify, gomock ビジネスロジックはインターフェースで抽象化し、外部依存はモックに差し替える
インテグレーション docker-compose, go test -tags=integration 依存 DB・Redis を Compose 起動後、本物のデータベースに対して CRUD を実行
REST 契約テスト Postman Collection + newman CLI OpenAPI スキーマと実装が一致するか自動検証
gRPC 契約テスト grpcurl, buf .proto とサーバーのシグネチャを照合

ユニットテスト例(リポジトリモック)

6.4 認証・暗号化・脆弱性スキャン

  1. JWT 認証github.com/golang-jwt/jwt/v5

go
func jwtMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
tokenStr := strings.TrimPrefix(r.Header.Get("Authorization"), "Bearer ")
if tokenStr == "" { http.Error(w, "missing token", http.StatusUnauthorized); return }

}

  1. mTLS の強制(Istio PeerAuthentication

yaml
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
spec:
mtls:
mode: STRICT

  1. 依存関係脆弱性スキャンgovulncheck

yaml
- name: Run govulncheck
run: |
go install golang.org/x/vuln/cmd/govulncheck@latest
govulncheck ./...

CI が脆弱性を検出した場合はジョブが失敗し、修正が必須になるため、セキュリティリスクを早期に把握できます。


7️⃣ まとめ

  • 開発基盤: Go 1.26 と Docker/helm の最新版を公式手順でインストールし、環境変数を整備すれば即座に開発が開始できる。
  • コード構造: cmd / internal / pkg / api のレイアウトと Repository パターンにより、REST と gRPC 両方のエンドポイントで同一ビジネスロジックを共有可能。
  • データ永続化: pgx と MongoDB driver をインターフェースで抽象化し、テスト容易性と将来の DB 変更に強い設計。
  • コンテナ化: マルチステージ Dockerfile と docker‑compose によってローカルでも本番に近い環境を数分で立ち上げられる。
  • CI/CD: GitHub Actions + Helm で Lint → Test → Build → Push → Deploy のフローが自動化され、EKS と GKE のマルチクラウド展開も同一チャートで完結。
  • Observability: Istio + OpenTelemetry、Zap + Loki、Prometheus + Grafana によるトレース・ログ・メトリクスの統合が実装例として完成。
  • テストとセキュリティ: ユニットから契約テストまで網羅し、JWT・mTLS・govulncheck で認証・暗号化・脆弱性対策を自動化。

以上の手順とベストプラクティスに沿ってプロジェクトを構築すれば、最新ツールチェーン堅牢な運用基盤 を備えた Go マイクロサービスを迅速に開発・デリバリーできるようになります。ぜひ本ガイドを実務に取り入れ、継続的改善のサイクルへ活かしてください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Go言語