macOSでのGoのインストール手順と Go Modules について

この記事では、macOSに Homebrew を利用して Go をインストールする方法と、Go の依存管理システムである **Go Modules** について、解説します。さらに、実際のプロジェクトでのモジュール初期化の例を紹介します。

---

## 前提条件

- macOS (例: macOS Sequoia)
- [Homebrew](https://brew.sh/) が未導入の場合は、先にインストールしてください

---

## 1. Homebrew のインストール

Homebrew がまだインストールされていない場合、ターミナルを開き、以下のコマンドを実行してインストールします。

```sh
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

Homebrew のインストールが完了すれば、`brew` コマンドが利用可能になります。  
すでにインストール済みの場合は、このステップはスキップしてください。

---

## 2. Go のインストール

Homebrew を使って、最新の安定版 Go をインストールします。  
ターミナルで以下のコマンドを実行してください。

```sh
brew install go
```

Homebrew が自動的に Go をダウンロードし、インストールしてくれます。

---

## 3. インストールの確認

Go が正しくインストールされたか、以下のコマンドで確認します。

```sh
go version
```

たとえば、以下のような出力が得られれば成功です。

```
go version go1.23.6 darwin/amd64
```

また、`which go` コマンドで Go の実行ファイルの場所も確認できます。

```sh
which go
```

出力例:

```
/usr/local/bin/go
```

> **備考:**  
> 出力されたパスが正しければ、Homebrew 経由でインストールされた Go が正しく PATH に設定されています。Intel Mac と Apple Silicon でのパスの違いに注意してください。

---

## 4. Go Modules とは？

Go 1.11 以降、Go の依存管理システムとして **Go Modules** が標準で導入されています。  
ここでは、Go Modules について簡単に解説します。

### Go Modules の概要

- **目的:**  
  プロジェクトで利用する外部パッケージ（ライブラリ）のバージョンや依存関係を管理するための仕組みです。  
  以前は `GOPATH` を使って一括管理していましたが、Go Modules ではプロジェクト単位で管理できるため、より柔軟かつ再現性のあるビルド環境を実現します。

- **特徴:**  
  - **プロジェクト単位の管理:**  
    各プロジェクトに `go.mod` ファイルが作成され、どのライブラリのどのバージョンを使用しているかが明示されます。
  - **再現性のあるビルド:**  
    チーム開発やCI/CD環境で、全員が同じ依存関係でビルドできるため、環境依存の問題を防げます。
  - **シンプルな操作:**  
    `go mod init` でモジュールを初期化し、`go get` で必要なパッケージを追加するなど、コマンド操作が簡単です。

---

## 5. プロジェクトでの Go Modules の利用準備

ここでは、実際のプロジェクト例として、GitHub 上のリポジトリ `github.com/your-username/project_name` のサブディレクトリ **tool** を対象に、Go Modules を初期化する手順を紹介します。

### プロジェクト構成例

```
project_name/ # プロジェクト全体
├── .git/
├── README.md
└── tool/ # Go コードのあるディレクトリ
    ├── Dockerfile
    ├── go.mod       ← 初期化対象
    └── src/
        └── main.go
```

### モジュールの初期化

1. ターミナルで **tool** ディレクトリに移動します。

   ```sh
   cd project_name/tool
   ```

2. 以下のコマンドを実行して、Go モジュールを初期化します。  
   リポジトリの構成に合わせて、モジュール名は `github.com/your-username/project_name/tool` とします。

   ```sh
   go mod init github.com/your-username/project_name/tool
   ```

   実行結果は次のようになります。

   ```
   go: creating new go.mod: module github.com/your-username/project_name/tool
   go: to add module requirements and sums:
           go mod tidy
   ```

3. `ls -la` でファイル一覧を確認すると、`go.mod` ファイルが生成されていることがわかります。

   ```sh
   ls -la
   ```

   出力例:

   ```
   total 24
   drwxr-xr-x   6 user  staff   192  Feb  8 06:46 .
   drwxr-xr-x   6 user  staff   192  Feb  8 06:46 ..
   -rw-r--r--   1 user  staff    62  Feb  8 06:46 go.mod
   drwxr-xr-x   2 user  staff    64  Feb  8 05:53 src
   -rw-r--r--   1 user  staff     0  Feb  8 05:54 Dockerfile
   ```

> **補足:**  
> 「to add module requirements and sums: go mod tidy」とのメッセージは、今後依存パッケージを追加する際に `go mod tidy` コマンドを実行することで、不要な記述の削除や依存関係の整理が行えることを示しています。

---

## 6. まとめ

この記事では、macOS に Homebrew を利用して Go をインストールする手順と、Go Modules の基本概念および実際のプロジェクトでのモジュール初期化方法について解説しました。

- **Homebrew のインストール:**  
  未導入の場合、上記の手順で Homebrew をインストールしてください。

- **Go のインストール:**  
  `brew install go` を実行して最新の Go をインストール。

- **動作確認:**  
  `go version` と `which go` コマンドでインストール状況をチェック。

- **Go Modules の概要:**  
  プロジェクト単位で依存管理を行い、再現性のあるビルド環境を実現する仕組みです。

- **モジュール初期化:**  
  サブディレクトリ **tool** で `go mod init github.com/your-username/project_name/tool` を実行し、`go.mod` ファイルを生成。

これで macOS 上に Go の開発環境が整い、プロジェクトごとに依存関係を管理できるようになりました。ぜひこれらの手順を参考に、Go を使った開発を進めてみてください。