govirtualenv - Go言語用のvirtualenv
概要
- Go言語向けに、pythonのvirtualenvっぽいツールを作りました
- Windows/Linux/MacOSで利用できます
- 宣伝風記事です
- goenvとかgvmとかあるじゃんと言うのは知ってます
2017/11/30 追記
- version 0.1としてリリースしました。Windows/Linux/MacOSに対応しています
2017/11/29 追記
- RC5にて Windowsに対応しました。特に何もなければversion 0.1としてリリース予定です
本題
Pythonでプロジェクト(あるいは開発環境ごと)にパッケージを管理したい、というときにはvirtualenv
によってPython仮想環境を作成するのが一般的です。
# 環境の構築
$ virtualenv MyProjectEnv
$ source MyProjectEnv/bin/activate
# ここからPython仮想環境
(MyProjectEnv) $
# 仮想環境のみにパッケージをインストール
(MyProjectEnv) $ pip install sphinx
(MyProjectEnv) $ deactivate
一方Go言語では、GOPATH
を使うと、プロジェクト毎にパッケージがインストールされるようになってますので、(バージョンはともかくとして)プロジェクト毎のパッケージ管理は容易です。
$ export GOROOT=<MyGOROOT>
$ export GOPATH=<MyProjectPath>
# パッケージのインストール
$ go get github.com/....
しかし、上記のように環境変数にGOPATH
、GOROOT
を設定しなければなりません。これではタ端末を閉じるたびに再設定する必要があります。.bashrc
に記載しておけば良いのですが、それでは、プロジェクト毎に切り替える のが容易ではなくなるでしょう。
そこでGO言語にはgoenv
、gvm
という有名なツールが既に存在しています。
これらのツールはGo言語の各バージョンのインストールの簡易化、GOROOT
の切り替えを容易にしました。
しかし、どのプロジェクトが、どのバージョンのGoを使っているかとGOPATHの切り替えはユーザが判断し、実行する必要がありました。
そこで、今のところ見当たらなかったので、これらを容易にするツールを作成することにしました。それが次から紹介するgovirtualenv
です。
govirtualenv
govirtualenv
はGo言語用の環境作成、切り替えツールです。
インストールスクリプト以外はすべてGo言語で書かれています。
主な機能は以下に挙げる物があります。
- Go言語バージョンの管理(インストール、アンインストール)
- プロジェクト作成
- プロジェクト毎の
GOROOT
とGOPATH
の切り替え
Github
govirtualenv: Creates a golang virtual environment.
使い方
$ govirtualenv --help
Usage: govirtualenv <flags> <subcommand> <subcommand args>
Subcommands:
available Show available golang version
change change changes current using golang version.
commands list all command names
flags describe all known top-level flags
help describe subcommands and their syntax
install Install new golang version
list Show all installed golang version
remove Remove installed golang version
startproject Start new project with given golang verison
Use "govirtualenv flags" for a list of top-level flags
Go言語バージョンの管理
新しいGo言語のバージョンをインストールするには、パッケージを入れるか、ビルドするか、ともかく、手間がかかります。
govirtualenv
では次のようにして簡単にインストールすることができます
$ govirtualenv available # インストールできるバージョンを調べる
go1
go1.0.1
go1.0.2
go1.0.3
go1.1
--- Goのバージョンが続く ---
weekly.2012-03-13
weekly.2012-03-22
weekly.2012-03-27
$ govirtualenv install go1.9.1 # 1.9.1をインストール
また、削除したい場合には
$ govirtualenv list # インストール済みのバージョンを表示
go1.9.1
....
$ govirtualenv go1.9.1 # 削除
このように、govirtualenv
がすべてを管理します。
プロジェクトの作成
govirtualenv
では、他のツールと異なり、プロジェクト
の作成ができます。
$ govirtualenv startproject go1.9.1 MyProject #go1.9.1 を使うプロジェクトを作成
Project MyProject created.
$ ls -a MyProject
./ ../ .project/
.project
ディレクトリには、govirtualenv
のためのデータや、ユーザのためのツールが入っています。
プロジェクト毎のGOROOT
とGOPATH
の切り替え
govirtualenv
を使えば、いちいち 他のプロジェクトの作業を始める時に、export
や set
を使う必要がなくなります。また、「このプロジェクトで使ってたバージョンってなんだっけ」と言うこともなくなります。
プロジェクトを作成したら、次のようにするだけで、GOROOT
も GOPATH
も設定されます.
$ ls
MyProject/
$ source MyProject/.project/bin/activate
(MyProject) $
(MyProject) $ echo $GOROOT
/home/your-name/.govenv/goroots/go1.9.1
(MyProject) $ echo $GOPATH
/home/your-name/MyProject
Pythonの virtualenv
のように、仮想環境に入ることができます。
プロジェクトの作業が終わって、次の作業に移りたい場合は
(MyProject) $ deactivate
$
とするだけで、元の環境に戻ります。
終わりに
いかがでしたでしょうか。
もし興味があるなら、ぜひ使ってみてください。
本音
ぶっちゃけ、自分のためのツールなので、広まっていくことは期待してません。
そして、私はGo言語歴1年程度なので、簡単に言うと習作みたいなものです。