g

バージョン管理GoGolang開発環境CLIシェルスクリプト軽量

GitHub概要

stefanmaric/g

Simple go version manager, gluten-free

スター953
ウォッチ16
フォーク54
作成日:2018年4月8日
言語:Shell
ライセンス:MIT License

トピックス

bashclidependency-managerenvironmentfishgluten-freegogolanginstallerlinuxmacosportableversion-managerzsh

スター履歴

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

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

g

概要

gは、Stefan Maricによって開発されたシンプルで軽量なGoバージョン管理ツールです。「gluten-free」をモットーに、余計な機能を排除し、必要最小限の機能に絞った設計により、直感的で高速な動作を実現しています。シェルスクリプトベースで実装されており、追加の依存関係がほとんどありません。

詳細

主な特徴

  • 超軽量: シェルスクリプト1ファイルのみで動作
  • シンプルなコマンド: 覚えやすい短いコマンド体系
  • クロスプラットフォーム: macOS、Linux、BSD、WSL(Windows)対応
  • 自動セットアップ: インストール時に環境変数を自動設定
  • セルフアップグレード: g自体の更新も簡単
  • 最小限の依存: curlまたはwgetのみ必要

動作原理

gは、公式のGoバイナリをダウンロードして管理し、シンボリックリンクを使用して現在アクティブなバージョンを切り替えます。$GOPATHとは独立して動作し、$GOROOT/binをPATHに追加することでバージョン管理を実現します。

設計哲学

  • 無駄を省いた設計: 複雑な機能やパッケージセットは提供しない
  • UNIXツールの哲学: 一つのことを上手くやる
  • 依存関係最小化: 外部ツールへの依存を最小限に
  • 透明性: シンプルなシェルスクリプトで理解しやすい

メリット・デメリット

メリット

  • 圧倒的な簡潔さ: 学習コストがほぼゼロ
  • 高速動作: シェルスクリプトによる軽快な実行
  • インストールが簡単: ワンライナーでセットアップ完了
  • メンテナンスフリー: シンプルな実装で安定動作
  • 透明性: コードが読みやすく動作を理解しやすい
  • 柔軟性: スクリプトのカスタマイズが容易

デメリット

  • 機能の制限: パッケージセットやプロジェクト固有設定なし
  • 自動切り替えなし: ディレクトリ移動時の自動バージョン切り替え非対応
  • Windows非対応: ネイティブWindowsでは動作しない(WSLは可)
  • エンタープライズ機能不足: 大規模チーム向け機能がない
  • プラグインなし: 拡張機能のサポートがない

参考ページ

書き方の例

インストール

# ワンライナーインストール(推奠方法)
curl -sSL https://git.io/g-install | sh -s

# または wget を使用
wget -qO- https://git.io/g-install | sh -s

# 手動インストール
# 1. スクリプトをダウンロード
curl -sSL https://raw.githubusercontent.com/stefanmaric/g/master/bin/g -o ~/bin/g

# 2. 実行権限を付与
chmod +x ~/bin/g

# 3. シェル設定に追加(例:~/.bashrc)
export PATH="$HOME/bin:$PATH"
export GOPATH="$HOME/go"
export PATH="$GOPATH/bin:$PATH"

基本的な使い方

# 利用可能なバージョンを表示
g list

# 最新安定版をインストールして使用
g install latest
g use latest

# 特定バージョンをインストール
g install 1.21.5
g install 1.20.12

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

# バージョンの切り替え
g use 1.21.5
g use 1.20.12

# 現在のバージョンを確認
g --version
go version

バージョン管理の操作

# betaやrcバージョンをインストール
g install 1.22rc1
g install 1.21beta1

# バージョンの削除
g uninstall 1.20.12
g uninstall 1.19.13

# 全バージョンの削除(現在使用中を除く)
g prune

# バージョン固定(シンボリックリンクの作成)
g use 1.21.5
# これで go コマンドが 1.21.5 を参照

gツール自体の管理

# g自体をアップデート
g self-upgrade

# gのバージョンを確認
g --version

# ヘルプを表示
g help
g --help

# 環境変数の確認
echo $GOROOT
echo $GOPATH
echo $PATH | grep -o '[^:]*go[^:]*'

開発ワークフロー

# 新しいプロジェクトのセットアップ
mkdir my-project && cd my-project

# Go 1.21を使用
g use 1.21.5

# go.modの初期化
go mod init github.com/user/my-project

# 依存関係のインストール
go get -u ./...

# ビルドとテスト
go build
go test ./...

CI/CD環境での使用

# GitHub Actions例
# - name: Install g
#   run: curl -sSL https://git.io/g-install | sh -s
#   
# - name: Install Go
#   run: |
#     g install 1.21.5
#     g use 1.21.5
#     
# - name: Build
#   run: go build ./...

# Dockerfileでの使用例
# FROM ubuntu:latest
# RUN apt-get update && apt-get install -y curl
# RUN curl -sSL https://git.io/g-install | sh -s
# ENV PATH="/root/bin:${PATH}"
# RUN g install latest && g use latest

トラブルシューティング

# インストールパスの確認
which g
which go

# g の動作確認
g run env GOROOT
g run env GOPATH

# キャッシュのクリア
rm -rf ~/.g/cache

# 手動でGoバイナリを削除
rm -rf ~/.g/versions

# 環境変数のリセット
unset GOROOT
source ~/.bashrc  # または ~/.zshrc

# デバッグモードで実行
DEBUG=1 g install 1.21.5