Go言語でLinux向けにクロスコンパイルする方法を完全解説!初心者でも理解できるマルチプラットフォーム開発
生徒
「Go言語ってWindowsで作ったプログラムをLinuxでも動かすことができるんですか?」
先生
「できます。Go言語にはクロスコンパイルという機能があり、別のOS向けのプログラムを作ることができます。」
生徒
「クロスコンパイルってなんですか?」
先生
「簡単に言うと、今使っているパソコンとは違うOS向けの実行ファイルを作ることです。例えばWindowsのパソコンでLinux用のプログラムを作ることができます。」
生徒
「それは便利ですね。どうやって作るんですか?」
先生
「Go言語ではGOOSとGOARCHという環境変数を指定するだけでLinux向けのクロスコンパイルができます。それでは順番に見ていきましょう。」
1. Go言語のクロスコンパイルとは
Go言語はマルチプラットフォーム開発に強いプログラミング言語として知られています。マルチプラットフォームとは、WindowsやLinuxやmacOSなど複数のOSで動作するプログラムを作れるという意味です。
通常のプログラム開発では、WindowsならWindowsでコンパイルし、LinuxならLinuxでコンパイルする必要があります。しかしGo言語では、1つの環境から別のOS向けのプログラムを作ることができます。
この仕組みをクロスコンパイルと呼びます。クロスコンパイルとは、自分が使っているパソコンとは違う環境向けのプログラムを作る技術です。
例えば次のような開発が可能になります。
- WindowsのパソコンでLinuxサーバー用プログラムを作る
- macOSでLinuxアプリケーションをビルドする
- LinuxサーバーでWindows用ツールを作る
特にLinuxはサーバー環境で多く利用されているため、Go言語でLinux向けにクロスコンパイルする方法は非常に重要な知識になります。
2. GOOSとGOARCHとは
Go言語でクロスコンパイルを行うときに重要になるのがGOOSとGOARCHという環境変数です。
環境変数とは、プログラムの動作を設定するための値のことです。簡単に言うとプログラムの設定情報のようなものです。
GOOSはターゲットとなるOSを指定するための設定です。
- windows
- linux
- darwin
GOARCHはCPUの種類を指定する設定です。
- amd64
- 386
- arm
例えばLinuxの一般的なサーバー環境では、linuxとamd64の組み合わせがよく使われます。これはLinuxの64ビットCPU向けのプログラムという意味になります。
このようにGo言語ではGOOSとGOARCHを指定するだけで、Linux向けのバイナリファイルを簡単に作ることができます。
3. Linux向けにクロスコンパイルする基本コマンド
それでは実際にGo言語でLinux向けにクロスコンパイルを行う方法を見てみましょう。まずは簡単なサンプルプログラムを作ります。
package main
import "fmt"
func main() {
fmt.Println("Hello Linux")
}
このプログラムをLinux向けにビルドするには、GOOSとGOARCHを指定してgo buildコマンドを実行します。
GOOS=linux GOARCH=amd64 go build main.go
このコマンドを実行すると、Linuxで動作する実行ファイルが生成されます。Windowsで作成しても、Linuxサーバーにコピーすればそのまま実行できます。
Go言語のクロスコンパイルはとてもシンプルで、特別なツールをインストールする必要がない点が大きな特徴です。
4. 出力ファイル名を指定する方法
Linux向けの実行ファイルを作るときは、ファイル名を指定することもできます。サーバーにアップロードするときに名前をわかりやすくしておくと管理が簡単になります。
GOOS=linux GOARCH=amd64 go build -o app-linux main.go
このコマンドを実行すると、app-linuxという名前のLinux用バイナリが作成されます。
Linuxでは拡張子がなくても実行ファイルとして扱われます。そのためWindowsのexeのような拡張子は必要ありません。
実際にLinuxサーバーに転送するときはscpやftpなどを使ってファイルをアップロードします。その後chmodコマンドで実行権限を付けることもあります。
5. 簡単な計算プログラムをLinux向けにビルドする
次に少しだけプログラムらしいサンプルを作ってみます。簡単な足し算を行うGo言語のプログラムです。
package main
import "fmt"
func main() {
a := 10
b := 20
fmt.Println("合計:", a+b)
}
このプログラムも同じ方法でLinux向けにクロスコンパイルできます。
GOOS=linux GOARCH=amd64 go build -o calc-linux main.go
作成されたファイルをLinuxで実行すると次のような結果になります。
合計: 30
このようにGo言語ではWindowsでもmacOSでもLinux用の実行ファイルを作ることができます。サーバーアプリケーション開発では非常に便利な機能です。
6. Linuxクロスコンパイルの注意点
Go言語のクロスコンパイルはとても便利ですが、いくつか注意点もあります。
まずLinuxのCPUアーキテクチャを確認することが重要です。サーバーによってはamd64ではなくarmを使っている場合があります。CPUが違うと実行できません。
次にファイルの実行権限です。Linuxでは実行ファイルに実行権限が必要になります。もし実行できない場合は次のコマンドを使います。
chmod +x app-linux
またLinuxサーバーではライブラリ依存の問題が起きる場合もあります。ただしGo言語は基本的に静的リンクという仕組みを使うため、ほとんどの場合はそのまま動作します。
この点がGo言語がサーバー開発やクラウド開発で人気の理由の一つです。
7. Linux向けクロスコンパイルが活躍する場面
Go言語のLinuxクロスコンパイルは多くの開発現場で利用されています。特にサーバーアプリケーションやクラウドサービスではLinux環境が標準的です。
例えば次のような場面で役立ちます。
- Webサーバーアプリケーションの開発
- Dockerコンテナ用アプリケーション
- Linuxサーバーツール開発
- クラウドサービスのバックエンド開発
開発者は普段使っているWindowsやmacOSで開発し、完成したプログラムをLinux向けにビルドしてサーバーへ配置します。この流れがGo言語の一般的な開発スタイルです。
Go言語のクロスコンパイルはとても高速で、設定もシンプルです。そのため初心者でもすぐにマルチプラットフォーム開発を体験できます。
まとめ
Go言語のLinuxクロスコンパイルを振り返る
ここまで、Go言語でLinux向けにクロスコンパイルする方法について詳しく解説してきました。Go言語はマルチプラットフォーム開発に非常に強いプログラミング言語であり、WindowsやmacOSなどの開発環境からLinux向けの実行ファイルを簡単に作成できる特徴があります。
一般的なプログラミング言語では、Linuxで動作するプログラムを作るためにはLinux環境でコンパイルする必要がある場合が多くあります。しかしGo言語ではクロスコンパイルという仕組みを使うことで、現在使っているOSとは違うOS向けのプログラムを簡単にビルドすることができます。
特にサーバー開発ではLinuxが広く使われています。Webサーバー、APIサーバー、クラウドサービス、Dockerコンテナ、バックエンドシステムなど、多くのサービスがLinux上で動作しています。そのためGo言語でLinux向けのバイナリを作る方法を理解しておくことは、実務開発でも非常に重要な知識になります。
Go言語のクロスコンパイルで最も重要になるのがGOOSとGOARCHという環境変数です。GOOSはターゲットとなるOSを指定する設定であり、GOARCHはCPUアーキテクチャを指定する設定です。例えばLinuxサーバー向けのプログラムを作る場合は、linuxとamd64の組み合わせを使うことが一般的です。
GOOS=linux GOARCH=amd64 go build main.go
このコマンドを実行するだけでLinux向けの実行ファイルを作成できます。特別なツールや複雑な設定は必要ありません。このシンプルさこそがGo言語の大きな魅力の一つです。
また、出力ファイル名を指定することで管理しやすいバイナリを作ることもできます。サーバーにアップロードする場合や複数のOS向けにビルドする場合は、ファイル名を分かりやすくしておくと便利です。
GOOS=linux GOARCH=amd64 go build -o app-linux main.go
Linuxでは拡張子がなくても実行ファイルとして扱われるため、Windowsのようにexe拡張子を付ける必要はありません。ビルドしたファイルはそのままLinuxサーバーへ転送し、必要に応じて実行権限を設定すれば動作します。
chmod +x app-linux
さらにGo言語のプログラムは基本的に静的リンクでビルドされるため、外部ライブラリへの依存が少ないという特徴があります。これにより、Linuxサーバーに配置しただけでそのまま実行できるケースが多く、サーバーアプリケーションやクラウドサービスの開発に非常に向いています。
実際の開発現場では、WindowsやmacOSでプログラムを開発し、Go言語のクロスコンパイル機能を使ってLinux用バイナリを作成し、そのファイルをサーバーへ配置するという流れが一般的です。この開発スタイルは効率が良く、ビルドも高速であるため、多くのエンジニアに支持されています。
また、Go言語はシンプルな構文と高速なコンパイル速度を持つため、初心者でも比較的早くサーバーアプリケーション開発を始めることができます。Linux向けクロスコンパイルを理解することで、Web開発、クラウド開発、サーバーツール開発など、さまざまな分野でGo言語を活用できるようになります。
今回学んだ内容を整理すると、Go言語でLinux向けのクロスコンパイルを行うためには、GOOSとGOARCHを指定してgo buildコマンドを実行するだけでよいという非常にシンプルな仕組みです。この仕組みを理解しておくことで、Go言語のマルチプラットフォーム開発の強みを最大限に活かすことができます。
これからGo言語を使ってサーバーアプリケーションやツール開発を行う場合は、Linuxクロスコンパイルの知識が必ず役に立ちます。開発環境と実行環境が異なる場合でも、Go言語なら効率的にアプリケーションをビルドして配布できるため、実践的な開発スキルとしてぜひ身につけておきましょう。
生徒
「Go言語のクロスコンパイルって思っていたより簡単ですね。GOOSとGOARCHを指定するだけでLinux用のプログラムが作れるのは便利ですね。」
先生
「その通りです。Go言語は最初からマルチプラットフォーム開発を意識して作られているため、クロスコンパイルがとても簡単にできるようになっています。」
生徒
「Linuxサーバーで動かすプログラムを作るときも、Windowsのパソコンで開発してそのままLinux用のバイナリを作れるんですね。」
先生
「はい。例えばWebサーバーやAPIサーバー、クラウドサービスなどはLinuxで動くことが多いので、Go言語のクロスコンパイル機能はとても役立ちます。」
生徒
「GOOSがOSでGOARCHがCPUの種類でしたね。Linuxサーバーだとlinuxとamd64の組み合わせがよく使われるんでしたよね。」
先生
「その理解で正しいです。もしARMのサーバーで動かす場合はarmなどを指定します。サーバーのCPUアーキテクチャを確認することも大切です。」
生徒
「ビルドしたあとにLinuxで実行できない場合は、chmodで実行権限を付けることもあるんですよね。」
先生
「そうです。Linuxでは実行権限が必要なので、その点も覚えておくとよいでしょう。Go言語は静的リンクでビルドされることが多いので、サーバーに配置するだけで動くことも多いです。」
生徒
「Go言語がサーバー開発やクラウド開発で人気の理由が分かってきました。クロスコンパイルが簡単なのは大きなメリットですね。」
先生
「その通りです。Go言語はシンプルで高速にビルドできるため、Linuxサーバーアプリケーション開発にはとても向いています。これからもいろいろなプログラムを作りながら理解を深めていきましょう。」
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!