proto
GitHub概要
moonrepo/proto
A pluggable multi-language version manager.
スター990
ウォッチ6
フォーク49
作成日:2023年2月17日
言語:Rust
ライセンス:MIT License
トピックス
bundenogolangnodejstoolchaintoolchain-managerversion-manager
スター履歴
データ取得日時: 2025/7/20 03:55
言語バージョン管理ツール
proto
概要
protoは、moonrepoによって開発された次世代のユニバーサルツールチェーン管理ツールです。WASMプラグインアーキテクチャを採用し、セキュアで高速な環境管理を実現します。Bun、Deno、Node.js、Python、Rust、Goなど主要な言語に加え、800以上のツールに対応。単一のインターフェースで複数の言語やツールのバージョンを管理でき、プロジェクトごとの自動バージョン切り替えやチーム開発での環境統一を簡単に実現できます。
詳細
主な特徴
- WASMプラグインアーキテクチャ: Extismベースの安全で拡張可能なプラグインシステム
- 高速パフォーマンス: Rust実装による高速なダウンロード、インストール、実行
- ユニバーサルツールチェーン: 単一インターフェースで多言語・多ツールを管理
- バージョン自動検出: エコシステムからランタイムバージョンを自動検出
- きめ細かい設定: ディレクトリ、プロジェクト、ユーザー単位での設定
- 環境認識: 環境固有のツール、バージョン、環境変数をサポート
- クロスプラットフォーム: Windows、macOS、Linux、WSLに対応
WASMプラグインシステムの革新性
protoの最大の特徴は、WebAssembly(WASM)を使用したプラグインシステムです。従来のシェルスクリプトベースのプラグインと異なり:
- 言語非依存: Rust、Go、TypeScript、C/C++など、WASMにコンパイル可能な任意の言語で記述可能
- サンドボックス実行: WASIによる安全な実行環境
- 高度な機能: ファイルシステムアクセス、子プロセス実行、HTTP通信などをサポート
- ホスト関数:
exec_command、send_request、host_logなどの強力なAPI
セキュリティ設計
- サンドボックス環境: WASMランタイムによる隔離された実行
- 仮想パス: ホストファイルシステムへの限定的なアクセス
- 署名検証: ツールのダウンロード時の完全性チェック
- 信頼できるソース: 公式リポジトリとGitHubリリースからの配布
moonツールチェーンとの統合
protoはmoonビルドシステムのツールチェーンを支えるコア技術として開発されました。moonの統合開発環境の一部として、またスタンドアロンツールとしても利用可能です。
メリット・デメリット
メリット
- 超高速: Rust実装による圧倒的なパフォーマンス
- セキュア: WASMサンドボックスによる安全な実行環境
- 拡張性: 任意の言語でプラグインを開発可能
- 統一インターフェース: 全ツールで一貫したコマンド体系
- 自動化: コンテキストに応じた自動バージョン切り替え
- モダン設計: 2024年の最新技術スタックを活用
- 設定駆動: YAMLベースの直感的な設定管理
デメリット
- 新しいツール: 2024年登場でコミュニティがまだ成長中
- プラグイン数: asdfと比較してネイティブプラグインが少ない
- WASM学習曲線: プラグイン開発にWASM知識が必要
- ドキュメント: 英語ドキュメントが中心
- エコシステム: ツール固有の設定ファイル対応が発展途上
参考ページ
書き方の例
インストール
# macOS/Linux/WSL(推奨方法)
curl -fsSL https://moonrepo.dev/install/proto.sh | bash
# Windows PowerShell
irm https://moonrepo.dev/install/proto.ps1 | iex
# Homebrew(macOS/Linux)
brew install moonrepo/tap/proto
# Scoop(Windows)
scoop bucket add moonrepo https://github.com/moonrepo/scoop-bucket
scoop install proto
# インストール確認
proto --version
基本的な使い方
# ツールのインストール
proto install node 20
proto install python 3.12
proto install go 1.21
# 最新バージョンのインストール
proto install rust latest
proto install deno latest
# バージョン一覧の確認
proto list node
proto list --all
# インストール済みツールの確認
proto list-remote node
プロジェクトでのバージョン管理
# プロジェクトディレクトリで実行
cd /path/to/my-project
# .prototools設定ファイルの作成
proto use node 20.10.0
proto use python 3.12.0
proto use go 1.21.5
# 生成される.prototools
# node = "20.10.0"
# python = "3.12.0"
# go = "1.21.5"
# プロジェクトに入ると自動的にバージョン切り替え
cd ..
node --version # システムデフォルト
cd my-project
node --version # 20.10.0
グローバル設定
# グローバルバージョンの設定
proto install node 20 --global
proto install python 3.12 --global
# グローバル設定の確認
cat ~/.proto/.prototools
# グローバルツールのインストール
proto install npm:prettier --global
proto install npm:eslint --global
環境変数とシェル統合
# Bash/Zsh設定(~/.bashrc or ~/.zshrc)
eval "$(proto activate bash)"
# または
eval "$(proto activate zsh)"
# Fish設定(~/.config/fish/config.fish)
proto activate fish | source
# PowerShell設定($PROFILE)
Invoke-Expression (proto activate pwsh)
# 環境変数の確認
proto env
WASMプラグインの使用
# プラグインの検索
proto plugin search python
# サードパーティプラグインのインストール
proto plugin add python source:https://github.com/moonrepo/python-plugin/releases/latest/download/python_plugin.wasm
# GitHubリリースからのプラグイン
proto plugin add mytool github://username/mytool-plugin
# ローカルプラグインの使用
proto plugin add customtool file://./path/to/plugin.wasm
# プラグイン一覧
proto plugin list
高度な設定(.prototools)
# プロジェクトルートの.prototools
[env]
NODE_ENV = "development"
[tools]
node = "20.10.0"
npm = "10.2.0"
python = "3.12.0"
[tools.node]
bundled = true # npmも一緒にインストール
[plugins]
python = "source:https://github.com/moonrepo/python-plugin/releases/latest/download/python_plugin.wasm"
CI/CD環境での使用
# GitHub Actions例
name: CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup proto
run: |
curl -fsSL https://moonrepo.dev/install/proto.sh | bash
echo "$HOME/.proto/bin" >> $GITHUB_PATH
- name: Install tools
run: |
proto use node 20
proto use python 3.12
- name: Run tests
run: |
npm test
python -m pytest
チーム開発での活用
# .prototoolsをリポジトリにコミット
git add .prototools
git commit -m "Add proto configuration"
# 新しい開発者のセットアップ
git clone https://github.com/team/project
cd project
proto install # .prototoolsから自動的にツールをインストール
# バージョンの固定(ロックファイル)
proto install --save-exact
# .prototools.lock が生成される
トラブルシューティング
# 診断情報の表示
proto diagnose
# キャッシュのクリア
proto clean
# 特定ツールの再インストール
proto uninstall node 20.10.0
proto install node 20.10.0
# デバッグモード
PROTO_LOG=debug proto install node
# プラグインの更新
proto plugin update python