at backyard

Color my life with the chaos of trouble.

goenvをやめて直接Goをインストールするように切り替えた(M1 MacでのGoの環境構築)

目次

初心者はgoenvは使わないほうが良いかもしれない?

最近またGoを少しずつ触っている。

そんな中、下記のポストを読んでいたら、あまりgoenvなどのマルチバージョン管理ツールはおすすめではないようなことが書かれていた。

zenn.dev

なるほど、たしかに現在goenv越しに利用していると、下記のようにversionごとのディレクトリを参照するようになっている。

$ go env GOPATH
/Users/username/go/1.17.3

このようになっている場合、バージョンを切り替えた場合に新たに依存をダウンロードし直すことになってしまうし、コード補完の支援などで利用されるlanguage serverにGOPATHの設定を再度行う必要が出てくるようだ

以前M1 MacBook Airでgoenvを使ってGo環境を設定してみたが、Go初心者の私はおとなしくまずはバージョン管理を使わずに試してみることに決めた。
(なお、一応書いておくと、決してgoenv自体が悪いということではなく、Goの仕組みを理解していないままgoenvのようなバージョン管理ツールを使うのはおすすめしない、ということだと思います。)

shinshin86.hateblo.jp

goenvをuninstallする

というわけで goenv をアンインストールしていきます。

公式にやり方が書かれているので、そちらを参照していきます。

https://github.com/syndbg/goenv/blob/master/INSTALL.md#uninstalling-goenv

goenvを一時的に無効にしたり、アンインストールするのはとても簡単なようで、単にgoenvを無効にする場合はシェルの起動設定からgoenv initの行を削除、もしくはコメントアウトするだけで完結するようだ。

この場合、goenvに対してコマンドラインからアクセスは可能だが、Goアプリ自体はバージョン切り替えに関する影響は受けなくなり、システムのGoバージョンが実行されるようになるらしい。

試しに上の記述を試してみてたが(goenv initの行をコメントアウト)、そもそもシステムにGoを入れていなかったからか、特に挙動が変わることはなかった。

次にgoenv自体をアンイストールする方法だが、

  1. goenvを無効化する方法でも書いたが、goenv initに関する行を削除する
  2. 次にgoenvのルートディレクトリを削除する

goenvのルートディレクトリの確認方法については下記で行える。

$ goenv root
/Users/username/.goenv

実際に削除する際のコマンドは下記となる。

rm -rf `goenv root`
# rm -rf /Users/username/.goenv と同じ

これでgoenvコマンドは利用できなくなる。

$ goenv --version
goenv:11: command not found: goenv

goenvの遺産をすべて削除する

ちなみにこれだけで goenvのアンインストールは完了するのだが、例えば goenv 越しの go を使って go getをしている場合、$GOPATH/{versions}配下にインストールしたものが残っていたりする。

私の場合 ~/go/1.17.3 配下にある感じ。

そのため私は一応こちらも削除することにした。
(別に残しておいても問題はないだろうが、一応きれいにしておきたかったのだ)

rm -rf ~/go/1.17.3

これで goenvに関する遺産はたぶんすべて削除したことになる。

Goをインストールする

一番オーソドックスなやり方でインストールすることにする。

下記の公式サイトのダウンロードページからインストール。

golang.org

M1 MacにGoをインストールするときの注意点

M1 Macでアクセスした場合、たぶん下記のような表記になっていると思うが、ここでこのままこのパッケージをダウンロードすると、これはintel版だったりする。

M1(arm)版は下記のリンクをクリックした先にある。

f:id:shinshin86:20211120105722p:plain
このリンクをクリックする

すると下記のような画面になるので、下記画像の赤枠内にあるものをダウンロードする。
(ひとまず私はインストーラー版をダウンロードしています)

f:id:shinshin86:20211120105742p:plain
ARM64と書かれているものがM1用。私はInstaller版をダウンロードして設定。

あとはダウンロードしたインストーラーを実行していくだけ。

f:id:shinshin86:20211120110142p:plain
Goのインストーラーを起動したところ

インストールが完了し、シェルを再起動すると、下記のようにインストールしたGoコマンドが有効化されていました。

$ go version
go version go1.17.3 darwin/arm64

GOPATHの設定も完了している。

$ go env GOPATH
/Users/username/go

これでひとまず公式サイトからのGoのインストールは完了しました。

[余談] go fmtの挙動が変わった!?

余談ですが、go fmtの挙動がどこかのタイミングで変わりましたか?

もしご存じの方がいましたらコメントくださいm( )m

挙動が変わったという記述はぱっと検索しただけでは見つからなかったのですが、以前はもっとインデント幅があったはず。。。割と気になっている事柄。