Go言語でmacOS向けにクロスコンパイルする手順を解説 初心者でもわかるGoクロスコンパイル入門
生徒
「Go言語で作ったプログラムをmacOSでも動かしたいのですが、今はWindowsで開発しています。別のパソコンが必要ですか?」
先生
「いいえ。Go言語にはクロスコンパイルという便利な機能があります。WindowsやLinuxで作ったプログラムを、macOS用のプログラムとしてビルドできます。」
生徒
「クロスコンパイルとは何ですか?」
先生
「簡単に言うと、今使っているパソコンとは別のOS用のプログラムを作ることです。例えばWindowsのパソコンでmacOS用のアプリを作ることができます。」
生徒
「それは便利ですね。Go言語ではどうやってやるのですか?」
先生
「GOOSとGOARCHという設定を使ってビルドします。これを設定するだけでmacOS用のプログラムを作れます。」
1. Go言語のクロスコンパイルとは
Go言語の大きな特徴の一つが、簡単にクロスコンパイルできることです。クロスコンパイルとは、現在使っているパソコンとは別のOS用のプログラムを作ることです。
例えば次のような状況があります。
- Windowsパソコンで開発している
- Linuxサーバーで動かしたい
- macOSでも動くツールを作りたい
通常のプログラミング言語では、それぞれのOSの環境を用意してコンパイルする必要があります。しかしGo言語では、コマンドを少し変更するだけで別のOS用の実行ファイルを作ることができます。
これはGo言語が最初からマルチプラットフォーム開発を想定して設計されているためです。マルチプラットフォームとは、一つのプログラムを複数のOSで動かせる仕組みのことです。
2. GOOSとGOARCHとは
Go言語でクロスコンパイルを行うときに重要になるのがGOOSとGOARCHという環境変数です。
環境変数とは、プログラムの動作を決める設定のようなものです。ここでは次の二つを覚えておきましょう。
| 名前 | 意味 |
|---|---|
| GOOS | 対象のOSを指定する |
| GOARCH | CPUの種類を指定する |
macOS用のプログラムを作る場合は、GOOSにdarwinを指定します。
darwinとはmacOSの内部で使われているOSの名前です。Go言語ではmacOSをdarwinとして扱います。
多くのMacパソコンは64bitのCPUを使っているため、GOARCHはamd64またはarm64を指定します。
3. macOS向けにクロスコンパイルする基本コマンド
それでは実際にGo言語でmacOS向けの実行ファイルを作ってみましょう。ここでは最も基本的なクロスコンパイル方法を紹介します。
GOOS=darwin GOARCH=amd64 go build main.go
このコマンドは次の意味になります。
- GOOS=darwin macOS用のプログラムを作る
- GOARCH=amd64 64bitCPU用にビルドする
- go build プログラムをコンパイルする
このコマンドを実行すると、macOSで動く実行ファイルが作成されます。Windowsで作業していてもMac用のプログラムを作れるのがGo言語の大きな魅力です。
4. 簡単なGoプログラムを作ってクロスコンパイルする
実際に簡単なGoプログラムを作り、macOS用の実行ファイルを作ってみましょう。
まずは次のようなGoプログラムを作ります。
package main
import "fmt"
func main() {
fmt.Println("Hello macOS from Go")
}
このプログラムは、画面にメッセージを表示するだけのシンプルなGoプログラムです。
次にmacOS用の実行ファイルを作ります。
GOOS=darwin GOARCH=amd64 go build hello.go
これでmacOS用のバイナリファイルが作成されます。このファイルをMacにコピーすれば、そのまま実行できます。
5. 出力ファイル名を指定してビルドする
Go言語では、ビルドすると自動的に実行ファイルが作成されます。しかしファイル名を自分で指定したい場合もあります。
その場合は-oオプションを使用します。
GOOS=darwin GOARCH=amd64 go build -o macapp main.go
このコマンドを実行すると、macappという名前の実行ファイルが作成されます。
MacではWindowsのように拡張子exeが付かないため、そのままの名前で実行ファイルになります。
6. Apple Silicon Mac向けにビルドする方法
最近のMacパソコンではApple Siliconと呼ばれる新しいCPUが使われています。代表的なものはM1やM2などです。
この場合はGOARCHをarm64に設定します。
GOOS=darwin GOARCH=arm64 go build main.go
これによりApple Silicon Macで動作するネイティブバイナリを作ることができます。
現在のMac環境では、次の二つのCPU種類があります。
- amd64 Intel Mac
- arm64 Apple Silicon Mac
Go言語ではこの違いも簡単に切り替えてビルドできます。
7. クロスコンパイル時のよくあるトラブル
Go言語のクロスコンパイルはとても簡単ですが、初心者がつまずきやすいポイントもあります。
まず多いのが環境変数の書き方です。GOOSやGOARCHを指定しない場合は現在のOS用のプログラムが作られます。
もう一つよくあるのがCPUの種類の違いです。Intel MacとApple Silicon MacではCPUの種類が違うため、GOARCHの値も変わります。
もしMacで実行できない場合は、CPUの種類が合っているか確認してみましょう。
またGo言語のプログラムは基本的に単一の実行ファイルとしてビルドされるため、依存ライブラリの問題が起こりにくいのも特徴です。この仕組みのおかげでクロスコンパイルが非常に簡単になっています。
まとめ
Go言語クロスコンパイルの振り返り
ここまで、Go言語を使ってmacOS向けにクロスコンパイルする方法について詳しく学んできました。Go言語はシンプルで高速なプログラミング言語として知られていますが、その大きな特徴の一つがクロスコンパイルの簡単さです。
通常のプログラミング言語では、Windows用のプログラムはWindowsで、Linux用のプログラムはLinuxでコンパイルする必要があります。しかしGo言語では、GOOSとGOARCHという環境変数を設定するだけで、別のOS向けの実行ファイルを作ることができます。
例えばWindowsやLinuxの開発環境からmacOS用のバイナリを作成する場合、次のようなコマンドを使用します。
GOOS=darwin GOARCH=amd64 go build main.go
このコマンドを実行するだけで、macOS用の実行ファイルを作ることができます。darwinはmacOSの内部OS名であり、Go言語ではmacOSを指定するために使用します。またamd64はIntel Mac向けのCPUアーキテクチャを意味しています。
最近のMacではApple Siliconという新しいCPUが使われています。M1やM2などのMacではarm64を指定する必要があります。そのためApple Silicon Mac向けのGoプログラムを作る場合は次のコマンドになります。
GOOS=darwin GOARCH=arm64 go build main.go
Go言語のクロスコンパイル機能を活用することで、Windows開発環境からmacOSアプリケーションをビルドしたり、Linuxサーバー向けのツールを作ったりすることが簡単にできます。このマルチプラットフォーム開発のしやすさは、Go言語がサーバー開発やツール開発で人気になっている理由の一つです。
Go言語クロスコンパイルの重要ポイント
Go言語でmacOS向けクロスコンパイルを行う場合、いくつか覚えておきたいポイントがあります。まず重要なのがGOOSとGOARCHという二つの環境変数です。
| 設定項目 | 役割 |
|---|---|
| GOOS | 対象となるOSを指定する |
| GOARCH | CPUアーキテクチャを指定する |
macOSの場合はGOOSにdarwinを指定します。そしてCPUの種類に応じてGOARCHを設定します。Intel Macならamd64、Apple Silicon Macならarm64を指定するのが基本です。
またGo言語ではビルド時に出力ファイル名を指定することもできます。開発現場ではビルドしたバイナリの名前を分かりやすくすることが多いため、次のようにoオプションを使うケースがよくあります。
GOOS=darwin GOARCH=amd64 go build -o macapp main.go
このコマンドではmacappという名前の実行ファイルが作成されます。macOSではWindowsのようにexe拡張子を付ける必要がないため、シンプルな名前で実行ファイルを作ることができます。
Go言語で作るシンプルなmacOS用プログラム
クロスコンパイルの理解を深めるために、もう一度簡単なGoプログラムを確認してみましょう。Go言語では次のようなシンプルなコードでもmacOS向けの実行ファイルを作ることができます。
package main
import "fmt"
func main() {
fmt.Println("Hello macOS from Go")
}
このような小さなプログラムでも、GOOSとGOARCHを設定することでmacOS向けのバイナリを作成できます。Go言語は単一の実行ファイルとしてビルドされるため、ライブラリの依存関係で悩むことが少ないのも特徴です。
そのためGo言語はコマンドラインツール開発やサーバーツール開発、クラウドツール開発、DevOpsツールなどさまざまな分野で活用されています。特にマルチプラットフォーム対応ツールを作る場合、Go言語のクロスコンパイル機能は非常に強力です。
Windows、Linux、macOSのすべてで動作するツールを作る場合でも、同じGoソースコードからそれぞれのOS向けバイナリを簡単に作ることができます。これにより配布や運用も非常に簡単になります。
Go言語クロスコンパイルを実務で活用する
実際の開発現場では、Go言語のクロスコンパイルは非常によく使われています。例えば次のような場面です。
- Windows開発環境からLinuxサーバー用ツールをビルドする
- macOS用コマンドラインツールを配布する
- 複数OS対応のCLIツールを作る
- GitHub公開ツールとしてバイナリ配布する
これらの用途では、GOOSとGOARCHを切り替えながら複数の実行ファイルを作成することが一般的です。Go言語のクロスコンパイル機能を理解しておくと、さまざまな環境向けのアプリケーションを効率よく作れるようになります。
生徒
Go言語のクロスコンパイルって思っていたより簡単ですね。GOOSとGOARCHを設定するだけでmacOS用のプログラムが作れるとは知りませんでした。
先生
その通りです。Go言語の大きな魅力はマルチプラットフォーム開発のしやすさです。同じソースコードからWindows、Linux、macOS向けの実行ファイルを作ることができます。
生徒
macOS用のプログラムを作る場合はGOOSにdarwinを指定するのでしたよね。
先生
そうです。そしてCPUの種類に応じてGOARCHを設定します。Intel Macならamd64、Apple Silicon Macならarm64を指定します。
生徒
つまり次のようなコマンドになるのですね。
GOOS=darwin GOARCH=amd64 go build main.go
先生
その通りです。このようにGo言語ではクロスコンパイルが非常に簡単です。複数OS向けのツールを作るときはとても役立ちます。
生徒
Go言語がサーバー開発やCLIツール開発で人気なのも納得ですね。これならWindows環境でもmacOS向けアプリを作れそうです。
先生
その理解で大丈夫です。これからはWindows用、Linux用、macOS用のクロスコンパイルを組み合わせて、マルチプラットフォーム対応ツールを作ってみてください。
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!