MENU

WSL2でGo開発環境を構築する – パッケージ管理の選択肢と実践

目次

前提環境

  • Windows 11/10 + WSL2
  • Ubuntu 22.04 LTS(WSL2上)
  • インターネット接続環境

Goインストール方法の比較検討

WSL2上でGoの開発環境を構築する際、主に3つの選択肢がある。それぞれの特徴を理解した上で、適切な方法を選択することが重要である。

公式バイナリによるインストール

Go公式サイトから直接バイナリをダウンロードして /usr/local にインストールする方法である。最新版が確実に入手できる一方で、アップデート作業が完全に手動となる。

# 最新版のダウンロード(例:go1.21.5)
cd /tmp
wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz

# 既存版の削除とインストール
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz

# 環境変数設定
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc

この方法は確実性が高いものの、新しいバージョンがリリースされるたびに同じ作業を繰り返す必要がある。

Ubuntu標準パッケージでのインストール

apt コマンドで標準リポジトリからインストールする最もシンプルな方法である。

sudo apt update
sudo apt install golang-go

ただし、Ubuntu 22.04の標準リポジトリに含まれるGoは1.18系と古く、最新の言語機能やライブラリが利用できない場合がある。

PPAを利用したインストール(推奨)

Personal Package Archive(PPA)を使用することで、最新のGoを apt で管理できる。具体的には ppa:longsleep/golang-backports を利用する。

sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt update
sudo apt install golang-go

このPPAはSimon Eisenmann氏によって個人的に維持されており、Go公式Wikiでも推奨されている。通常のパッケージ更新の流れでGoも最新版に更新される利便性がある。

パッケージ管理ツールの選択理由

現在のLinux環境では、従来の apt に加えて snap というパッケージ管理システムも選択肢として存在する。しかし、snapには以下の課題がある。

snapはCanonical社が開発した新しいパッケージ形式で、依存関係を含む自己完結型のパッケージを提供する。一見便利に思えるが、実際には起動速度の低下、メモリ使用量の増加、そしてSnapストアがCanonicalの独占管理下にあるという構造的な問題を抱えている。

Linux コミュニティでは「便利だが本質的ではない」という評価が一般的であり、特に開発環境のような基盤的なツールには従来のパッケージ管理を選択する開発者が多い。

実際のインストール手順

上記の検討を踏まえ、PPAを使用したインストールを実行する。

# PPAリポジトリの追加
sudo add-apt-repository ppa:longsleep/golang-backports

# パッケージリストの更新
sudo apt update

# Goのインストール
sudo apt install golang-go

# インストール確認
go version

期待される出力例:

go version go1.21.5 linux/amd64

開発環境の設定

Goの開発に必要なディレクトリ構造を作成し、環境変数を設定する。

# Go作業ディレクトリの作成
mkdir -p ~/go/{bin,src,pkg}

# 環境変数の設定
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc

# 設定の反映
source ~/.bashrc

# 環境確認
go env GOPATH
go env GOROOT

動作確認

実際にGoプログラムをビルドして実行し、環境が正しく構築されていることを確認する。

# テスト用ディレクトリの作成
mkdir ~/go/src/hello
cd ~/go/src/hello

# サンプルプログラムの作成
cat << 'EOF' > main.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, Go on WSL2!")
}
EOF

# ビルドと実行
go build
./hello

正常に動作すれば Hello, Go on WSL2! と出力される。

今後の運用

PPAを使用している場合、Goのアップデートは通常のシステム更新で自動的に行われる。

# 定期的なシステム更新でGoも更新される
sudo apt update && sudo apt upgrade

この方法により、手動でのバージョン管理作業から解放され、常に最新の安定版を利用できる開発環境が維持される。

まとめ

WSL2上でのGo開発環境構築において、複数の選択肢がある中でPPAを利用する方法が実用性と保守性のバランスが取れている。個人管理のリポジトリに依存するリスクはあるものの、長期間の運用実績とGo公式の推奨により、実用的な選択肢として評価できる。

目次