Go Re:boot #1 - 開発環境のセットアップと Go Workspaces 入門
はじめに
この連載「Go Re:boot」では、基礎から実践まで、現場ですぐに役立つGo言語の知識を段階的に学び直すことを目的とします。何を隠そう、筆者自身がGoの進化の速さに追いつき、知識を再整理したいという思いからこの連載を始めることにしました。
第1回となる今回は、Goの開発環境構築と、Go 1.18から導入された注目の機能「Go Workspaces」について解説します。
この記事で目指すゴール
- OSに合わせたGoのインストール手順を理解する
- VS Codeと推奨拡張機能で快適な開発環境を整える
- LinterとFormatterをセットアップし、チーム開発の規約を統一する
-
go workコマンドを使い、シンプルなモノレポ構成のプロジェクトを立ち上げる
1. Goのインストールと環境設定
まずはGo本体をインストールします。Goのバージョンは頻繁に更新されるため、複数のバージョンを管理できるツールを使うのが現代的なアプローチです。
Windows: scoopによるインストール
Windowsユーザーには、コマンドラインからソフトウェアを管理できるscoopの利用を推奨します。
# scoopが未インストールの場合
> irm get.scoop.sh | iex
# Goをインストール
> scoop install go
macOS: Homebrewによるインストール
macOSでは、パッケージマネージャーのHomebrewを使うのが最も一般的です。
# Homebrewが未インストールの場合
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Goをインストール
$ brew install go
Linux (Ubuntu): aptによるインストール
Ubuntuや他のDebian系ディストリビューションではaptコマンドでインストールできます。
$ sudo apt update
$ sudo apt install golang-go
環境変数の確認と設定
インストールが完了したら、ターミナルを開いて以下のコマンドを実行し、Goが正しくインストールされていることを確認します。
$ go version
go version go1.24.5 linux/amd64 # 出力はバージョンやOSにより異なる
次に、Goの環境変数について理解を深めましょう。go envコマンドで一覧表示できます。
-
GOROOT: Goのコンパイラや標準ライブラリが格納されているディレクトリです。通常は自動で設定され、手動で変更する必要はほとんどありません。 -
GOPATH: Goのワークスペースとして機能するディレクトリです。go installでインストールしたサードパーティ製のツールや、go getで取得したパッケージのキャッシュがここに保存されます。デフォルトではホームディレクトリ配下のgoフォルダ(例:/home/user/go)に設定されています。
特にこだわりがなければ、GOPATHはデフォルト設定のまま利用することをお勧めします。
2. VS Codeによる開発環境の最適化
Go開発で最も人気のあるエディタの一つがVS Codeです。goplsという言語サーバーと連携することで、強力な開発体験を得られます。
推奨拡張機能のインストール
VS Codeを開き、拡張機能タブから以下をインストールします。
-
Go (公式拡張機能):
golang.go-goplsの連携、デバッグ、テスト実行など、Go開発に必要な機能がオールインワンで提供されます。 -
Code Spell Checker:
streetsidesoftware.code-spell-checker- コードやコメント内のタイポを検知してくれます。
settings.jsonの推奨設定
チームで開発効率を上げるため、VS Codeの設定を共有することをお勧めします。プロジェクトのルートディレクトリに.vscode/settings.jsonを作成し、以下の設定を記述します。
{
"go.useLanguageServer": true,
"[go]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "golang.go"
},
"gopls": {
"ui.semanticTokens": true
}
}
これにより、Goファイル保存時に自動でフォーマットが実行されるようになります。
3. LinterとFormatterの共通化
コードの品質と一貫性を保つため、静的解析ツール(Linter)とフォーマッターを導入します。
Formatter: goimports
gofmtはGoに標準で付属するフォーマッターですが、import文の自動整理も行ってくれるgoimportsの利用が推奨されます。
$ go install golang.org/x/tools/cmd/goimports@latest
VS CodeのGo拡張機能は、goimportsがインストールされていれば自動で利用してくれます。
Linter: golangci-lint
golangci-lintは、多くのLinterを内包した高速なメタLinterです。プロジェクトの規約を統一するために導入します。
# インストール
$ go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
プロジェクトルートに設定ファイル.golangci.ymlを配置することで、ルールをチームで統一できます。
run:
timeout: 5m
skip-dirs:
- vendor
linters:
enable:
- gofmt
- goimports
- revive
- govet
- staticcheck
- unused
- errcheck
issues:
exclude-rules:
- path: _test\.go
linters:
- errcheck
この設定例では、代表的なLinterを有効化し、テストファイルでのエラーチェックを一部無効化しています。
4. Go Workspaces入門 - 新時代のモノレポ開発
Go 1.18から導入されたGo Workspacesは、複数のモジュールを同時に扱う開発を劇的に改善します。
なぜGo Workspacesが必要か?
従来、複数のローカルモジュールに依存するプロジェクト(モノレポ)では、go.modのreplaceディレクティブを使って依存関係を解決する必要がありました。しかしこの方法は、go.modを直接編集するため、コミットすべきでない変更が紛れ込みやすいという問題がありました。
Go Workspacesは、go.workというワークスペース専用のファイルを導入することで、go.modを汚さずにローカルモジュール間の依存を解決します。
実践: greetingsとcliの2モジュール構成
実際に簡単なコマンドラインツールを作りながら、go workの使い方を体験してみましょう。
1. プロジェクトのセットアップ
まず、プロジェクト用のディレクトリを作成します。
$ mkdir go-work-example && cd go-work-example
$ mkdir greetings cli
2. greetingsモジュールの作成
greetingsディレクトリに移動し、Goモジュールを初期化して簡単な関数を実装します。
$ cd greetings
$ go mod init example.com/greetings
greetings.goを作成します。
package greetings
func Hello(name string) string {
return "Hello, " + name
}
3. cliモジュールの作成
次に、cliディレクトリでgreetingsモジュールを利用するコマンドラインツールを作成します。
$ cd ../cli
$ go mod init example.com/cli
main.goを作成します。
package main
import (
"fmt"
"example.com/greetings"
)
func main() {
message := greetings.Hello("Go Workspaces")
fmt.Println(message)
}
この時点では、example.com/greetingsはローカルにしか存在しないため、go getなどで依存を解決することはできません。
4. Go Workspacesの作成
プロジェクトのルートディレクトリに戻り、go workコマンドを実行します。
$ cd ..
$ go work init ./greetings ./cli
このコマンドは、go.workというファイルを生成し、ワークスペースで使用するモジュールを登録します。
go 1.24.5
use (
./cli
./greetings
)
useディレクティブに指定されたモジュールは、コンパイル時にローカルのソースコードが直接参照されるようになります。
5. 実行
ルートディレクトリからcliアプリケーションを実行してみましょう。
$ go run example.com/cli
Hello, Go Workspaces
go.modにreplaceを書くことなく、cliモジュールがgreetingsモジュールを正しく見つけて実行できました。これがGo Workspacesの力です。
まとめ
今回は、Goの開発環境をゼロから構築し、Go Workspacesを使ってモダンなマルチモジュール開発の第一歩を踏み出しました。
重要なのは、LinterやFormatterといったツールを正しく設定し、チームで一貫した開発スタイルを保つことです。そしてGo Workspacesを活用すれば、モノレポ構成のプロジェクトもスマートに管理できます。
次回は、Goの基本文法を“Goらしい書き方”という観点からリフレッシュしていきます。お楽しみに!
Discussion