macOS で Go 言語の開発環境を構築して Hello, world! を出力する

はじめに

Go 公式サイトのパッケージ(.pkg)、Homebrew(ホームブルー)、goenv(ゴーエンブ)から開発環境を構築して Hello, world! を出力する 3 つの方法を解説しています。これから Go を始めてみたい初心者にもわかるように、詰まりやすいポイントや注意点なども説明しています。

検証環境

  • macOS Big Sur 11.5.2

解説

Go 言語の開発環境を構築するには、下記のような 3 つの方法があります。

  1. 公式サイト から提供されているパッケージ(.pkg)でインストールする。
  2. パッケージ管理システムの Homebrew でインストールする。
  3. バージョン管理ツールの goenv でインストールする。

各方法で Go をインストールして Hello, world! を出力するところまでを説明します。

公式サイトのパッケージでインストールする方法

公式サイトの Download and install と手順は同じです。

まずは、公式サイトから提供されている .pkg(パッケージ)をダウンロードします。

ダウンロードした .pkg を開くとインストーラーが起動するので「続ける」をクリックします。

このホリネズミのキャラクターは Gopher(ゴーファー)という名前で、Go 言語のマスコットキャラクターです。

「続ける」をクリックします。

「インストール」をクリックします。

ソフトウェアのインストールを許可します。

インストールが始まるので、完了するまで待ちます。

インストールが完了したら「閉じる」をクリックします。

インストール先を変更していなければ /usr/local/go に Go がインストールされています。

次は、コマンドサーチパスを確認します。この辺りは初学者が混乱しやすいところなので、少し細かく説明します。

コマンドサーチパスとは、実行ファイル名でコマンドを実行できるサーチパス(検索パス)のことです。

実行ファイルとは、コマンドの実体となるファイルのことです。

例えば、pwd(print working directory)コマンドは /bin/pwd と入力しても実行できるように、/bin ディレクトリにコマンドと同名のファイルが存在しています。

この実行ファイルまでのパスを省略できるようにしているのがサーチパスです。

そして、サーチパスを保存している環境変数が PATH です。環境変数(environment variable)とは、OS(Operating System)全体で使える変数のことです。

つまり、pwd コマンドを /bin/pwd と入力しないで pwd だけで実行できるのは、サーチパスを PATH に保存しているからできたということです。やっておいた方があとあと楽ですね。

因みに、PATH にサーチパスを新たに設定することを PATH を通す と言います。

ターミナルを再起動して、echo コマンドで PATH を出力します。

echo $PATH

下記のような実行結果が出力されると思います。

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin

: は区切りです、見やすくすると下記のようになります。

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/go/bin

デフォルトでは /usr/local/go/bin が設定されています。

設定に問題が無ければ go version コマンドで Go のバージョンが出力されます。

go version

go env コマンドで GOPATH の確認をします。GOPATH とは、Go のワークスペースディレクトリの場所のことです。

go env GOPATH

デフォルトで /Users/ユーザー名/go に設定されていることがわかります。ユーザー名の部分に takuya などの文字列が入ります。

GOPATH は任意の場所に指定して問題ありませんが、設定していないと一部のツールが動作しないことがあるので気を付けましょう。

GOPATH に合わせて mkdir (make directory)コマンドで go ディレクトリを作成します。

mkdir ~/go

GOPATH を変更したい場合は export コマンドで GOPATH の場所を指定できます。

export GOPATH=$HOME/go

1 つ注意点があって、GOPATH にホームディレクトリを指定すると他のファイルやディレクトリと混在するので、よっぽど急ぎでなければディレクトリを作成することをオススメします。

次は Hello, World! と出力するプログラムを作成します。公式サイトの Tutorial: Get started with Go に情報がありますが、もう少し簡単なやり方を説明します。

下記のシンプルなコードを記述した hello.go という名前のファイルを作成します。

package main

import "fmt"

func main() {
    fmt.Printf("Hello, world!\n")
}

このファイルを Go のワークスペースディレクトリに移動します。

cd(change directory)コマンドで、カレントディレクトリをワークスペースディレクトリに変更します。

cd ~/go

go run コマンドでパッケージをコンパイル(Compile)して実行します。

Go はコンパイル言語なので、ソースコードをバイナリコードに変換する必要があります。この機械語に翻訳することをコンパイルといいます。

go run hello.go

下記のように Hello, world! と出力されます。

Hello, world!

カレントディレクトリ以下のファイルも読み込む場合は、go build コマンドで一旦コンパイルしてから実行します。

go build hello.go
./hello

Go をアンインストールする場合は、公式サイトの Uninstalling Go に情報があります。

rm コマンドで Go をインストールした /usr/local/go と PATH の /etc/paths.d/go を削除するだけです。

sudo rm -rf /usr/local/go
sudo rm -rf /etc/paths.d/go

Homebrew でインストールする方法

まずは、既に Homebrew(ホームブルー)がインストールされていないか brew -v コマンドでバージョンを確認しましょう。

brew -v

Homebrew をインストールする方法は、インストール に情報があります。リンク先のコマンドをコピーして、ターミナルで実行するだけです。

既に Homebrew がインストールされている場合は、brew update コマンドで最新の formulae(フォーミュラ)を取得しておきましょう。formulae とは、パッケージ定義のことです。

brew update

次は brew upgrade コマンドで formulae を更新します。

brew upgrade

brew cleanup コマンドで古いバージョンのキャッシュクリアをやっておきましょう。

brew cleanup

Homebrew が更新されているか brew -v コマンドでバージョンを確認します。

brew -v

最新の Homebrew にできたら brew install go コマンドで Go をインストールします。

brew install go

ちゃんと Go がインストールされているか go version コマンドでバージョンを確認しましょう。

go version

go env GOROOT コマンドで Go のインストールパスを確認します。

go env GOROOT

/usr/local/Cellar/go/バージョン/libexec のようになっていると思います。バージョンの部分には 1.17.1 のような文字列が入ります。

GOROOT 以下の /bin に実行ファイルがあるので、必要に応じて PATH を通します。

go env GOPATH コマンドで GOPATH を確認します。

go env GOPATH

デフォルトで /Users/ユーザー名/go に設定されていることがわかります。

mkdir コマンドで go ディレクトリを作成します。

mkdir ~/go

次は、Hello, World! と出力するプログラムを作成します。下記のシンプルなコードを記述した hello.go という名前のファイルを作成します。

package main

import "fmt"

func main() {
    fmt.Printf("Hello, world!\n")
}

このファイルを Go のワークスペースディレクトリに移動します。

cd コマンドで、カレントディレクトリをワークスペースディレクトリに変更します。

cd ~/go

go run コマンドでパッケージをコンパイルして実行します。

go run hello.go

下記のように Hello, world! と出力されます。

Hello, world!

Go をアンインストールする場合は brew uninstall go コマンドを実行します。

brew uninstall go

goenv でインストールする方法

goenv のインストール方法は、公式サイトの Basic GitHub CheckoutHomebrew on Mac OS X に情報があります。

2 通りの方法がありますが、最新の Go バージョンを使う必要があるなら Git から goenv をクローンしましょう。最新にする必要が無ければ Homebrew(ホームブルー)からインストールして問題ありません。

理由は、goenv のバージョンには 1 系(1.x.x)と 2 系(2.x.x)があって、現在は Homebrew からインストールすると 1 系になります。最新の更新は 2 系に反映しているので、1 系でインストールできる Go バージョンリストには最新のバージョンがないからです。

2 つのやり方を説明します。

Git から goenv をインストールする方法

公式サイトの Basic GitHub Checkout と手順は同じです。

既に Homebrew で goenv をインストールしていて、1 系から 2 系にバージョンアップしたい場合は brew uninstall goenv コマンドで goenv をアンインストールして、rm コマンドで ~/.goenv を削除します。

brew uninstall goenv
sudo rm -rf ~/.goenv

ここからは goenv をインストールしていない場合と同じです。

git clone コマンドで goenv の Git リポジトリをコピーします。

git clone https://github.com/syndbg/goenv.git ~/.goenv

goenv の PATH を通します。.bash_profile とは、ターミナル起動時に読み込まれる環境設定を設定するファイルのことです。

echo 'export GOENV_ROOT="$HOME/.goenv"' >> ~/.bash_profile
echo 'export PATH="$GOENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(goenv init -)"' >> ~/.bash_profile

exec $SHELL コマンドで PATH の変更が有効になるようにシェルを再起動、又はターミナルを再起動します。

exec $SHELL

goenv install -l コマンドでインストールできる Go のバージョンリストを出力します。

goenv install -l

必要な Go のバージョンを goenv install コマンドに指定してインストールします。

goenv install 1.17.1

新しいバージョンの Go をインストールした後は goenv rehash コマンドを実行しましょう。

goenv rehash

goenv global コマンドで使用する Go のバージョンを設定します。~/.goenv/version ファイルにバージョン名を書き込み、全てのシェルで使用される Go のグローバルバージョンを設定しています。

goenv global 1.17.1

goenv versions コマンドでインストールした Go のバージョンリストと現在設定されているバージョンを確認できます。

goenv versions

goenv に GOPATH と GOROOT を管理させる場合は、eval "$(goenv init -)" の後に PATH を通します。

echo 'export PATH="$GOROOT/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="$PATH:$GOPATH/bin"' >> ~/.bash_profile

exec $SHELL コマンドで PATH の変更が有効になるようにシェルを再起動、又はターミナルを再起動します。

exec $SHELL

go env GOPATH コマンドで GOPATH を確認します。

go env GOPATH

Go のワークスペースディレクトリが /Users/ユーザー名/go/バージョン に設定されていることがわかります。

GOPATH に合わせて mkdir コマンドでディレクトリを作成します。

mkdir ~/go
mkdir ~/go/1.17.1

次は、下記のような Hello, World! と出力するプログラムを作成します、ファイル名は hello.go にしましょう。

package main

import "fmt"

func main() {
    fmt.Printf("Hello, world!\n")
}

このファイルを Go のワークスペースディレクトリに移動します。

cd コマンドでカレントディレクトリをワークスペースディレクトリに変更します。

cd ~/go/1.17.1

go run コマンドでパッケージをコンパイルして実行します。

go run hello.go

下記のように Hello, world! と出力されます。

Hello, world!

goenv をアップグレードする方法は、公式サイトの Upgrading に手順があります。カレントディレクトリを cd $(goenv root) に変更して git pull コマンドを実行するだけです。

cd $(goenv root)
git pull

goenv をアンインストールする方法は、公式サイトの Uninstalling goenv に手順があります。rm -rf `goenv root` コマンドを実行するだけです。

 rm -rf `goenv root`

Homebrew から goenv をインストールする方法

公式サイトの Homebrew on Mac OS X と手順は同じです。

brew install goenv コマンドで goenv をインストールします。

brew install goenv

ちゃんと goenv がインストールされているか goenv -v コマンドでバージョンを確認します。

goenv -v

 eval コマンドで goenv の PATH を通します。

eval "$(goenv init -)"

ターミナルを再起動する度に PATH を通すのが面倒な場合は、.bash_profile にコマンドを設定します。

echo 'eval "$(goenv init -)"' >> ~/.bash_profile

PATH の変更後は exec $SHELL コマンドでシェルを再起動、又はターミナルの再起動を忘れずに。

exec $SHELL

goenv install -l コマンドでインストールできる Go バージョンリストを出力します。

goenv install -l

必要な Go のバージョンを goenv install コマンドに指定してインストールします。

goenv install 1.11.4

goenv versions コマンドでインストールした Go のバージョンリストを出力できます。

goenv versions

goenv global コマンドで使用する Go のバージョンを設定します。

goenv global 1.11.4

新しいバージョンの Go をインストールした後は goenv rehash コマンドを実行します。

goenv rehash

再度 goenv versions コマンドを実行すると、現在設定されている Go のバージョンがわかります。

goenv versions

go env GOPATH コマンドで GOPATH を確認します。

go env GOPATH

デフォルトで /Users/ユーザー名/go に設定されていることがわかります。

mkdir コマンドで go ディレクトリを作成します。

mkdir ~/go

次は、下記のような Hello, World! と出力するプログラムを作成します、ファイル名は hello.go にしましょう。

package main

import "fmt"

func main() {
    fmt.Printf("Hello, world!\n")
}

このファイルを Go のワークスペースディレクトリに移動します。

cd コマンドで、カレントディレクトリをワークスペースディレクトリに変更します。

cd ~/go

go run コマンドでパッケージをコンパイルして実行します。

go run hello.go

下記のように Hello, world! と出力されます。

Hello, world!

goenv をアップグレードする方法は、brew upgrade --fetch-HEAD goenv コマンドを実行するだけです。

brew upgrade --fetch-HEAD goenv

goenv をアンインストールする方法は、公式サイトの Uninstalling goenv に手順があります。brew uninstall goenv コマンドを実行するだけです。

brew uninstall goenv

まとめ

私見を述べると、学習するだけならパッケージ、実務なら goenv かなと思います。

Homebrew から goenv をインストールする方法はちょっと微妙でした。理由は brew install --HEAD goenv コマンドを実行しても最新の Go バージョンリストが取得できなかったからです。解決方法は調べればあると思いますが、初心者には優しくないかな〜と感じました。

以上です。

おわりに

開発環境の構築が終わったら、次は Go 公式サイトのチュートリアル「A Tour of Go」で Go の書き方を学ぶと良いでしょう。