Goにおける「cgo: C compiler "gcc" not found」エラーの解決方法

beginner🔷 Go2026-07-22| Windows, Linux, macOS; Go 1.x; CGOを使用するプロジェクト (例: go-sqlite3, confluent-kafka-go)

Error Message

cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%
#go#cgo#gcc#ビルドエラー#windows

エラーの内容Cベースの依存関係を含むプロジェクトで go buildgo run を実行した際、おそらくこの壁に突き当たったことでしょう。エラーメッセージは簡潔です。

cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%

原因通常、Goは外部ツールを必要とせず、単一の静的バイナリにコンパイルされます。しかし、SQLiteドライバ (go-sqlite3) や Kafkaクライアント など、多くの人気ライブラリは CGO に依存しています。この仕組みによって、Goから既存のCコードを呼び出すことができます。

GCCのようなCコンパイラがないと、Goはこれらの低レベルなファイルを処理できません。システムのPATHに gcc が含まれていない場合、ビルドツールチェーンは処理を中断します。GoとCの橋渡しをするために、動作するコンパイラが必要です。

Windowsでの解決方法Windowsには標準でCコンパイラが搭載されていないため、このエラーはWindowsユーザーにとって最も一般的です。GCCをセットアップするには、主に3つの信頼できる方法があります。

方法1: Chocolatey (最短の方法)すでにChocolateyを使用している場合は、手動でのダウンロードは不要です。管理者権限でPowerShellを開き、次のコマンドを実行してください。

choco install mingw

これによりMinGW-w64ディストリビューションがインストールされます。完了後(通常2〜3分かかります)、ターミナルを再起動して環境変数を反映させてください。

方法2: MSYS2 (長期的な安定性に最適)MSYS2は、最新のGCCビルドを提供する堅牢な環境です。多くのGoコントリビューターに好まれている選択肢です。

  • msys2.org からインストーラーをダウンロードします。- MSYS2 UCRT64 ターミナルを起動します。- 次のコマンドを実行して、ツールチェーン一式を取得します。``` pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

最後に、`C:\msys64\ucrt64\bin` をWindowsのシステム環境変数PATHに追加します。これにより、プロジェクトをビルドする際にGoが `gcc.exe` を見つけられるようになります。
### 方法3: 手動インストール- GitHubまたはSourceForgeからMinGW-w64のファイルをダウンロードします。- `C:\mingw64` のような分かりやすいディレクトリに解凍します。- スタートメニューを開き、「システム環境変数の編集」を検索します。- **システム環境変数** セクションで **Path** を探し、**編集** をクリックします。- リストに `C:\mingw64\bin` を追加し、変更を保存します。## Linuxでの解決方法Linuxディストリビューションでは、この解決は非常に簡単です。標準の開発パッケージをインストールするだけで、ディスク容量も通常100MB程度しか消費しません。
### Ubuntu / Debian / Mint```
sudo apt update && sudo apt install build-essential

CentOS / RHEL / Fedora```

sudo dnf groupinstall "Development Tools"


### Arch Linux```
sudo pacman -S base-devel

macOSでの解決方法Appleは「Command Line Tools」という簡略化されたパッケージを提供しています。12GBもある巨大なXcode IDEは不要で、約500MBのダウンロードで十分です。

xcode-select --install

ソフトウェアアップデートのポップアップで「インストール」をクリックします。完了すると、gcc(Macでは実際にはClangコンパイラへのショートカット)が使用可能になります。

「CGOは不要」な場合の回避策場合によっては、Cコンパイラを必要としないこともあります。プロジェクトが厳密にCの機能を必要としない場合、GoにCGOを完全にスキップするように指示できます。これにより、よりポータブルなバイナリが作成され、GCCの要件を回避できます。

CGO_ENABLED フラグを0に設定してビルドを試してみてください。

# Windows (PowerShell)
$env:CGO_ENABLED="0"; go build

# Linux / macOS
CGO_ENABLED=0 go build

注意: github.com/mattn/go-sqlite3 を使用している場合、この方法は失敗します。この特定のライブラリはCGOを必要とします。どうしてもCコンパイラを使いたくない場合は、modernc.org/sqlite のような純粋なGoの実装(Pure Go)に切り替えてください。

確認: 修正されたか?新しいターミナルウィンドウを開き、次のコマンドを実行してコンパイラのバージョンを確認します。

gcc --version

gcc (MinGW-W64) 13.2.0 のような出力が表示されるはずです。次に、Goが変更を認識しているか確認します。

go env CGO_ENABLED
go build ./...

go env1 を返し、ビルドがエラーなしで完了すれば、環境設定は成功です。

今後のためのヒント- Docker化: CI/CDには golang:1.22-bookworm イメージを使用しましょう。これには build-essential がプリインストールされているため、セットアップの手間が省けます。- インポートの確認: 依存関係を追加する前に、「Pure Go」バージョンが存在するか確認してください。純粋なGoライブラリはコンパイルが速く、クロスコンパイルも容易です。- GitHub Actions: クラウド上でのビルドが失敗する場合は、ワークフローで ubuntu-latest を使用しているか確認してください。これにはデフォルトでGCCが含まれています。

Related Error Notes