GVM
GitHub概要
moovweb/gvm
Go Version Manager
スター11,096
ウォッチ149
フォーク563
作成日:2011年12月3日
言語:Shell
ライセンス:MIT License
トピックス
dependency-managergolang
スター履歴
データ取得日時: 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を手動削除