GVM

バージョン管理GoGolang開発環境CLIpkgsetプロジェクト管理

GitHub概要

moovweb/gvm

Go Version Manager

スター11,096
ウォッチ149
フォーク563
作成日:2011年12月3日
言語:Shell
ライセンス:MIT License

トピックス

dependency-managergolang

スター履歴

moovweb/gvm Star History
データ取得日時: 2025/7/20 03:00

言語バージョン管理ツール

GVM

概要

GVM(Go Version Manager)は、Goの環境を管理するためのオープンソースツールです。複数のGoバージョンのインストールと管理をサポートし、特に「pkgset」機能によってプロジェクトごとに独立したパッケージ環境を構築できます。RubyのRVMに影響を受けた設計で、プロジェクトごとの依存関係の分離を実現します。

詳細

主な特徴

  • pkgset機能: プロジェクトごとに独立したGOPATH環境を管理
  • 複数バージョン管理: 異なるGoバージョンを簡単に切り替え
  • ソースビルド対応: 公式バイナリだけでなくソースからのビルドも可能
  • 環境分離: プロジェクト間の依存関係の衝突を防止
  • クロスコンパイル: 異なるプラットフォーム向けのビルドをサポート
  • 豊富なコマンド: 詳細な環境管理が可能

pkgset機能の仕組み

GVMの最大の特徴であるpkgsetは、プロジェクトごとに独立したGOPATHを作成し、パッケージの依存関係を完全に分離します。これにより、異なるプロジェクトで異なるバージョンのパッケージを使用できます。

アーキテクチャ

  • バージョン管理: ~/.gvm/gos/ にGoのバージョンを保存
  • pkgset管理: ~/.gvm/pkgsets/ にプロジェクト固有の環境を保存
  • 環境変数制御: シェル関数で動的に環境変数を更新
  • フック機能: カスタムスクリプトによる拡張が可能

メリット・デメリット

メリット

  • 完全な環境分離: pkgsetによるプロジェクト間の独立性
  • 柔軟性: 細かな環境設定とカスタマイズが可能
  • 成熟度: 長年の開発による安定性と機能の充実
  • ソースビルド: 最新の開発版やカスタムビルドに対応
  • チーム開発: 環境の再現性が高い
  • 互換性: 既存のGoプロジェクトとの高い互換性

デメリット

  • 複雑性: 初心者には学習曲線が急
  • 設定の煩雑さ: 多機能ゆえに設定項目が多い
  • パフォーマンス: シェルスクリプトベースで動作が重い場合がある
  • Windows非対応: ネイティブWindowsでは動作しない
  • メンテナンス: 定期的な更新が必要
  • ディスク使用量: pkgsetごとに領域を消費

参考ページ

書き方の例

インストール

# 公式インストールスクリプト(推奨)
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

# 手動インストール
# 1. リポジトリをクローン
git clone https://github.com/moovweb/gvm.git ~/.gvm

# 2. シェル設定に追加(~/.bashrc or ~/.zshrc)
[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"

# 3. 設定を再読み込み
source ~/.bashrc  # または source ~/.zshrc

# インストール確認
gvm version

基本的な使い方

# 利用可能なGoバージョンを表示
gvm listall

# Go 1.21.5をインストール
gvm install go1.21.5

# バイナリモードでインストール(高速)
gvm install go1.21.5 -B

# ソースからビルド
gvm install go1.21.5 -s

# インストール済みバージョンを表示
gvm list

# バージョンの切り替え
gvm use go1.21.5

# デフォルトバージョンの設定
gvm use go1.21.5 --default

pkgsetの使用

# 現在のGoバージョンを確認
gvm list

# Go 1.21.5を使用
gvm use go1.21.5

# 新しいpkgsetを作成
gvm pkgset create myproject

# pkgsetを使用
gvm pkgset use myproject

# pkgset一覧を表示
gvm pkgset list

# グローバルpkgsetに戻る
gvm pkgset use global

# pkgsetの削除
gvm pkgset delete myproject

プロジェクトでの活用

# プロジェクトディレクトリで作業
cd ~/projects/webapp

# プロジェクト専用環境を作成
gvm use go1.21.5
gvm pkgset create webapp
gvm pkgset use webapp

# 依存関係をインストール
go get github.com/gin-gonic/gin
go get gorm.io/gorm

# 環境の確認
echo $GOPATH
gvm pkgenv webapp

# 別プロジェクトへ移動
cd ~/projects/cli-tool
gvm use go1.20.12
gvm pkgset create cli-tool
gvm pkgset use cli-tool

高度な使用方法

# クロスコンパイル環境の設定
gvm cross linux amd64
gvm cross darwin arm64
gvm cross windows amd64

# 環境変数の確認
gvm env

# GVMの設定編集
gvm config

# アンインストール
gvm uninstall go1.19.13

# キャッシュのクリア
gvm clear-cache

# 開発版のインストール
gvm install tip
gvm install go1.22rc1

チーム開発での活用

# .gvmrcファイルの作成(プロジェクトルート)
echo "go1.21.5" > .gvmrc
echo "webapp" >> .gvmrc

# チームメンバーの環境構築
# 1. プロジェクトをクローン
git clone https://github.com/team/project.git
cd project

# 2. GVMで環境を自動設定
gvm install from-binary go1.21.5
gvm use go1.21.5
gvm pkgset create webapp
gvm pkgset use webapp

# 3. 依存関係のインストール
go mod download

トラブルシューティング

# GVMが動作しない場合
# シェルの再起動
exec $SHELL

# 環境変数の確認
echo $GVM_ROOT
echo $gvm_go_name
echo $gvm_pkgset_name

# ログの確認
gvm debug

# 強制的な環境リセット
gvm implode  # 警告:すべてのGVM環境を削除
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

# pkgsetの修復
cd $GVM_ROOT/pkgsets
ls -la
# 破損したpkgsetを手動削除