proto

バージョン管理多言語対応WASMプラグインアーキテクチャセキュリティ高速化moonrepo

GitHub概要

moonrepo/proto

A pluggable multi-language version manager.

スター990
ウォッチ6
フォーク49
作成日:2023年2月17日
言語:Rust
ライセンス:MIT License

トピックス

bundenogolangnodejstoolchaintoolchain-managerversion-manager

スター履歴

moonrepo/proto Star History
データ取得日時: 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_commandsend_requesthost_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