LoginSignup
9
3

More than 5 years have passed since last update.

goのversion管理について

Last updated at Posted at 2017-12-27

この記事はSmartDrive Advent Calendar 2017の8日目の記事です。

バックエンドのエンジニアをしております @astronoka です。
golang を使った時系列データの解析について書こうとおもったのですが、まとまらず。。
自分の昔書いた記事の焼き直しでお茶を濁そうとおもいます。。

弊社ではgolangで書かれたプログラムのビルドはdockerコンテナを使っております。
そして、クロスコンパイルした成果物のバイナリ1個を、aplineのコンテナに放り込んで動かすというよく見かけるやつです。
開発中もコンテナの中で reflex をつかうことで
エディタさえあればなんとかなる状態ではあります。

でも

delveとか使いたいですよね、、 GoLandとか使いたいですよね、、
やはり、macにgolangをインストールすることになります。
そこで自分は下記のようなツールを作って環境を管理しています。

名前は Plan 9 にかぶれて、エド・ウッドの映画 から取ったのと
GoLang ENvironment manager をかけています。

使い方は下記の通り

install

$ git clone https://github.com/astronoka/glen.git ~/.glen

# PATHが通っているところにおく
$ ln -s ~/.glen/glen.sh ~/bin/glen

$ glen version
0.2.0

usage

$ glen help

Usage: glen <cmd>

Commands:

version                         Print glen version
help                            Output help text
install <version>               Install the version passed (ex: go1.5.3)
uninstall <version>             Delete the install for <version>
use <version>                   Activate specified <version>
list                            List installed versions
tags                            List available versions (tags)

env list                        List environments
env create <envname> <version>  Create environment
env delete <envname>            Delete environment
env use    <envname>            Activate environment

vendor init <version>           Initialize current directory as workspace
vendor use                      Activate current directory as workspace

tools                           Install develop tools (goimports,gorename...)

# 使えるバージョン(タグ)を確認
# リポジトリをクローンするのでちょっと時間がかかります。
$ glen tags
  ... 
go1.8rc3
go1.9
go1.9.1
go1.9.2
go1.9beta1
go1.9beta2
go1.9rc1
go1.9rc2

# 適当なバージョンをインストールする
$ glen install go1.9.2
######################################################################## 100.0%
installed from binary
successfully installed: go1.9.2

# インストールされたのを確認
$ glen list
go1.9.2

# GOPATHを通す (あたらしくシェルを立ち上げています)
$ glen use go1.9.2

# .glenの下に配置されています
(glen:go1.9.2) $ echo $GOPATH
/Users/astronoka/.glen/installed/go1.9.2/glen

# exit で抜けると、当然ながら$GOPATHはなくなります
(glen:go1.9.2) $ exit
$

# 続いて環境を用意してみます

# 環境一覧
$ glen env list

# 導入済みのversionで環境を用意します
$ glen env create foo go1.9.2

# foo ができる
$ glen env list
foo

# 環境を有効化する
$ glen env use foo

# goのバイナリパスはこの辺
(foo:go1.9.2) $ type go
go is /Users/astronoka/.glen/installed/go1.9.2/bin/go

# $GOPATH は .glen の下に配置されます。
(foo:go1.9.2) $ echo $GOPATH
/Users/astronoka/.glen/env/foo

# vendor サブコマンドは、作ってみたものの使いみちがなかったので使い方は省略します。

これで好きなだけ沢山のバージョンを入れて、好きなだけ環境を作って開発ができますやったね!

しかしこうも思うのです。
そんなに複数のversionが入り乱れた状態を保守するのは嫌だと。


環境情報

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.11.6
BuildVersion:   15G1217

(うわっ…私のMacOS Version低すぎ…?)

9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3