Go言語のバイナリサイズを小さくする方法を徹底解説!初心者でも分かるビルド最適化テクニック
生徒
「Go言語で作ったプログラムのファイルサイズがすごく大きいんですが、小さくできますか?」
先生
「できます。Go言語はそのままビルドすると情報がたくさん入るので、不要な情報を削ることでサイズを小さくできます。」
生徒
「どうやって削るんですか?」
先生
「ビルド時のオプションや設定を工夫することで、小さく軽い実行ファイルを作ることができます。」
1. Go言語のバイナリサイズが大きくなる理由
Go言語で作成したプログラムは、単体で動作する実行ファイルとして生成されます。これはとても便利ですが、その代わりに多くの情報が含まれるため、ファイルサイズが大きくなりやすい特徴があります。
例えば、デバッグ情報やシンボル情報と呼ばれる情報が含まれます。これはプログラムの動きを調査したり、エラーの原因を特定するために役立つ情報です。
しかし、実際に配布するプログラムではこれらの情報が不要なことが多く、削除することでファイルサイズを大きく減らすことができます。
2. ldflagsを使って不要な情報を削除する
Go言語では、ビルド時にldflagsというオプションを使うことで、不要な情報を削除できます。特に重要なのが、sとwという指定です。
sはシンボル情報を削除し、wはデバッグ情報を削除します。これにより、実行ファイルのサイズを大幅に小さくできます。
go build -ldflags="-s -w" main.go
このコマンドを使うだけで、サイズが半分近くになることもあります。初心者の方はまずこの方法を覚えておくとよいでしょう。
3. 不要なパッケージを減らす
Go言語では、importで読み込んだパッケージがそのままバイナリに含まれます。そのため、使っていないパッケージがあると、それだけでサイズが増えてしまいます。
例えば、以下のように不要なパッケージを削除するだけでもサイズ削減につながります。
package main
import "fmt"
func main() {
fmt.Println("Hello")
}
シンプルなコードほど、生成されるバイナリも小さくなります。使っていない機能は積極的に削除しましょう。
4. CGOを無効化して軽量化する
Go言語にはCGOという仕組みがあり、C言語のコードを呼び出すことができます。しかし、これを有効にすると、追加のライブラリが含まれ、バイナリサイズが大きくなることがあります。
CGOを使わない場合は、無効にすることで軽量化できます。
CGO_ENABLED=0 go build main.go
この設定をすることで、よりシンプルで軽い実行ファイルを作ることができます。
5. UPXでバイナリを圧縮する
さらにサイズを小さくしたい場合は、UPXというツールを使って圧縮する方法があります。これは完成した実行ファイルを圧縮するツールです。
圧縮するとファイルサイズが大きく減りますが、起動時に展開処理が入るため、少しだけ起動が遅くなることがあります。
upx --best app
配布用途や容量制限がある場合にはとても有効な方法です。
6. build tagsを活用する
Go言語ではbuild tagsという仕組みを使って、特定のコードだけをビルド対象にすることができます。これにより、不要な機能を除外できます。
//go:build prod
package main
func main() {
println("production build")
}
開発用のコードやテスト用の処理を除外することで、バイナリサイズをさらに小さくできます。
7. stripコマンドでさらに削減する
ビルド後にstripコマンドを使うことで、さらに不要な情報を削除できます。これはLinuxなどで使えるツールです。
strip app
ldflagsと組み合わせることで、より効果的にサイズを削減できます。
8. クロスコンパイルとサイズの関係
Go言語はクロスコンパイルが簡単にできるのが特徴です。しかし、ターゲットとなるOSやCPUによって、バイナリサイズが変わることがあります。
例えば、Linux向けとWindows向けでは含まれる情報が異なるため、サイズにも差が出ます。
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" main.go
用途に応じて最適な設定を選ぶことが重要です。
9. バイナリサイズ最適化のポイントまとめ的解説
Go言語でバイナリサイズを小さくするには、ビルド時の工夫がとても重要です。特にldflagsによる情報削除は基本中の基本であり、初心者でもすぐに取り入れることができます。
さらに不要なパッケージを減らす、CGOを無効にする、UPXで圧縮するなど、複数の方法を組み合わせることで、より小さく軽い実行ファイルを作ることができます。
これらのテクニックは、配布サイズを抑えたいときや、軽量なアプリケーションを作りたいときに非常に役立ちます。特にクラウド環境やコンテナ環境では重要なポイントになります。
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!