LoginSignup
7
7

More than 5 years have passed since last update.

govirtualenv: Go言語用のpython virtualenv

Last updated at Posted at 2017-11-20

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/....

しかし、上記のように環境変数にGOPATHGOROOTを設定しなければなりません。これではタ端末を閉じるたびに再設定する必要があります。.bashrc に記載しておけば良いのですが、それでは、プロジェクト毎に切り替える のが容易ではなくなるでしょう。

そこでGO言語にはgoenvgvm という有名なツールが既に存在しています。
これらのツールはGo言語の各バージョンのインストールの簡易化、GOROOTの切り替えを容易にしました。

しかし、どのプロジェクトが、どのバージョンのGoを使っているかGOPATHの切り替えはユーザが判断し、実行する必要がありました。

そこで、今のところ見当たらなかったので、これらを容易にするツールを作成することにしました。それが次から紹介するgovirtualenvです。

govirtualenv

govirtualenvはGo言語用の環境作成、切り替えツールです。
インストールスクリプト以外はすべてGo言語で書かれています。

主な機能は以下に挙げる物があります。

  • Go言語バージョンの管理(インストール、アンインストール)
  • プロジェクト作成
  • プロジェクト毎のGOROOTGOPATHの切り替え

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 のためのデータや、ユーザのためのツールが入っています。

プロジェクト毎のGOROOTGOPATHの切り替え

govirtualenv を使えば、いちいち 他のプロジェクトの作業を始める時に、exportset を使う必要がなくなります。また、「このプロジェクトで使ってたバージョンってなんだっけ」と言うこともなくなります。

プロジェクトを作成したら、次のようにするだけで、GOROOTGOPATH も設定されます.

$ 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年程度なので、簡単に言うと習作みたいなものです。

7
7
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
7
7