Go言語のクロスコンパイルの基本!GOOSとGOARCHの使い方を初心者向けにやさしく解説
生徒
「Go言語で作ったプログラムって、WindowsだけじゃなくてMacやLinuxでも動くんですか?」
先生
「はい、動かすことができます。Go言語にはクロスコンパイルという便利な仕組みがあります。」
生徒
「クロスコンパイルって何ですか?」
先生
「簡単に言うと、今使っているパソコンとは違う環境向けのプログラムを作れる機能です。例えばWindowsで開発しながらLinux用の実行ファイルを作ることもできます。」
生徒
「それは便利ですね。どうやって指定するんですか?」
先生
「Go言語ではGOOSとGOARCHという環境変数を使って、対象のOSとCPUの種類を指定します。それでは基本から順番に見ていきましょう。」
1. Go言語のクロスコンパイルとは
Go言語のクロスコンパイルとは、現在使っているパソコンとは異なる環境向けのプログラムを作る仕組みのことです。例えばWindowsのパソコンで開発しながら、LinuxやMacで動くプログラムを作ることができます。
通常のプログラミング言語では、別の環境向けのプログラムを作るには複雑な設定が必要になることがあります。しかしGo言語は設計の段階からマルチプラットフォームを強く意識して作られているため、非常に簡単なコマンドだけでクロスコンパイルができます。
ここで出てくるプラットフォームという言葉は、プログラムが動く環境のことを意味します。具体的には次のような組み合わせです。
- Windows
- Mac
- Linux
このように複数の環境に対応したプログラムを作れることは、Go言語が人気の理由の一つです。サーバー開発やツール開発でもよく利用されています。
2. GOOSとは何か
GOOSとは、作成するプログラムがどのOSで動くのかを指定するための設定です。GOOSはGo Operating Systemの略で、対象となるオペレーティングシステムを指定します。
オペレーティングシステムとは、パソコンを動かす基本ソフトのことです。例えばWindowsやMacOSやLinuxなどがこれにあたります。
代表的なGOOSの値は次の通りです。
- windows
- linux
- darwin MacOS
例えばGOOSをwindowsにするとWindows用の実行ファイルが作られます。逆にlinuxにするとLinuxで動く実行ファイルが作られます。
つまりGOOSは、このプログラムをどのOSで動かすのかを指定する設定です。
3. GOARCHとは何か
GOARCHはCPUの種類を指定するための設定です。GOARCHはGo Architectureの略で、コンピューターの処理装置の種類を指定します。
CPUとは、コンピューターの計算や処理を行う重要な部品です。CPUにはいくつかの種類があり、それぞれ命令の仕組みが異なります。
Go言語では次のようなCPUアーキテクチャがよく使われます。
- amd64 64bitパソコン
- 386 32bitパソコン
- arm スマートフォンや組み込み機器
現在のパソコンの多くはamd64という種類です。そのため初心者の方はまずamd64を覚えておけば問題ありません。
GOARCHはCPUの種類を決める設定、GOOSはOSを決める設定という関係になります。
4. GOOSとGOARCHを使ったクロスコンパイル
それでは実際にGOOSとGOARCHを使ってクロスコンパイルしてみましょう。Go言語では環境変数を指定してgo buildコマンドを実行するだけです。
Windows用の実行ファイルを作る例です。
GOOS=windows GOARCH=amd64 go build main.go
このコマンドを実行すると、Windowsで動く実行ファイルが作成されます。もしWindows用のプログラムなら、拡張子exeのファイルになります。
main.exe
このようにGo言語ではOSとCPUを指定するだけで簡単にクロスコンパイルができます。
5. Linux用プログラムを作る例
次はLinux用のプログラムを作る例です。Linuxはサーバーで非常によく使われているOSなので、Go言語の開発でもよく利用されます。
GOOS=linux GOARCH=amd64 go build main.go
このコマンドを実行するとLinuxで実行できるプログラムが生成されます。
Windowsで作ったプログラムでも、Linuxサーバーにそのままコピーすれば動作します。これがGo言語のクロスコンパイルの大きなメリットです。
サーバー開発ではLinux環境で動かすことが多いため、この使い方は非常によく使われます。
6. Mac用プログラムを作る例
次はMacOS向けのプログラムを作る例です。MacOSではGOOSにdarwinという値を指定します。
GOOS=darwin GOARCH=amd64 go build main.go
このコマンドを実行するとMacOSで動作する実行ファイルが作られます。Mac用のツールや開発用ソフトを配布したい場合に役立ちます。
このようにGo言語は、Windows、Linux、Macなど様々な環境向けのプログラムを簡単に作ることができます。
7. 簡単なGoプログラムでクロスコンパイルしてみよう
最後に簡単なGoプログラムを作り、そのプログラムをクロスコンパイルする流れを確認してみましょう。
package main
import "fmt"
func main() {
fmt.Println("Hello Go Cross Compile")
}
このプログラムを作成したあと、次のコマンドを実行します。
GOOS=windows GOARCH=amd64 go build main.go
するとWindows用の実行ファイルが作られます。
Hello Go Cross Compile
このようにGo言語のクロスコンパイルはとても簡単です。GOOSでOSを指定し、GOARCHでCPUの種類を指定するだけで、複数の環境に対応したプログラムを作ることができます。
Go言語はシンプルな構文と強力なビルド機能を持っているため、マルチプラットフォーム対応のツール開発やサーバー開発に非常に向いています。
まとめ
Go言語のクロスコンパイルの基本を振り返る
ここまで、Go言語のクロスコンパイルの基本について解説してきました。Go言語はシンプルな文法と高速なコンパイル性能を持つプログラミング言語として知られていますが、その中でも特に便利な機能の一つがクロスコンパイルです。クロスコンパイルとは、現在使用しているパソコンとは異なる環境向けの実行ファイルを作成できる仕組みのことです。
通常、多くのプログラミング言語ではWindows用のプログラムはWindowsでコンパイルし、Linux用のプログラムはLinux環境でコンパイルする必要があります。しかしGo言語では、GOOSとGOARCHという環境変数を指定するだけで、簡単に別のOS向けの実行ファイルを作ることができます。この仕組みによって、Windowsで開発しながらLinuxサーバーで動くプログラムを作成したり、Mac用のツールを生成したりすることが可能になります。
GOOSはGo Operating Systemの略で、プログラムが動作するオペレーティングシステムを指定するための設定です。代表的な値としてはwindows、linux、darwinなどがあります。windowsを指定するとWindowsで実行できるプログラムが生成され、linuxを指定するとLinuxサーバーで動く実行ファイルが作られます。またMacOSの場合はdarwinを指定することでMac向けのバイナリを生成することができます。
一方でGOARCHはCPUアーキテクチャを指定する設定です。コンピューターのCPUにはいくつかの種類があり、それぞれ処理の仕組みが異なります。Go言語では代表的なCPUアーキテクチャとしてamd64、386、armなどが用意されています。現在の一般的なパソコンはamd64が多いため、初心者の方はまずamd64を指定する方法を覚えておくと理解しやすいでしょう。
このようにGOOSとGOARCHを組み合わせて指定することで、Go言語のプログラムは様々なプラットフォームに対応した実行ファイルを生成することができます。例えばWindows用のプログラムを作る場合はwindowsとamd64を組み合わせますし、Linuxサーバーで動くプログラムを作る場合はlinuxとamd64を指定します。
クロスコンパイルの基本コマンドを確認する
GOOS=windows GOARCH=amd64 go build main.go
このコマンドを実行するとWindows用の実行ファイルが生成されます。Windows向けのプログラムの場合、作成されるファイルにはexeという拡張子が付きます。このファイルをWindows環境にコピーすれば、そのまま実行することができます。
同様にLinux用のプログラムを作る場合は次のように指定します。Linuxはサーバー環境として広く利用されているため、Go言語の開発でも頻繁に利用される設定です。
GOOS=linux GOARCH=amd64 go build main.go
またMac用のプログラムを作る場合はGOOSにdarwinを指定します。MacOSは開発者に人気のある環境のため、開発ツールやコマンドラインツールを配布する場合によく利用されます。
GOOS=darwin GOARCH=amd64 go build main.go
このようにGo言語ではOSとCPUアーキテクチャを指定するだけで、Windows、Linux、Macといった複数の環境向けのプログラムを作成できます。設定は非常にシンプルで、複雑なビルドツールや特別な開発環境を必要としません。
Go言語がクロスプラットフォーム開発に強い理由
Go言語が多くのエンジニアに支持されている理由の一つが、このクロスプラットフォーム対応のしやすさです。Go言語はコンパイルすると単一の実行ファイルとして生成されるため、環境依存の問題が起きにくい特徴があります。つまり生成されたバイナリファイルを別の環境にコピーするだけで、そのままプログラムを実行できるケースが多いのです。
例えばWindowsでGo言語のツールを開発し、そのプログラムをLinuxサーバーに配置して実行することも可能です。このような開発スタイルはサーバー開発やクラウド開発、コマンドラインツールの開発などでよく利用されます。
またGo言語はコンパイル速度が非常に高速なため、クロスコンパイルを何度も試しながら開発することができます。開発効率の高さもGo言語が人気を集める理由の一つと言えるでしょう。
クロスコンパイルの練習用サンプルプログラム
最後に、クロスコンパイルを実際に体験するための簡単なGo言語のサンプルプログラムを紹介します。このプログラムは文字列を表示するだけのシンプルなものですが、クロスコンパイルの動作を確認するには十分です。
package main
import "fmt"
func main() {
fmt.Println("Go言語のクロスコンパイル確認")
}
このプログラムを作成したあとにGOOSとGOARCHを指定してgo buildコマンドを実行すると、各プラットフォーム向けの実行ファイルが作られます。Windows用、Linux用、Mac用のバイナリをそれぞれ作って実行してみることで、Go言語のクロスコンパイルの便利さを実感できるでしょう。
生徒
今日はGo言語のクロスコンパイルについて学びましたが、思っていたよりも簡単でした。GOOSとGOARCHを指定するだけで、WindowsやLinuxやMac用のプログラムを作れるのはとても便利ですね。
先生
その通りです。Go言語はマルチプラットフォーム対応がとても簡単な言語です。GOOSでオペレーティングシステムを指定し、GOARCHでCPUアーキテクチャを指定するだけで、別の環境向けの実行ファイルを作ることができます。
生徒
Linuxサーバーで動くプログラムも、Windowsで開発しながら作れるということですよね。
先生
そうです。例えばWindowsで開発しながらLinuxサーバー用のプログラムをビルドすることもできます。これはサーバー開発やクラウド開発では非常に便利な機能です。
生徒
これからGo言語でツールを作るときは、Windows用だけではなくLinuxやMacでも動くようにクロスコンパイルを試してみたいと思います。
先生
とても良い考えです。Go言語のクロスコンパイルを理解しておくと、マルチプラットフォーム対応のツール開発やサーバー開発がとてもスムーズになります。ぜひいろいろなOS向けのプログラムを作って経験を積んでみてください。
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!