TIS ENGINEER NOTE

ITエンジニアのためのキャリア向上ノウハウブログ

プログラミング

Go言語のいい感じの開発環境を構築する

更新日:

今回はmacに、いい感じでバージョン&パッケージを管理できる開発環境を構築していこうと思います。

goenvの導入

まずはgolang自体のバージョンを管理するためのツールであるgolangを導入します。

goenvを通してgolangをインストールすることで、異なるバージョンを利用する必要がある時にスムーズに作業を継続できます。

基本的な使い方はrubyのrbenvや、pythonのpyenvと大差ありません。gvmというツールもあるのですが、個人的にrbenv,pyenvを使ってきたので、goenvを選択しました。

brew install goenv

まずはbrewでgoenvをインストールします。

あとは環境変数にgo言語のコマンドを実行した時の利用先のパスを設定します。

export PATH="$HOME/.goenv/bin:$PATH"
eval "$(goenv init -)"

.bash_profileを編集したら、以下のコマンドで変更を適用します。

source ~/.bash_profile

Go言語のインストール

インストールしたgoenvを使用してGo言語をインストールします。

まずはインストールできるバージョンの確認。

goenv install -l

ずらーっとバージョンが並びます。今回は記事作成時点で最新の1.9をインストールします。

goenv install 1.9.0

インストールしたGo言語を有効化するために以下のコマンドを実行します。

goenv global 1.9.0

無事Go言語がインストールされたかを確認してみましょう。

go version

goenvでインストールしたバージョンが表示されていたら、Go言語までインストール完了となります。

direnvの導入

ここまででGo言語自体はインストールでき、開発可能な状態にはなりました。

しかし開発を行なっていると、特に複数プロジェクトに手をつけている場合においては、プロジェクトごとにインストールするパッケージをしっかりと分けて管理したいところ。

しかしGo言語ではGOPATHという環境変数に設定されたパスにどんどんパッケージが追加されていく仕様となっております。つまり上記を実現させるためには作業しているプロジェクトごとにGOPATHを切り替える必要が出てくるわけです。

これを手動でやっていたら、作業効率ガタ落ちですよね。その環境変数の切り替えを自動で実施してくれるのがdirenvというツールになります。

以下のコマンドでインストール。

brew install direnv

次にbash_profileに設定を追加します。EDITORはdirenvの設定ファイルを編集するときに起動されるエディターです。お好みで変更してもOKです。

echo 'eval "$(direnv hook bash)"' >> ~/.bash_profile
echo 'export EDITOR=vim' >> ~/.bash_profile
source ~/.bash_profile

設定が完了したら、実際に作業ディレクトリに移動して、direnvの設定ファイルを作成します。

まずは適当に作業ディレクトリを作業して、そのディレクトリに移動します。

cd ~/workspace/
mkdir go-sample
cd go-sample

そしてdirenvの設定ファイルを作成するために以下のコマンドを打ちます。

direnv edit .

するとエディターが立ち上がって設定を追加できるようになります。以下の内容を入力して、保存します。

export GOPATH=$(pwd)

そうすると、現在いるディレクトリに

.envrcというファイルが新規作成できております。ここに記載した環境変数がそのディレクトリに移動した際に読み込まれるようになるわけです。めっちゃ便利。

vendoringについて

Go1.6からは依存パッケージを分けて管理することのできるVendoringが標準で適用されるようになりました。

もしGo1.5以下で環境構築する必要がある場合、以下のような環境変数を設定する必要があります。

export GO15VENDOREXPERIMENT=1

1.6以上であればスキップしてOKです。

glideの導入

残る課題はパッケージのインストール先とパッケージ管理です。

要するにRailsでいうGemfileで管理して、vendor配下にパッケージを配置するということをしたいわけです。

こんなわがままを実現してくれるのがglideというツールです。

なにはともあれインストール。

brew install glide

インストールが完了したら作業ディレクトリにて以下のコマンドを実行します。

mkdir src
cd src
mkdir myapp
cd myapp
glide create

途中でY or Nの選択肢は基本的にYでOKです。

Go言語のディレクトリ構成はプロジェクトディレクトリ配下にsrc/[アプリケーションディレクトリ]を作成し、そこに開発ソースを配置していくのが一般的な模様。glideの仕様上、[作業用ディレクトリ]/src/[アプリケーションディレクトリ]の構成を守らないと、上手くパッケージを読み込んでくれませんので、注意しましょう。

では実際にパッケージをインストール。今回は例としてWebフレームワークであるechoをインストールしてみます。

glide get github.com/labstack/echo

普通はgo getとやるところをglide getで実行します。

こちらも途中で選択肢が出てきますが、基本的にはM(minor)を選択しておけば問題ありません。

echoの動作確認のために、go-sample/src/myappにserver.goを作成し、以下のように記述します。echoのガイドを参考に進めています。

package main

import (
    "net/http"
    
    "github.com/labstack/echo"
)

func main() {
    e := echo.New()
    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello, World!")
    })
    e.Logger.Fatal(e.Start(":1323"))
}

保存してサーバーを起動しようしたところ、エラーが発生しました。

go run server.go

vendor/github.com/labstack/echo/echo.go:55:2: cannot find package "github.com/labstack/gommon/color" in any of:
        /Users/stobita/workspace/go-sample/src/myapp/vendor/github.com/labstack/gommon/color (vendor tree)
        /Users/stobita/.goenv/versions/1.9.0/src/github.com/labstack/gommon/color (from $GOROOT)
        /Users/stobita/workspace/go-sample/src/github.com/labstack/gommon/color (from $GOPATH)
vendor/github.com/labstack/echo/echo.go:56:2: cannot find package "github.com/labstack/gommon/log" in any of:
        /Users/stobita/workspace/go-sample/src/myapp/vendor/github.com/labstack/gommon/log (vendor tree)
        /Users/stobita/.goenv/versions/1.9.0/src/github.com/labstack/gommon/log (from $GOROOT)
        /Users/stobita/workspace/go-sample/src/github.com/labstack/gommon/log (from $GOPATH)
vendor/github.com/labstack/echo/echo.go:57:2: cannot find package "golang.org/x/crypto/acme/autocert" in any of:
        /Users/stobita/workspace/go-sample/src/myapp/vendor/golang.org/x/crypto/acme/autocert (vendor tree)
        /Users/stobita/.goenv/versions/1.9.0/src/golang.org/x/crypto/acme/autocert (from $GOROOT)
        /Users/stobita/workspace/go-sample/src/golang.org/x/crypto/acme/autocert (from $GOPATH)

色々調べてみると、glideでは依存パッケージが自動的にインストールされないケースがあるとかないとか・・・

というわけで先頭にあるcolorを手動でインストールします。

glide get github.com/labstack/gommon/color

すると無事echoが起動されますので、ブラウザでhttp://localhost:1323/にアクセスしてみましょう。

Hello worldが表示されていれば構築完了です!

まとめ

まだまだデファクトスタンダードが存在していない状態ではありますが、今回構築した環境であれば、Railsにおけるbundleに近い感覚で使えるかと思います。

今回の記事がGoを初めてたいと考えている人のお役に立てば幸いです。

紹介した方法で上手く行かない際はTwitterかお問い合わせでお声かけいただければ、対応できる範囲でお応えいたしますので、どうぞお気軽に。

閲覧いただき、ありがとうございました。

よく読まれている記事

エンジニア独立

2019/5/30

SIer・SESからWEB系エンジニアにキャリアチェンジする現実的な方法

エクセルで作らされる誰が読むかも分からないドキュメント 月に1回の帰社日 枯れた技術を言われた通りに扱うだけの毎日 スーツ勤務で下級労働者扱い SIer・SES系エンジニアとしての業務経験があり、かつ外の世界を知ったエンジニアから見たSIer・SES系のイメージってこんな感じですよね。 ここで言う外の世界の代表格と言えばWEB系ベンチャーやフリーランス。 カテゴライズの厳密さについては色々と意見はありますが、いわゆる自社サービスで利益を立てている企業と言えば分かりやすいでしょう。 最近ではエンジニアの待遇 ...

続きを読む

エンジニア独立

2019/4/15

他のエンジニアと差をつけるための面談前の下準備

こんにちは、フリーエンジニアのてぃすです。 僕は正社員から派遣、フリーランスへと転身する際に、絶対に妥協したくないという意志の元、半年ほどの間に10件近くの面談を体験してきました。 今日はその時の体験を元に、エンジニアが面談を受ける前に下調べしておくべきコンテンツについて紹介していこうと思います。 なぜ下調べが必要か エンジニアって面談を軽視している人が多いんですよね。 ある程度の経歴があるエンジニアは、売り手市場であることも手伝い、まあまあ満足できる就業先を得られるのでそこまで面談対策をじっくりしている ...

続きを読む

エンジニア独立

2019/5/29

正社員エンジニアという働き方を批判してみる

今回はちょっと過激めなタイトルを飾ってみました。 僕はエンジニアとして、正社員・派遣社員・フリーランスとして働いて来ていますが、その中でどうしても正社員という働き方が特別もてはやされているのかが分かりません。 とはいえ有名理系大卒で競争力激高な大手企業のスーパーエンジニアだったり、激レアホワイト企業に勤めている人に反論されたらぐうの音も出ないというか、論点が変わってきてしまうので、以下の条件に当てはまるような正社員エンジニアに向けてのお話ということで読み進めていただければなと。 20代で年収300万円以下 ...

続きを読む

エンジニア入門

2018/8/19

本気でRubyを学びたい人のためのエンジニアスクール『ポテパンキャンプ』

こんにちは、フリーエンジニアのてぃすです。 エンジニアといえば今や最も少ない投資で高収入を望め、更には週3勤務やリモートワークなどの柔軟な働き方も目指せる夢のある職業です。 ここ最近は営業職や事務職から、将来性を考えてエンジニアに転身するといういう人もかなり増えてきています。 特にRubyプログラマーは日本における絶大な需要とリモート案件の豊富さから、特に人気のあるポジションとなっています。エンジニアとして働いているが、職場環境に不満を抱いていたり、今扱っている技術が今後通用するか不安に感じ、Ruby・W ...

続きを読む

エンジニア入門

2018/1/2

プログラマになるために資格は必要か

ここ最近のエンジニア需要増大に伴って、プログラマやエンジニアになりたいと考え始める人が周りにも増えてきました。 そんな時によく聞かれるのが「プログラマになろうとしたら、資格とか取ったほうがいいの?」という内容。 確かに、真っ黒な画面に向かってカタカタ英語や記号を打ち込んでいるTHE 専門職であるプログラマという職業には、何かしら資格が必要に思えるかもしれません。 今日はそんなプログラマ・エンジニアを目指していて、最初の一歩として資格取得を検討している人に向けてプログラマになるのに資格が必要かという疑問に応 ...

続きを読む

-プログラミング
-,

Copyright© TIS ENGINEER NOTE , 2023 All Rights Reserved Powered by AFFINGER5.