Go言語のクロスコンパイル入門!異なるOS向けにビルドする方法
生徒
「先生、私のパソコンはWindowsなんですけど、作ったGoプログラムをMacやLinuxでも動かしたいです。」
先生
「それならGoのクロスコンパイル機能を使えば、簡単に異なるOS向けのバイナリを作ることができます。」
生徒
「クロスコンパイルって何ですか?」
先生
「クロスコンパイルとは、開発している環境とは違うOSやCPUアーキテクチャ向けにプログラムをコンパイルすることです。たとえばWindowsで開発したプログラムをLinux向けに変換できます。」
生徒
「どうやってやるんですか?」
先生
「簡単です。環境変数を設定してgo buildを実行するだけです。」
1. クロスコンパイルの基本手順
Go言語では、GOOSとGOARCHという環境変数を使ってターゲットOSとCPUを指定できます。例えば、WindowsでLinux向けバイナリを作る場合は以下のように設定します。
SET GOOS=linux
SET GOARCH=amd64
go build -o myapp main.go
これでmyappという名前のLinux向け実行ファイルが生成されます。
2. Mac向けのクロスコンパイル
Mac向けのバイナリを作りたい場合は、OSをdarwinに指定します。
SET GOOS=darwin
SET GOARCH=amd64
go build -o myapp main.go
これでMacの64ビット環境で実行可能なバイナリが作れます。
3. 注意すべきポイント
クロスコンパイルでは、OS固有の機能やライブラリを使っている場合、正しく動作しないことがあります。標準ライブラリを使う分には問題ありません。
また、Windows向けはmyapp.exe、LinuxやMac向けはmyappというように拡張子の違いに注意してください。
4. CPUアーキテクチャの指定
32ビットや64ビットなどCPUアーキテクチャを指定することも可能です。
SET GOOS=linux
SET GOARCH=386
go build -o myapp main.go
これで32ビット版のLinux向けバイナリが生成されます。開発者はターゲット環境に合わせてアーキテクチャを指定できます。
5. 複数OS向けにまとめてビルド
複数のOS向けにビルドする場合は、スクリプトを使うと便利です。
SET GOOS=linux & SET GOARCH=amd64 & go build -o myapp-linux main.go
SET GOOS=windows & SET GOARCH=amd64 & go build -o myapp-windows.exe main.go
SET GOOS=darwin & SET GOARCH=amd64 & go build -o myapp-mac main.go
このようにすると、一度に複数環境向けのバイナリを生成できます。
6. 依存関係の確認
クロスコンパイルを行う前に、モジュール管理ファイルgo.modを確認しておくと安全です。go mod tidyで依存関係を整理してからビルドすることをおすすめします。
7. 実践的な使い方
クロスコンパイルを使うと、開発者は自分のPCだけでなく、他のOSユーザー向けに簡単にプログラムを配布できます。チーム開発やオープンソースプロジェクトで特に役立ちます。
Go言語のクロスコンパイルは、環境変数とgo buildを理解するだけで簡単に使える非常に便利な機能です。