【Go言語】ネイティブエンジニアでもできた環境構築

仕事では、ログインしたりチャットしたり、ニュースを取得したり動画を見たりと、サーバー連携するiOSアプリはたくさん作ってきました。

でも、作ったことないんです。

サーバーサイド。

わかんないんです。

サーバーサイド。

サーバーエンジニアがいたので、各々よーいドンで開発 → 完成した API の仕様書もらう → アプリに組み込む って流ればかりで。
連携するための知識しかない状態でした。最低限もいいところ。笑

今後やらなきゃなーくらいの気持ちでしたが、ある事件がキッカケで、サーバーがほぼ必須の状況になったので、これを機に学ぼうと。
そこで選んだ言語が Go言語 でした。

そんなわたくし、意気揚々とGo言語の扉を叩くも門前でゲロ吐きそうになったので、同じ境遇の人がいたら(いるんか)と思い、記事にしました。
後々カンタンな方法があることを知ったので、両方記載しています。

これからやるぞ!と思っている方、ぜひ一緒に ᕕ( ᐛ )ᕗ<ユル-ク

開発環境

・macOS Catalina 10.15.5
・Homebrew(説明しないので、準備してください)
・go version 1.14.4(Homebrew を使ってインストールしていきます)

IDE(統合開発環境)について

Go言語の IDE は選択肢が多いです。
様々なエディタでプラグインがあるため、好きなものでいいと思います。

・Atom
・CotEditor
・Emacs
・GoLand
・Terminal
・VisualStudioCode(VSCode)   ※アルファベット順

だいたいこんな感じですかね。
私は VisualStudioCode で開発しているので、今後のGo言語関連の記事も VisualStudioCode を使っての説明になると思います。

オススメのエディタやら構築手順を書いたら膨大な記事になるので、各自で好みのエディタをインストールしてご準備ください。

サンプルコードを作る

エディタの準備はできましたかー?
環境構築前にサンプルコード?って方もいると思いますが、この記事の構成的に、先にサンプルコードを作成します。
※ GOPATH と モジュール の両設定を記載しているので

エディタで hello.go というファイルを作ります。
中身はありきたりなやーつですが、以下をコピってくださいまし ( ̄・ω・ ̄)

ファイルを保存したら、ここでエディタを離れます。
後ほどターミナルで保存先に移動したりするので、保存場所は忘れずに!笑

いよいよ Go のインストール

Go言語を使うにあたって、まずはインストールから行います。
インストールは homebrew を使います。

ターミナルを開いて、

を実行しましょう。インストールが始まります。
完了後は、インストールされているか確認のため、以下のコマンドを試してください。

普通にダウンロードもできるのでお好みで。
※この記事では homebrew を前提として進めます

モジュールを設定する(推奨)

他のブログや書籍もそうなのですが、GOROOTGOPATH を設定する内容が出てきます。
ピュアな私はそれに倣い、パスを設定すべく奮闘しました。

ゲロ吐きそうになりながらも設定したのですが、後々発覚しました。

モジュールという機能を使うことで、GOPATH が不要になるということを。

公式Wiki にこのような記述があります。

Go has included support for versioned modules as proposed here since 1.11. The initial prototype vgo was announced in February 2018. In July 2018, versioned modules landed in the main Go repository.

In Go 1.14, module support is considered ready for production use, and all users are encouraged to migrate to modules from other dependency management systems.

ver1.11 からモジュール機能を提供してきたけど、ver1.14 から本番環境での使用を推奨します!
すべてのユーザーは、他の依存関係管理システムから移行することを推奨しまーすって仰ってます。

最近まで推奨されてなかったんなら仕方ない…と思いつつ、とても悲しくなりました。笑
これからはこの方法が主流になると思う&めっちゃ簡単なので、いざ設定!

環境変数を設定する

GOPATH と MODULE を切り替える環境変数 $GO111MODULE というものがあります。
3つの動作が設定されているので、軽く説明します。

on : コードの場所にかかわらず、MODULE で動作
off : GOPATH で動作
auto : $GOPATH/src 以下にあるコードは GOPATH、それ以外にあるコードは MODULE で動作

常時 MODULE を使うようにするために、ターミナルで以下の設定します。

最低限の「動かす」という設定としてはこれだけです。マジ神。

ビルドする

先ほど作ったサンプルコードのファイル保存先に移動してからビルドします。
ここでは「書類」の中の「SampleProject」に「hello.go」を保存したと仮定します。

以上となります!
Hello World! 表示されましたか?

2行目の go mod init ですが、この初期化コマンドを実行すると、go.mod というファイルが作成されます。
「環境構築」が目的なので、このファイルについては別記事で。

一応これで環境構築は終わりですが、便利なパッケージがあったりするので、別記事で紹介します!
次は GOPATH に関する記載なので、閉じてもらって結構です。笑

GOPATH を設定する(非推奨)

ゲロ吐きそうになりながら設定した方法です。
学んだことを残したいだけです…笑

GOROOT

これは Go のインストールパスのこと。
環境変数 $GOROOT として定義されているので、以下のコマンドで確認してみましょう。

「ほーん、こんなパスかー」と思った方、このパス、間違っております!笑
homebrew でインストールした場合はパスの変更が必要になります。

$GOROOT 以下の bin の中には、go, godoc, dofmt の実行バイナリが配置されます。

GOPATH

ワークスペースのことで、外部パッケージのファイルなども保存されるパス。
環境変数 $GOPATH として定義されているので、これも go env で確認してみましょう。

$HOME/go が標準パスになっており、配下には bin, pkg, src という3つのディレクトリがあります。

src : コードを配置(先ほどのサンプルコードもここで管理しないといけない)
pkg : コンパイル後に生成されるファイル
bin : コンパイル後に生成される実行可能ファイル

サンプルコードを移動する必要が出てきました。
環境構築の確認のため、ひとまず src に移動($GOPATH/src/hello.go)させます。





ここで思ったんです。


「どうやってプロジェクト管理しよう…今後のためにも今調べてみるか…」と。


そしてモジュールという機能に出逢いました。笑
(もちろん dep にも挨拶済みです)


本題に戻りますが、$GOPATH 以下の bin の中には、Go の実行バイナリが配置されるので、これも環境変数に追加しておきましょう。

シェルの説明があると、~/.bash_profile や ~/.bashrc を見かけると思いますが、こういう違いがあります。

~/.bash_profile → ログイン時にのみ実行される
~/.bashrc → 対話モードの bash 起動時に毎回実行される

「どちらでも OK です」みたいな記事が多いので、そこは注意してください。
環境変数は毎回実行されなくてもいいので、bash_profile に記載しましょう。

※「bash」の方が目にすると思ったので、補足説明のみ例として出しましたが、この記事のシェルは「zsh」です。

修正後のパスを確認

ターミナルを開いてパスが変更されているか確認しましょう!

ズラーっと出てくる中に GOROOT と GOPATH があるので、両方変わっていれば OK です。
※ $PATH は go言語関連ではないので、go env では出ません。

「パスが変わってない… 」という方、ログインシェルを確認しましょう!

1)システム環境設定を開く
2)ユーザとグループを選択
3)ウィンドウ左下の鍵アイコンからロックを解除
4)ログイン中のユーザーを右クリック → 詳細オプション を選択
5)ログインシェルの項目を確認

/bin 以下はどうなっていますか?
macOS Catalina からは、標準のシェルが「zsh」になってます。
「bash」やその他シェルになっていないか、確認してください。

はい、設定はこれで以上になります。


_:(´ཀ`」 ∠):_


どうですか、この鬼のような設定。
本当 MODULE が実装されないバージョン1.10以前から使ってる人、神かな?って思いました。
ビルドに関しては、移動先を適宜変更した状態で、先ほど説明した MODULE のビルドの初期化コマンドをしないだけです。

さいごに

以上、GOPATH と MODULE 別の環境構築紹介でした!
先ほども言いましたが、Go言語は開発に便利なパッケージがたくさんあるので、次はそれをインストールしていこうと思います!

コメント