Go言語でWindows向けにビルドする方法を完全解説!LinuxやmacOSからクロスコンパイルする手順
生徒
「Go言語で作ったプログラムをWindowsで動かしたいんですが、今使っているのはLinuxなんです。別のパソコンが必要ですか?」
先生
「いいえ、Go言語なら同じパソコンからWindows用のプログラムを作ることができます。これをクロスコンパイルと呼びます。」
生徒
「クロスコンパイルって何ですか?」
先生
「簡単に言うと、今使っているパソコンとは違う種類のパソコン向けにプログラムを作ることです。例えばLinuxでWindows用の実行ファイルを作ることができます。」
生徒
「それは便利ですね。Go言語ではどうやって作るんですか?」
先生
「GOOSとGOARCHという設定を使います。これを指定するだけでWindows向けのプログラムをビルドできます。それでは順番に見ていきましょう。」
1. Go言語のクロスコンパイルとは
Go言語はマルチプラットフォーム対応のプログラミング言語です。マルチプラットフォームとは、Windows、Linux、macOSなど複数の環境で同じプログラムを動かせる仕組みのことです。
通常プログラムを作ると、そのプログラムは作ったパソコンと同じ環境でしか動きません。しかしGo言語では、別の環境向けのプログラムを簡単に作ることができます。
この仕組みをクロスコンパイルと呼びます。
例えば次のようなことが可能です。
- LinuxからWindows向けのプログラムを作る
- macOSからLinux向けのプログラムを作る
- WindowsからmacOS向けのプログラムを作る
つまりGo言語では、1台のパソコンだけで複数の環境向けのソフトウェアを作ることができます。これはGo言語の大きな特徴の一つです。
2. GOOSとGOARCHとは
Go言語でWindows向けにビルドする場合、GOOSとGOARCHという環境変数を設定します。
環境変数とは、プログラムの動作を決めるための設定情報のようなものです。パソコンに対して、どの環境向けにプログラムを作るのかを伝える役割があります。
GOOSはオペレーティングシステムを意味します。例えばWindowsやLinuxなどの種類を指定します。
GOARCHはCPUの種類を意味します。CPUとはパソコンの頭脳のような部分で、計算や処理を行う重要な部品です。
よく使われる設定は次の通りです。
- GOOS=windows
- GOARCH=amd64
amd64は現在多くのパソコンで使われている64bitCPUのことを指します。Windowsパソコンのほとんどはこの形式なので、この組み合わせを覚えておくと便利です。
3. Windows向けにビルドする基本コマンド
LinuxやmacOSからWindows向けのプログラムを作る場合は、次のようなコマンドを実行します。
GOOS=windows GOARCH=amd64 go build main.go
このコマンドを実行すると、Windowsで実行できるプログラムが作られます。
Windowsのプログラムは拡張子がexeになります。拡張子とはファイルの種類を表す名前の一部です。例えば次のようなファイルが作成されます。
main.exe
このexeファイルをWindowsのパソコンにコピーすれば、そのまま実行できます。
4. 簡単なGoプログラムをWindows向けにビルドしてみよう
それでは実際に簡単なGoプログラムを作ってWindows向けにビルドしてみましょう。
まずは次のようなGo言語のプログラムを作ります。
package main
import "fmt"
func main() {
fmt.Println("Hello Windows")
}
このプログラムは画面に文字を表示するだけのシンプルなプログラムです。
次にWindows向けにビルドします。
GOOS=windows GOARCH=amd64 go build hello.go
すると次のようなWindows用の実行ファイルが作成されます。
hello.exe
このファイルをWindowsで実行すると、プログラムが動作します。
5. 出力ファイル名を指定してビルドする方法
Go言語ではビルドするときにファイル名を自由に指定することもできます。
これはoオプションを使います。
GOOS=windows GOARCH=amd64 go build -o app.exe main.go
このコマンドを実行すると、app.exeという名前のWindows実行ファイルが作成されます。
ソフトウェア開発では、プログラムの名前をわかりやすくすることが重要です。例えば次のような名前にすると用途がわかりやすくなります。
- calculator.exe
- server.exe
- tool.exe
このようにファイル名を指定すると管理がしやすくなります。
6. 環境変数を使った別の書き方
LinuxやmacOSでは、環境変数を事前に設定してからビルドする方法もあります。
次のように設定します。
export GOOS=windows
export GOARCH=amd64
go build main.go
この方法では、何度も同じ設定でビルドする場合に便利です。
例えばWindows向けのアプリケーションを開発している場合、毎回GOOSやGOARCHを書かなくてもビルドできます。
ただしこの設定はターミナルのセッション中だけ有効です。新しくターミナルを開いた場合は再度設定が必要になります。
7. クロスコンパイルが役立つ場面
Go言語のクロスコンパイルはソフトウェア開発で非常に便利です。
例えば次のような場面で活用されます。
- LinuxサーバーでWindowsツールを作る
- macOSでWindowsアプリをビルドする
- 複数のOS向けに同時にソフトを公開する
多くの開発者はLinuxやmacOSで開発を行いながら、Windowsユーザー向けのソフトウェアも提供しています。
Go言語は標準機能だけでクロスコンパイルができるため、追加ツールをインストールする必要がありません。このシンプルさがGo言語の人気の理由の一つです。
Go言語を使えば、一つのソースコードから複数の環境向けのプログラムを作ることができます。これによりソフトウェア開発の効率が大きく向上します。
まとめ
Go言語のクロスコンパイルとWindowsビルドの重要ポイント
今回の記事では、Go言語を使ってLinuxやmacOSの環境からWindows向けのプログラムをビルドする方法について詳しく学びました。Go言語はマルチプラットフォーム対応のプログラミング言語であり、一つのソースコードから複数のOS向けの実行ファイルを作成できるという大きな特徴があります。この仕組みはクロスコンパイルと呼ばれ、ソフトウェア開発の現場でも非常に重要な技術として活用されています。
通常のプログラム開発では、Windows用のプログラムはWindows環境で、Linux用のプログラムはLinux環境で作る必要があります。しかしGo言語ではそのような制限が少なく、LinuxやmacOSのパソコンからWindows用の実行ファイルを簡単に作成できます。これはGo言語のコンパイラが非常に優れているためであり、追加ツールを使わなくても標準機能だけでクロスコンパイルが実現できるのが特徴です。
Windows向けにビルドするためには、GOOSとGOARCHという環境変数を設定する必要があります。GOOSはターゲットとなるオペレーティングシステムを指定する変数であり、windowsを指定することでWindows向けのプログラムを作成できます。一方でGOARCHはCPUアーキテクチャを指定するための設定であり、現在多くのパソコンで使用されているamd64を指定することで一般的な六十四ビット環境向けの実行ファイルを作ることができます。
例えば次のようなコマンドを実行することで、LinuxやmacOSからWindows向けのプログラムをビルドできます。
GOOS=windows GOARCH=amd64 go build main.go
このコマンドを実行すると、Windows環境で実行できるexe形式のプログラムが生成されます。生成されたexeファイルはWindowsパソコンにコピーするだけで実行できるため、別の環境で再コンパイルする必要はありません。Go言語のこのシンプルなビルド仕組みは、クロスプラットフォーム開発を効率化する大きなメリットとなっています。
また、ビルド時には出力ファイル名を指定することも可能です。例えば次のようにoオプションを使うことで、任意の名前の実行ファイルを作ることができます。
GOOS=windows GOARCH=amd64 go build -o tool.exe main.go
このようにファイル名を指定することで、作成したソフトウェアの用途を分かりやすく整理できます。実際のソフトウェア開発では、アプリケーション名やツール名をファイル名にすることで管理がしやすくなります。特に複数のプログラムを開発している場合には、ビルドファイルの名前を整理しておくことが重要です。
環境変数を利用したビルド方法
さらにLinuxやmacOSでは、環境変数を事前に設定してからビルドを実行する方法もあります。この方法を使うことで、毎回GOOSやGOARCHをコマンドに書く必要がなくなります。
export GOOS=windows
export GOARCH=amd64
go build main.go
この設定を行うことで、そのターミナルのセッション中はWindows向けのビルドが自動的に行われるようになります。Windows向けのアプリケーションを開発している場合には、この方法を使うことで作業効率を大きく向上させることができます。
Go言語のクロスコンパイル機能は、ソフトウェア開発者にとって非常に便利な機能です。例えばLinuxサーバー上でWindowsツールを作成したり、macOSの開発環境から複数のOS向けアプリケーションを同時にビルドしたりすることが可能になります。これにより開発環境を統一しながら、さまざまなユーザー向けにソフトウェアを提供できます。
特にGo言語はシンプルなビルドシステムと高速なコンパイル性能を持っているため、クロスプラットフォーム開発を行う際に非常に相性の良いプログラミング言語です。サーバーツール、コマンドラインツール、デスクトップツールなど、さまざまな用途のソフトウェアを効率よく開発できます。
今回学んだGOOSとGOARCHの設定方法、go buildコマンドの使い方、そしてWindows向け実行ファイルの作成方法を理解しておくことで、Go言語によるマルチプラットフォーム開発の基礎をしっかり身につけることができます。Go言語でアプリケーション開発を行う際には、ぜひクロスコンパイルの仕組みを活用して効率的なソフトウェア開発を行っていきましょう。
生徒
Go言語のクロスコンパイルについてよく分かりました。LinuxやmacOSからWindows向けのプログラムを作れるのはとても便利ですね。
先生
そうですね。Go言語はマルチプラットフォーム対応のプログラミング言語なので、一つのソースコードから複数の環境向けのプログラムを作ることができます。特にクロスコンパイルはソフトウェア開発の現場でもよく使われています。
生徒
Windows向けにビルドするにはGOOSとGOARCHを指定する必要があるんですよね。
先生
その通りです。GOOSは対象となるオペレーティングシステムを指定する設定で、windowsを指定するとWindows向けのプログラムになります。GOARCHはCPUアーキテクチャを指定する設定で、多くの場合はamd64を指定します。
生徒
つまり次のコマンドを使えばWindows用のプログラムを作れるんですね。
GOOS=windows GOARCH=amd64 go build main.go
先生
そうです。そのコマンドを実行するとWindowsで実行できるexeファイルが作成されます。作成されたファイルをWindowsパソコンにコピーすれば、そのまま実行できます。
生徒
出力ファイルの名前も変更できるんですよね。
GOOS=windows GOARCH=amd64 go build -o app.exe main.go
先生
その通りです。開発したアプリケーションの名前を付けておくと管理がしやすくなります。Go言語のビルド機能はとてもシンプルなので覚えやすいですね。
生徒
Go言語はクロスプラットフォーム開発に向いているプログラミング言語だということがよく分かりました。これからいろいろな環境向けのプログラムを作ってみたいです。
先生
とても良いですね。Go言語のクロスコンパイルを活用すれば、Windows、Linux、macOSなど複数の環境向けのソフトウェアを効率よく開発できます。ぜひ実際にプログラムを書いてビルドを試してみてください。
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!