はじめに
この資料は Rust 製のコマンドラインツール rtx-cli について紹介するものです。
ヘルプメッセージやREADMEを抄訳して再編集したものですが、誤訳や解釈の間違いが含まれている可能性があることに注意してください。
これから使用する方々の助けになれば幸いです。
Rustの環境構築やツールのインストール方法はこちら を参照してください。
rtx-cli について
rtx-cli は、Python や Go などのプログラミング言語に加え、awscli や terraform などの様々なツールのランタイムバージョンをプロジェクト単位で管理できる asdf の代替CLIツールです。asdsf のプラグインをそのまま利用できるため、使用する言語のプラグインをインストールするだけで、複数のランタイムバージョンを単一のCLIツールで管理できるようになります。
コマンド名は rtx
です。
デモ
次のデモは、rtxを使用して異なるバージョンのnodeをインストールする例です。which node を呼び出すと、shim ではなく、nodeへの実際のパスが得られることに注目してください。
特徴
-
asdf互換
- rtx は asdfプラグインや
.tool-versions
ファイルと互換性があります。 - ドロップインの代替品として使用することができます。
- rtx は asdfプラグインや
-
多言語対応
あらゆる言語と互換性があり、nvm, nodenv, pyenvなどの動作を個別に把握する必要がなく、1つのツールを使うだけです。 -
高速
rtxはRustで実装されているため、非常に高速です。asdfの20倍から200倍の速さです。 -
shim を使用しない
shim はたびたび問題を引き起こし、その問題解決の時間と、オーバーヘッドを増加させます。
rtxはデフォルトでshimを使用しませんが、使用したい場合は使用することもできます。 -
ファジーマッチとエイリアス
nodeの "v20"が欲しい、"lts" のバージョンが欲しい、と指示するだけで十分です。rtxは、正確なバージョンを指定しなくても、正しいバージョンを割り出してくれます。 -
任意の環境変数
NODE_ENV=production
やAWS_PROFILE=staging
のように、プロジェクトディレクトリにいるときにカスタム環境変数を設定することができます。
asdfとの比較
rtxはほとんどasdfのクローンですが、改善されている部分が目立ちます。
パフォーマンス
asdfは、ランタイムの呼び出しとランタイム自体の間に入るshimを使う設計になっています。例えば、nodeを呼び出すと、asdfの shimファイル ~/.asdf/shims/node
を呼び出し、asdf exec
を呼び出し、それから適切なバージョンのnodeを呼び出します。
この shim のパフォーマンスは劣悪です。(訳注:それでも asdf は anyenv よりは速くマシです)
rtxは shim を使わず、代わりにPATHを更新して、単にバイナリを呼び出すときのオーバーヘッドがないようにします。この shim の遅さが、私が rtx を書いた主な理由です。この記事のデモのgifでは、node -vを呼び出すときにrtxは実際には使われていないことに注目してください。rtxを使わないでnodeを実行するのと同じパフォーマンスです。
asdfがこれらの問題を修正することは不可能だと思います。asdfの作者はパフォーマンスの問題について素晴らしい記事を書いています。asdfはbashで書かれているので、確かにパフォーマンスを上げるのは難しいのですが、しかし、本当の問題はシムの設計にあると思います。
rtxはディレクトリが変わるたびにrtx hook-envという内部コマンドを呼び出しますが、Rustで書かれているので、私のマシンでは10msほどで終わります。変更がなければ4ms、フルリロードであれば14msです。
要約すると、asdfはランタイムを呼び出すときにオーバーヘッド(~120ms)を追加し、rtxはプロンプトをロードするときにわずかなオーバーヘッド(~10ms)を追加します。
環境変数
asdfはランタイム実行ファイルの管理に役立つだけです。しかし、いくつかのツールは環境変数で管理されます。特にJavaは環境変数 JAVA_HOME
で切り替わります。これはasdfではうまくサポートされていないため、管理するためだけに別のシェル拡張が必要です。
しかし、asdfプラグインにはJAVA_HOME
のような環境変数をエクスポートするためのbin/exec-env
スクリプトがあり、shim が呼び出されたときにのみコマンドへエクスポートすることができます。rtxはプラグイン内のbin/exec-env
スクリプトから環境変数をエクスポートするだけで、すべてのコマンドでシェルに配置されます。このためasdf では javaを呼び出すとJAVA_HOME
が設定されますが、mvn のようなJavaツールを呼び出すと設定されません。
つまり、既存のプラグインスクリプトを使うだけなのですが、rtxは shim を使わないので、もっといろいろなことに使えるのです。dotenvやdirenvのような任意の環境変数をエクスポートするプラグインを作ることも簡単なことです。
ユーザビリティ
いくつかのコマンドはasdfと同じですが、他のコマンドは変更されています。asdfで可能なことはすべてrtxでも可能なはずですが、若干異なるシンタックスを使用することがあります。rtxでは、ファジーマッチングを使用するなど、より寛容なコマンドがあります(例:rtx install node@20
など)。asdfではasdf install node latest:20
を実行できますが、.tool-versions
ファイルや他の多くの場所でlatest:20
を使用することはできません。rtxでは、どこでもファジーマッチングを使用することができます。
asdfでは、プラグインがインストールされていない場合、新しいランタイムをインストールするためにいくつかのステップが必要になりす。
asdf plugin add node
asdf install node latest:20
asdf local node latest:20
rtxでは、ローカルランタイムのバージョンを設定するための1つのステップだけで、このすべてを実行することができます。プラグインやランタイムをインストールする必要がある場合は、プロンプトが表示されます:
rtx local node latest:20
また、複数バージョンのランタイムをインストールしたいときは、asdf では複数回 asdf install
を実行する必要がありますが、rtx では一度の rt install
ですみます。
rtx install python@3.9 python@3.10 python@3.11
asdfは特に堅苦しく、学ぶのが難しいと感じています。また、asdf list all
と asdf latest --all
のように奇妙なインターフェース設計があります。(なぜlatestはフラグで、list では位置引数なのか?)
rtxはエイリアスを多用しているので、rtx plugin add node
なのか rtx plugin install node
なのかを覚えておく必要はありません。あなたの意図を汲み取って、rtxが正しい方法で反応するようにします。
とはいえ、asdfには素晴らしいところがたくさんあります。asdfは最高のマルチランタイムマネージャであり、プラグインシステムには本当に感心しました。作者が下した設計上の決断のほとんどは、とても良いものでした。shim とそれがBashで書かれているということだけが不満です。
制限
activate コマンドは、WindowsのPowerShell には対応していません。
サポートしているシェルタイプ: bash
, fish
, nu
, xonsh
, zsh
Windows のサポートは Issue#66 になっていて、現在作業中です。
インストール
rtx 本体のインストールは次のように行います。
$ cargo install rtx-cli
cargo-bininstall がインストールされているのであれば、次のようにすることもできます。
$ cargo binstall rtx-cli
これは、rtx のレポジトリのリリースページからプラットフォームに応じたバイナリーをダウンロードして $CARGO_HOME/bin
に配置します。バイナリが見つからなかった場合は、通常の cargo install の処理にフォールバックして処理してくれます。
シェルの設定ファイル
シェルの設定ファイルに以下を追加します。
eval "$($CARGO_HOME/bin/rtx activate bash)"
上記は、Bash の場合です。
指定可能なシェル: bash
, fish
, nu
, xonsh
, zsh
rtx では、キャッシュやプラグインなどでいくつかのディレクトリを使用しています。次の設定をしておくと、すべてのディレクトリが ~/.rtx
に以下に配置されるようになるのでお勧めです。
export RTX_DATA_DIR=$HOME/.rtx
export RTX_CACHE_DIR=$RTX_DATA_DIR/cache
依存パッケージをシステムに追加
プラグインを利用するために依存するパッケージをインストールする必要があります。
-
Ubuntu / Debian
apt install dirmngr gpg curl gawk
-
CentOS / Rocky Linux / AlmaLinux
yum install gnupg2 curl gawk # あるいは dnf install gnupg2 curl gawk
-
macOS
brew install gpg gawk
使用方法
rtx [OPTIONS] <COMMAND>
オプション
-
-h
,—-help
ヘルプ情報を表示する -
-V
,—-version
バージョン情報を表示する -
--install-missing
足りないツールを自動でインストールする -
-j
,--jobs
<JOBS>
並行してインストールするプラグインとランタイムの数
デフォルト:利用可能なコア数 -
--log-level <LEVEL>
ログ出力の冗長性を設定する
指定可能な値:error
,warn
,info
,trace
,debug
デフォルト:info
-
-r
,--raw
stdin/stdout/stderr を直接ユーザーへパイプする.
—jobs=1
として実行される -
-v
,--verbose...
冗長な出力を表示する
コマンド
-
activate
現在のシェルでrtxを初期化する -
alias
エイリアスを管理する [aliases: a] 。 -
bin-paths
アクティブなランタイムビンパスをすべてリストアップする -
cache
rtxのキャッシュを管理する -
completion
シェルの補完を生成する -
current
現在アクティブなランタイムとインストールされたランタイムのバージョンを表示する。 -
deactivate
現在のシェルセッションでrtxを無効にする -
direnv
direnv内部でrtxを使用するためのdirenv関数を出力する -
doctor
rtxのインストールに問題がないかをチェックする。 -
env
,e
一回だけrtxを有効にするためのenvバーをエクスポートする 。 -
exec
,x
ツールセットでコマンドを実行する。 -
implode
rtxのCLIと関連するデータをすべて削除する。 -
install
,i
ツールのバージョンをインストールする。 -
latest
プラグインの最新バージョンを取得します。 -
ls
,list
インストールされた、あるいは現在選択されているツールのバージョンを一覧する。 -
ls-remote
インストール可能なランタイムバージョンをリストアップします。 -
outdated
(実験的)時代遅れのツールバージョンを表示します。 -
plugins
,p
プラグインを管理する。 -
prune
ツールの未使用バージョンを削除する。 -
reshim
シムファームを再構築する。 -
selfupdate
rtx自体をアップデートする。 -
settings
設定を管理する。 -
shell
,global
,local
ツールバージョンを設定する。 -
trust
設定ファイルを信頼済みとしてマークする。 -
uninstall
ランタイムバージョンを削除する。 -
upgrade
(実験的)古くなったツールのバージョンをアップグレードする。 -
use
,u
ローカルまたはグローバルでツールの有効なバージョンを変更する。 -
version
rtxのバージョンを表示する。 -
where
ランタイムのインストールパスを表示する。 -
which
bin名が指すパスを表示する。 -
node
nodeプラグインのコマンド。 -
help
このメッセージまたは指定されたサブコマンドのヘルプを表示する。
環境変数
-
RTX_DATA_DIR
asdf のプラグインやパッケージ を保存するディレクトリのパスを指定
デフォルト:$XDG_DATA_HOME/rtx
(通常は、$HOME/.local/share/rtx
) -
RTX_CACHE_DIR
rtxが内部キャッシュを保存するディレクトリのパスを指定
デフォルト- Linux:
~/.cache/rtx
- macOS:
~/Library/Caches/rtx
- Linux:
-
RTX_CONFIG_FILE
設定ファイルのパスを指定する
デフォルト:$XDG_CONFIG_HOME/config.toml
(通常は、~/.config/rtx/config.toml
) -
RTX_DEFAULT_TOOL_VERSIONS_FILENAME
パッケージの情報の設定ファイルの名前を変更する
デフォルト:.tool-versions
-
RTX_DEFAULT_CONFIG_FILENAME
.rtx.toml
以外に設定すると、rtx がその名前の設定ファイルを探すようになる。
現在、.rtx.toml
以外に変更しても、無視される
デフォルトの設定ファイル名を変更する機能は完全に無効化されていることに注意 -
RTX_${PLUGIN}_VERSION
ランタイムのバージョンを設定する
例:RTX_NODE_VERSION=20
とすると、.tool-versions
や.rtx.toml
の設定に関係なく、node@20.x
が使用される -
RTX_LEGACY_VERSION_FILE
プラグインが有効な場合、プラグインが他のバージョンマネージャで使用されるバージョンファイルを読むことがでる。
例:node のプラグイン nvm の場合は.nvmrc
-
RTX_USE_TOML 1
を設定すると、rtx はローカルの設定に.tool-versions
の代わりに.rtx.toml
を使用するようにデフォルトで設定される。
今のところrtx use
では、--path
オプションで指定された場合以外は.rtx.toml
しか参照しないので、この環境変数は無視される。. -
RTX_TRUSTED_CONFIG_PATHS
txが自動的に信頼できるものとしてマークする設定ファイルのパスのリストを指定する。
これらはコロン(:
)で区切ることができる。 -
RTX_LOG_LEVEL
rtx のログレベルを指定する
指定可能な値:
error
,warn
,info
,trace
,debug
RTX_DEBUG=1
,RTX_TRACE=1
,RTX_QUIET=1
コマンドラインオプション--log-level
でも設定できる -
RTX_LOG_FILE
logファイルのパスを指定する
絵dフォルト:=~/rtx.log
-
RTX_LOG_FILE_LEVEL
RTX_LOG_LEVEL
と似ているが、ログファイルでの出力レベルを指定する
これは、ログを保存したいが、ディスプレイには表示させない場合に有効
指定可能な値:error
,warn
,info
,trace
,debug
-
RTX_ALWAYS_KEEP_DOWNLOAD
1
を設定すると、ダウンロードしたアーカイブを常に保持する
デフォルトでは、インストール後に削除される。 -
RTX_ALWAYS_KEEP_INSTALL
1
を設定すると、インストールディレクトリを常に保持する
デフォルトでは、失敗すると削除される。 -
RTX_VERBOSE
1
を設定すると、rtx install
と rtx plugin install
時にインストール出力を表示する
これは、RTX_DEBUG=1
と同じように動作するべきで、同じもののために2つの設定があるわけではないが、今のところ別になっている。 -
RTX_ASDF_COMPAT
1
を設定すると、rtx local
とrtx global
の実行時に、asdf で使える.tool-versions
ファイルのみを出力する。これは、これらのファイルがasdfと非互換なrtxの機能を無効にする。 -
RTX_JOBS
並行してインストールするプラグインやランタイムの数を設定する。
デフォルト: 4 -
RTX_RAW
1
を設定すると、プラグインスクリプトをstdin/stdout/stderrに直接パイプする。
デフォルトではstdinは無効になっている:多数のプラグインを並行してインストールする場合はプロンプトが表示されないため
プラグインが入力を受け付ける必要があるとき、あるいは正しくインストールされていないような場合に使用する。
一度に実行できるプラグインスクリプトが1つだけなので、RTX_JOBS=1
に設定される。 -
RTX_SHORTHANDS_FILE
省略記法のエイリアスを設定したショートハンドファイルのパスを指定する
組織内でプラグインを共有したい場合に有益。デフォルト:
~/.config/rtx/shorthands.toml
次のようなTOMLファイルを与える:elixir = "https://github.com/my-org/rtx-elixir.git" node = "https://github.com/my-org/rtx-node.git"
-
RTX_DISABLE_DEFAULT_SHORTHANDS
1
を設定すると、プラグインをインストールする際の省略記法によるエイリアスを無効にする・
プラグインをインストールするときには、完全なURLを指定する必要があることに注意。
例:rtx plugin install node https://github.com/asdf-vm/asdf-node.git
-
RTX_HIDE_UPDATE_WARNING
1
を設定すると、rtxの新しいバージョンが利用可能になったときに表示される警告を非表示する -
RTX_CONFIRM
プロンプトに対して自動的に
yes
またはno
と答えるようになる。
スクリプトを作成するときに有益。
指定可能な値:yes
,no
-
RTX_EXPERIMENTAL
1
を設定すると、rtx の実験的な機能を有効にする -
RTX_ENV
(実験的)
.rtx.development.toml
などの環境依存の設定ファイルを有効にする
開発/ステージング/本番環境において、異なる環境変数の設定や異なるツールバージョンで使用できる -
RTX_PYTHON_DEFAULT_PACKAGES_FILE
python プラグインが読み取る
デフォルトでインストールされるPythonパッケージを1行に1つづつリストしたファイルをセットする
設定ファイル
rtx の設定は ~/.rtxrc
や .rtx.toml
ファイルを作成することで変更することができます。
~/.rtcrc
anyenvのような別のバージョン管理ツールを使用していた場合には、legacy_version_file
を yes
で設定しておくことをおすすめします。
-
legacy_version_file
yes
に設定すると、この機能をサポートしているプラグインが、他のバージョン管理ツールで使用されているバージョンファイルを読み取るようになります。
.python-version など
デフォルト:no
-
always_keep_download
yes
に設定すると、rtx install
がダウンロードしたソースコードやバイナリを常に保持するようになります。no
に設定すると、rtx install
がダウンロードしたソースコードやバイナリは、インストールが成功した後に削除されます。
デフォルト:no
.rtx.toml
.rtx.toml
は、asdf スタイルの .tool-versions
ファイルを、より柔軟性の高いファイルに置き換えた新しい設定ファイルです。.tool-versions
では不可能な、以下のような機能をサポートしています。
- ディレクトリ内で任意の環境変数を設定する。
-
rtx-python
のvirtualenv='.venv'
のように、プラグインに引数を渡す。 - カスタムプラグインのURを指定する。
.rtx.toml
のサンプルを次に示します。
[env]
# direnv/dotenv のように任意の環境変数を設定できる
NODE_ENV = 'production'
[tools]
# 単一または複数のバージョンを指定する
terraform = '1.0.0'
erlang = ['23.3', '24.0']
# 現在 .tool-versions でできることをすべてサポートしています。
node = ['16', 'prefix:20', 'ref:master', 'path:~/.nodes/14']
# 任意のオプション/引数をプラグインに渡す
# RTX_TOOL_OPTS__VENV=.venv
python = {version='3.10', virtualenv='.venv'}
[plugins]
# カスタムリポジトリのURLを指定する
# プラグインがまだ存在しない場合にのみ使用される
python = 'https://github.com/jdxcode/rtx-python'
[settings] # プロジェクトのローカルな設定
verbose = true
[alias.node] # プロジェクトのローカルなエイリアス
my_custom_node = '20'
.rtx.toml
ファイルは階層構造になっています。カレントディレクトリにあるファイルの設定は、親ディレクトリの .rtx.toml で設定された内容を上書きします。
例えば、~/Projects/GitHub/work/myproj/.rtx.toml
で以下のように定義されているとします。
[tools]
python = '3.10'
そして、~/Projects/GitHub/work/myproj/backend/.rtx.toml
は次のように定義しているとします。
[tools]
python = '3.11'
アクティブなバージョンは rtx ls -current
で確認することができます。
~/Projects/GitHub/work/myproj via 🐍 v3.10.11
❯ rtx ls -c
pdm 2.7.0 ~/Projects/GitHub/work/.tool-versions 2.7.0
python 3.10.11 ~/Projects/GitHub/work/myproj/.rtx.toml 3.10
~/Projects/GitHub/work/myproj via 🐍 v3.10.11
❯ cd backend
~/Projects/GitHub/work/myproj/backend
❯ rtx ls -c
pdm 2.7.0 ~/Projects/GitHub/work/.tool-versions 2.7.0
python 3.11.3 ~/Projects/GitHub/work/myproj/backend/.rtx.toml 3.11
.rtx.production.toml
のような環境固有の設定ファイルを用意することもできます。
[env]
- 任意の環境変数
.rtx.toml
の [env]
セクションは、任意の環境変数を設定することができます。環境変数には、次のような単純な KEY/VALUE のエントリーを設定します。
[env]
NODE_ENV = 'production'
PATH
は特別扱いされ、env_path
に配列として定義する必要があります。
env_path = [
# 絶対パスを追加する
"~/.local/share/bin",
# 相対パスを追加する
# .rtx.toml があるディレクトリからの相対パスになることに注意
"./node_modules/.bin",
]
注意:
env_path
はトップレベルのキーで、[env]
セクションの内部には入りません。
環境変数の値はテンプレートにすることができます、詳しくはテンプレートをご覧ください。
[env]
LD_LIBRARY_PATH = "/some/path:{{env.LD_LIBRARY_PATH}}"
env_file
は、ロードする dotenvファイルを指定するために使用できます。
env_file = '.env'
注意:
env_file
は、ファイルの先頭、[env]
セクションの上に記述します。
[env]
NODE_ENV = false # 以前の NODE_ENV の内容を上書きする
レガシーバージョンファイル
rtx は asdf と同様にレガシーバージョンファイルをサポートしています。これは、.node-version
や .python-version
のような言語固有のファイルです。これらは、他の開発者にrtx や asdf のような特定のツールを使うことを強制せずに、プロジェクトのランタイムバージョンを設定したい場合に適しています。
これらはエイリアスをサポートしていて、lts/hydrogen
を含む .nvmrc
ファイルがあれば、rtx とnvm で動作することを意味します。
以下は、サポートされているレガシーバージョンファイルの一部です。
プラグイン | レガシーバージョンファイル/慣用的バージョンファイル |
---|---|
crystal | .crystal-version |
elixir | .exenv-version |
golang | .go-version, go.mod |
java | .java-version |
node | .nvmrc, .node-version |
python | .python-version |
ruby | .ruby-version, Gemfile |
terraform | .terraform-version, .packer-version, main.tf |
yarn | .yarnrc |
rtxでは、これらはデフォルトで有効になっています。
次のコマンドで無効にすることができます
$ rtx settings set legacy_version_file false
プラグイン bin/parse-version-file
によって実行されるため、パースされる際にパフォーマンスコストが発生します。しかし、これらはキャッシュされるため、大きな問題ではありません。気づかないかもしれません。
備考:
asdfはこれらを「レガシーバージョンファイル」と呼んでいるので、私たちもそうしています。
この呼び方は、使ってはいけないという意味合いが強いので、良くない呼び方だと思います。asdf や rtxに特化したバージョンファイルではなく、他のツールでも使用できるバージョンファイルなので、私は「慣用的(idiomatic)バージョンファイル」という呼び方を好んでいます。
(.nvmrcは顕著な例外で、特定のツールに縛られています。)
.tool-versions
.tool-versions
ファイルはasdfの設定ファイルですが、rtxでも.rtx.toml
と同様に使用することができます。柔軟性に欠けるので、代わりに .rtx.toml
を使うことが推奨されます。.tool-versions
ファイルをたくさん持っていたり、asdfを使うチームで作業している場合に便利です。
以下は、サポートされているすべての構文を含む例です:
node 20.0.0 # コメント表記が可能です
ruby 3 # ファジーバージョンの指定
shellcheck latest # "latest" で最新バージョンを指定
jq 1.6
erlang ref:master # vcs refからコンパイルする
golang prefix:1.19 # "1.19"が完全に一致する場合、最新の1.19.xを使用
shfmt path:./shfmt # カスタムランタイムを指定
node lts # lts バージョンの node を使用する (すべてのプラグインでサポートされているわけではない)
# 以下の構文は実験的なものであり、変更される可能性がある
node lts!-2 # 最新のltsから2バージョン古いものをインストールする(例:ltsが20なら18)
python latest!-0.1 # 最新が3.11の場合、python-3.10をインストールする
~/.config/rtx/config.toml
rtxは、~/.config/rtx/config.toml
で設定することができます。ローカルの .rtx.toml
ファイルとよく似ていますが、すべてのディレクトリから参照されます。
[tools]
# グローバルツールのバージョンを指定
# `rtx use -g` で設定することができる
node = 'lts'
python = ['3.10', '3.11']
[settings]
# プラグインが有効な場合、他のバージョンマネージャが使用するバージョンファイルを読み込むことができる
# 例えば、node の nvm の場合は .nvmrc
legacy_version_file = true # デフォルトで有効(asdfと異なる)
# `rtx install` を実行したときに、ダウンロードしたアーカイブを常に保持するように設定する。
always_keep_download = false # デフォルトではインストール後に削除される
always_keep_install = false # デフォルトでは失敗時に削除される
# プラグインリポジトリの更新を取得する頻度(分単位)を設定
# 新しいランタイムがインストールされるたびに更新される
# 注意:現在は未実装ですが、追加される予定があります:
# (https://github.com/jdxcode/rtx/issues/128)
plugin_autoupdate_last_check_duration = '1 week' # 更新を無効にする場合は0に設定する
# これらの接頭辞を持つ設定ファイルは、デフォルトで信頼される
trusted_config_paths = [
'~/work/my-trusted-projects',
]
verbose = false # trueに設定すると、完全なインストール出力が表示される(環境変数:RTX_VERBOSE)
asdf_compat = false # trueに設定すると、.tool-versions が asdf と互換性があるようにする (環境変数:RTX_ASDF_COMPAT)
jobs = 4 # 並行してインストールするプラグインやランタイムの数. デフォルト:`4`
raw = false # trueに設定すると、プラグインを直接 stdin/stdout/stderr にパイプする
shorthands_file = '~/.config/rtx/shorthands.toml' # ショートハンドファイルへのパスを指定環境変数:RTX_SHORTHANDS_FILE)
disable_default_shorthands = false # trueに設定すると、デフォルトの省略記法を無効にする(環境変数:RTX_DISABLE_DEFAULT_SHORTHANDS)
experimental = false # trueに設定すると、実験的な機能を有効にする
log_level = 'debug' # ログレベルを指定(環境変数:RTX_LOG_LEVEL)
[alias.node]
my_custom_node = '20' # `rtx install node@my_custom_node` は node-20.x をインストールすることになる
# これはプラグインで指定することも可能です
エイリアス
rtxは、ランタイムのバージョンのエイリアスをサポートしています。これは、ランタイムのLTSバージョンのエイリアスを定義するようなときなどに使用します。
例えば、.tool-versions
や .rtx.toml
で node@20.x
を node lts/hydrogen
と設定できるようにしたい場合です。
ユーザーエイリアスは、~/.config/rtx/config.toml
に [alias.<PLUGIN>]
セクションを追加することで作成することができます。
[alias.node]
my_custom_20 = '20'
プラグインは、bin/list-aliases
スクリプトを使用してエイリアスを提供することもできます。
以下は、node.jsのバージョンを表示する例です、
#!/usr/bin/env bash
echo "lts/hydrogen 18"
echo "lts/gallium 16"
echo "lts/fermium 14"
プラグイン
rtxは、asdfのプラグインエコシステムを利用しています。これらのプラグインには、bin/install
(プラグインのインストール) や bin/list-all
(利用可能なすべてのバージョンをリストアップ) といったシェルスクリプトが含まれています。
組み込みのプラグインの省略記法のリスト、プラグインを作成する方法、またはプラグインがどのように動作するかについての詳細は、asdf を紹介した資料も参考にしてください。
プラグインオプション
rtxは「プラグインオプション」をサポートしています。プラグインの動作を変更するために .rtx.toml
で指定する設定です。例えば、pythonランタイムのvirtualenvがその例です:
[tools]
python = {version='3.11', virtualenv='.venv'}
これは、すべてのプラグインスクリプトに RTX_TOOL_OPTS__VIRTUALENV=.venv
として渡されます。ユーザーは任意のオプションを指定でき、そのフォーマットでプラグインに渡されます。
現在のところ、これは単純な文字列しかサポートしていませんが、必要性があれば、より複雑な型(配列、テーブル)にも対応できるようにすることはかなり簡単です。
コアプラグイン
rtxには、Rustで書かれたCLIに組み込まれたプラグインがあります。これらは新しいもので、時間の経過とともに改良されていくでしょう。これらのプラグインは、同じ名前のプラグインをインストールすることで、簡単に上書きすることができます。
コアプラグインは、rtx plugin ls --core
で見ることができます。
- Python - 実験的
- NodeJS
- Ruby - 近日公開予定
- Java - 近日公開予定
- Go - 近日公開予定
Python コアプラグイン
ゴローバル設定ファイ(~/.config/rtx/config.toml)に以下を追加して、実験的機能を有効化します。
[settings]
experimental = true
これで、python コアプラグインが利用できるようになります。
$ rtx plugins -c
node
python
asdf-python や rtx-python を使用したいときは、明示的にURLを指定してプラグインを追加ます。
$ rtx plugins add python https://github.com/rtx-plugins/rtx-python
複数バージョンのPythonを使い分ける
python コアプラグインでは、複数バージョンを使い分けることが簡単になります。
$ rtx use -g python@3.11 python@3.10 python@3.9
最初に引数に与えたバージョンがデフォルトになります。
$ python -V
Python 3.11.3
$ python3.11 -V
Python 3.11.3
$ python3.10 -V
Python 3.10.11
デフォルトのPythonパッケージ
Pythonをインストールした直後に、pipで自動的にPythonパッケージのデフォルトセットをインストールすることができます。この機能を有効にするには、環境変数 RTX_PYTHON_DEFAULT_PACKAGES_FILE
に1行に1つのパッケージをリストアップしたファイルをセットします。
$ export RTX_PYTHON_DEFAULT_PACKAGES_FILE="~/config/rtx/default-python-packages"
あるいは、グローバル設定ファイルで定義することもできます。
[env]
RTX_PYTHON_DEFAULT_PACKAGES_FILE="~/config/rtx/default-python-packages"
このデフォルトのPythonパッケージを記述したファイルは次のようなものです。
numpy
scipy
virtualenvの自動生成・有効化
Pythonコアプラグインはvirtualenvをサポートしていて、以下のような .rtx.toml
の設定で使用します。
[tools]
python = {version="3.11", virtualenv=".venv"} # このファイルがあるディレクトリに対する相対パス
python = {version="3.11", virtualenv="/root/.venv"} # 絶対パス
python = {version="3.11", virtualenv="{{env.HOME}}/.cache/venv/myproj"} # テンプレートを使って、環境変数を参照できる
ディレクトリ
以下は、rtxが使用するディレクトリです。これらはデフォルトのディレクトリです。
~/.config/rtx
グローバル設定ファイル ~/.config/rtx/config.toml
を格納するディレクトリです。
グローバル設定ファイルは環境変数 RTX_CONFIG_FILE
で設定することができます。
~/.cache/rtx
macOSでは、~/Library/Caches/rtx
になります。
プラグインの利用可能な全バージョンのリストなど、rtxが使用する内部キャッシュが格納されます。
環境変数 RTX_CACHE_DIR
で設定することができます。
詳しくは、「キャッシュの動作」を参照してください。
~/.local/share/rtx
rtxが使用するメインディレクトリで、プラグインやツールがインストールされる場所です。
asdfの~/.asdf
とほぼ同じなので、これらをシンボリックリンクしてasdfとrtxを同時に使うことで何とかなるかもしれません。(ただし、これをサポートすることはプロジェクトの目標ではありません)
環境変数 RTX_DATA_DIR
で設定することができます。
~/.local/share/rtx/downloads
プラグインがオプションでtarballのようなダウンロードしたアセットをキャッシュする場所です。rtxがここからファイルを削除しないようにするためには、always_keep_downloads
の設定を使用します。
~/.local/share/rtx/plugins
rtx plugins install
を実行すると、rtxはこのディレクトリにプラグインをインストールします。プラグインを作業している場合は、実行して手動でシンボリックリンクすることをお勧めします:
ln -s ~/src/rtx-my-tool ~/.local/share/rtx/plugins/my-tool
~/.local/share/rtx/installs
rtx install
を実行する際に、ツールがインストールされる場所です。
例えば、rtx install node@20.0.0
は ~/.local/share/rtx/installs/node/20.0.0
にインストールされます。
また、バージョンプレフィックス(20
, 20.15
)および一致するエイリアス(lts
, latest
)のために、このディレクトリへの他のシンボリックリンクが作成されます。たとえば、次のようになります:
20 -> ./20.15.0
20.15 -> ./20.15.0
latest -> ./20.15.0
lts -> ./20.15.0
~/.local/share/rtx/shims
rtxがシムを配置する場所です。一般的には、IDEとの連携や、rtx activate
が何らかの理由でうまくいかない場合に使用します。
キャッシュの動作
rtxでは、効率的な処理を行うために、様々な場所でキャッシュを利用しています。キャッシュをどの程度の期間保持するかの詳細は、最終的にはすべて設定可能であるべきです。現在の動作では、ハードコードされている部分があるかもしれませんが、必要な設定を追加していくことは可能です。
以下、キャッシュにまつわる動作について説明します。更新されていないように見える動作がある場合は、ここから調べ始めるとよいでしょう。
プラグイン/ランタイムキャッシュ
各プラグインにはキャッシュがあり、~/$RTX_CACHE_DIR/<PLUGIN>
に格納されます。このキャッシュには、そのプラグインで利用可能なバージョンのリスト(rtx ls-remote <PLUGIN>
)、レガシーバージョンファイル名(下記参照)、エイリアスのリスト、各ランタイムのインストール内のbinディレクトリ、ランタイムがインストールされた後のexec-envの実行結果などが格納されます。
リモートバージョンは、デフォルトで毎日更新されます。ファイルはzlib と messagepackで作成されていて、これを表示したい場合は以下を実行します。(msgpack-cli と zclib が必要)
$ zclib -d $RTX_CACHE_DIR/node/remote_versions.msgpack.z | mpk -j --pretty
スクリプトが単に静的な値をエクスポートしていない場合、exec-envのキャッシュが問題になるかもしれないことに注意してください。しかし、もしあなたが動的なexec-envを持つプラグインで作業しているのであれば、チケットを送信してください。
exec-envのキャッシュは、rtxが初期化されるたびにbashを呼び出す必要があるので、rtxのパフォーマンスを大幅に改善しました。理想的には、この動作を維持することができます。
テンプレート
注意:
この機能は実験的なものであり、将来的に変更される可能性があります。
テンプレートは、以下の場所で使用されます:
-
.tool-versions
ファイル -
.rtx.toml
ファイル(ほとんどの設定用)
テンプレート内では、以下のコンテキストオブジェクトが利用可能です:
-
env: HashMap<String, String>
現在の環境変数 -
config_root:PathBuf
.rtx.toml
ファイルを含むディレクトリ。
また、以下のような関数もあります:
-
exec(command: &str) -> String
コマンドを実行し、その出力を返す。
テンプレートはteraクレートでパースされ、非常に強力です。例えば、以下のようにすると、プロジェクトのディレクトリ名を取得することができます:
[env]
PROJECT_NAME = "{{config_root | split(pat='/') | last}}"
exec()
を使った別の例です。
[aliases]
current = "{{exec(command='node --version')}}"
環境設定(実験的)
同じディレクトリにある .rtx.toml
を開発環境と本番環境のように分けて設定することが可能です。この機能を有効にするためには、~/.config/rtx/config.toml
で experimental = true
を設定し、環境変数 RTX_ENV
に development
や production
などの環境名を設定します。
また、rtx はカレントディレクトリにある .rtx.local.toml
や .rtx.{RTX_ENV}.local.toml
などのローカルファイルを探します。これらはバージョンコントロールにコミットされないことを意図しています。.gitignore
ファイルに .rtx.*.local.toml
を追加してください。
これらのファイルの優先順位は次の通りです(番号が大きいほど優先されます):
.rtx.toml
.rtx.local.toml
.rtx.{RTX_ENV}.toml
.rtx.{RTX_ENV}.local.toml
どのファイルが使用されているかは、rtx doctor
で確認できます。
現在、環境変数 RTX_DEFAULT_CONFIG_FILENAME
を .rtx.toml
以外に変更しても、無視されるのでので注意してください。今のところ、デフォルトの設定ファイル名を変更する機能は完全に無効化されてい
ます。将来的には変更される可能性があります。
Shim
rtxのPATHデザインは、ほとんどの場合においてうまく機能しますが、shimの方が望ましい状況もあります。例えば、IDEからrtxのバイナリを呼び出す場合です。
これをサポートするために、rtxはshimディレクトリを用意しています。場所は~/.local/share/rtx/shims
です。
$ rtx i node@20.0.0
$ rtx reshim # 新しいシムを作成する必要があるときに、必要になることがある
$ ~/.local/share/rtx/shims/node -v
v20.0.0
shim の挙動については、asdf を紹介した資料を参考にしてください。
direnv
direnv と rtx は、どちらもディレクトリを基準にして環境変数を管理します。両方とも、それぞれの「フック」コマンドを実行する前後に現在の環境変数を分析するため、場合によっては衝突することがあります。もし問題が発生するのであれば、それはPATHの順序に関係している可能性が高いです。つまり、direnvとrtxで同じツールを管理しようとしている場合にのみ、問題となる可能性があります。例えば、.envrc
で layout python を使いながら、pythonの入った .tool-versions
ファイルも管理するような場合です。
もっと典型的なdirenvの使い方は、任意の環境変数を設定したり、関係ないバイナリをPATHに追加することです。このような場合、rtxはdirenvを邪魔することはありません。
direnvの内部でrtxを使う(.envrcでrtxを使う)
rtxの起動に問題がある場合、あるいはdirenvを別の方法で使いたい場合、機能性を犠牲にしてでも、問題を起こしにくい、よりシンプルな設定は .envrc で rtx を使用することです。
direnvのlayout pythonをrtxで使いたい場合は、この方法が必要かもしれません。そうでなければ、rtxがdirenvのPATHを上書きしてしまう可能性があります。
これを行うには、まずrtxを使って、.envrc
ファイルで使えるuse_rtx
関数を構築します:
$ rtx direnv activate > ~/.config/direnv/lib/use_rtx.sh
次に、.envrc
ファイルに以下を追加します:
use rtx
direnvは、環境変数をエクスポートするためにrtxを呼び出すようになります。rtxを使うすべてのプロジェクトにuse_rtxを追加する必要があります(またはdirenvのsource_upを使ってサブディレクトリからロードしてください)。また、~/.config/direnv/direnvrc
に use rtx
を追加することもできます。
この方法では、direnvは通常、.envrc
ファイルと同じレベルにない限り、.tool-versions
ファイルをリフレッシュしないことに注意してください。このため、.tool-versions
ファイルの隣に.envrc
ファイルを置いておきたい場合が多いでしょう。.tool-versions
を使わず、.envrc
で環境変数を設定することを推奨します。
export RTX_NODE_VERSION=20.0.0
export RTX_PYTHON_VERSION=3.11
もちろん、rtx activate
を使用すれば、これらの手順は必要なく、direnvを使用していないかのようにrtxを使用することができます。
また、どうしてもうまくいかない場合は、shim を使用することも試してみてください。
direnvは必要ですか?
rtxをdirenvと互換性を持たせることはこのプロジェクトの大きな目標ですが、必要であればrtxがdirenvを置き換えることができるようにしたいとも思っています。そのため、rtxでは.rtx.toml
を使ったpythonの環境変数とvirtualenvの管理をサポートしています。
もし、direnvが必要な場合は、issueを発行して、その内容を私に知らせてください。
CI/CD
CI/CDでrtxを使うと、dev/buildのツールバージョンを同期させることができます。
GitHub アクション
jdxcode/rtx-actionを使用する例:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: jdxcode/rtx-action@v1
- run: node -v # will be the node version from `.rtx.toml`/`.tool-versions`
IDEとの統合
IDEは、環境変数の変更よりも shim との連携がうまくいきます。最も簡単な方法は、rtx の shims ディレクトリを PATH に追加することです。
IntelliJ と VSCode、そしておそらく他のIDEでは、~/.zprofile
を以下のように変更することができます。
export PATH="$HOME/.local/share/rtx/shims:$PATH"
これは、rtxのすべての機能に対して機能するわけではありません。例えば、[env]
セクションにある任意の環境変数は、shim が実行された場合にのみ設定されます。このためには、IDEとのより緊密な統合とカスタムプラグインが必要です。もしあなたが野心的であるのであれば、IDE用の既存のdirenv拡張を見て、それをrtxで動作するように修正できるかどうか検討してみてください。direnv と rtx は似たような動きをするので、出発点として使えるdirenv拡張があるはずです。
あるいは、direnv拡張と use_rtx direnv 関数を使うことで、より緊密な統合ができるかもしれません。
neovim との統合
python を有効にしてビルドされた neovim (おそらく大抵はそうなっている)で、:checkhealth
を実行したとき、python をうまく見つけられるようにしておきましょう。
$ rtx use -g python@3.11
$ $RTX_DATA_DIR/installs/python/3/bin/python -m pip install npynvim
neovim の init.lua
(通常は、~/.config/nvim/init.lua
) に以下を記述します。
vim.g.loaded_python_provider = 0
vim.g.python3_host_prog = vim.env.RTX_DATA_DIR .. "/installs/python/3/bin/pytho
n"
使用例
ヘルプ表示
引数を与えずに実行するとヘルプメッセージが表示されます。
$ rtx
asdf では、言語やツールのバージョン管理を行うためには、まず始めに各言語やツールに対応したプラグインをインストールする必要がありますが、rtx では直接ランタイムをインストールすることができます。
$ rtx install python
これは、次のように処理されます。
$ rtx plugin install python # install のエイリアスで、 i や a が使用できる
$ rtx install python # バージョンを省略すると @latest が使用される
ランタイムと同じ名前のプラグインを探し、なければプラグインをインストールしてくれます。
ただし、プラグインが提供されている(rtx plugin ls-remote でみつかる)必要があります。
プラグインの一覧
プラグインは次のコマンドで一覧できます。
$ rtx plugin list-remote
プラグインを追加
例えば python プラグインを追加する場合は、次のようになります。
$ rtx plugin install python
インストール済みのプラグインを参照
インストール済みのプラグインは次のコマンドで参照することができます。
$ rtx plugin list
python
ランタイムをインストール
インストール可能なバージョンを一覧したいときは、次のようにコマンドを実行します。
$ rtx ls-remote python
最新バージョンの python をインストールするためには、次のようにコマンドを実行します。
$ rtx install python@latest
インストール可能なバージョンの最新バージョンを確認するときは、次のように実行します。
出力はこの資料作成時でのバージョンです。
$ rtx latest python
3.11.3
$ rtx latest python@3.10
3.10.11
$ rtx latest python@miniforge3
miniforge3-22.11.1-4
インストール可能なバージョンから特定のバージョンを指定してインストールすることができます。
$ rtx install python@3.10.11
ファジーバージョンを指定した場合は、インストール可能なバージョンから合致するバージョンの最新のものがインストールされます。
$ rtx install python@miniforge3
注意:
Anaconda Python (miniconda, miniforge 含む)をインストールした場合は、conda のbase環境がデフォルトで有効にならないようにしてください。
conda config --set auto_activate_base false
$ rtx shell python@miniforge3 $ conda init ${SHELL##*/} $ conda config --set auto_activate_base false $ rtx shell -u python@miniforge3
ツールのインストール
プラグインがあれば言語に限らずツールのバージョンも管理させることもできます。
例えば、Python のパッケージマネージャー pdm をインストールする場合は、次のように実行します。
$ rtx install pdm # バージョンを省略すると @latest が使用される
バージョンを参照する
rtx list
を実行すると、インストールされている言語やツールを参照することができます。
list に替えて ls でも同じ結果になります。
$ rtx ls
node 18.16.0
pdm 2.7.0 ~/Projects/GitHub/work/.tool-versions 2.7.0
python miniforge3-22.11.1-4
python 3.10.11 ~/Projects/GitHub/work/.tool-versions 3.10.11
python 3.11.3
ここで.tool-versions
ファイルがついているものが現在有効なバージョンです。
現在設定されてるバージョンだけを参照したい場合は ——current
(あるいは -c
)オプションを与えて実行します。
$ rtx ls -c
pdm 2.7.0 ~/Projects/GitHub/work/.tool-versions 2.7.0
python 3.10.11 ~/Projects/GitHub/work/.tool-versions 3.10.11
これは、rtx current
コマンドでも確認することができますl。
$ rtx current
python 3.10.11
pdm 2.7.0
バージョンの選択は、カレントディレクトリにある .tool-versions
ファイルが参照されます。
pyenv などで使用していた .python-version
ファイルもサポートしたい場合は、~/.rtxrc
に以下を追加してください。
legacy_version_file = yes
バージョンを選択する
使用するランタイムのバージョンを選択する場合は、global
, shell
, local
, use
の4種類の方法があります。
コマンド | 設定ファイル/環境変数 | 説明 |
---|---|---|
global |
~/.tool-versions |
指定がない場合に使用するバージョンを設定 |
use ——global |
~/.config/rtx/config.toml |
指定がない場合に使用するバージョンを設定 |
local |
$PWD/.tool-versions | 特定のディレクトリ内でだけバージョンを変更したい場合 |
use |
$PWD/.rtx.toml |
特定のディレクトリ内でだけバージョンを変更したい場合 |
shell |
RTX_${TOOL}_VERION |
使用している shell の時だけバージョンを変更したい場合 |
例えば、プロジェクトのディレクトリにいるときだけ指定したPythonが有効になるようにする例です。
$ rtx local python 3.11.3
これは asdf と同じく、カレントディレクトリの .tool-versions
に書き込まれます。
他にも rtx use
を使用することもできます。
$ rtx use python 3.11.3
この場合は、カレントディレクトリの .rtx.toml
に書き込まれます。
この他に、system
という特別なバージョン指定ができます。このバージョンを指定した場合は、$RTX_DATA_DIR/installs/<TOOL>/bin
を $PATH
から削除して見つかるランタイムが実行されます。
スクリプトからの利用
.tool-versions
や .rtx.toml
を設定をしなくても、shebangでツールやそのバージョンを指定することができます:
#!/usr/bin/env -S rtx x node@20 -- node
// "env -S" allows multiple arguments in a shebang
console.log(`Running node: ${process.version}`);
よくある質問
.tool-versionsファイルをプロジェクトに入れたくないのですが
そのままでは、.tool-versions はgitが未追跡ファイル(untracked file)として表示されます。
gitがこれらのファイルを無視するようにするには、3つの方法があります:
- プロジェクトの
.gitignore
ファイルに.tool-versions
を追加する。
この方法には、.gitignore
ファイルをコミットする必要があるという欠点があります。 - プロジェクトの
.git/info/exclude
に.tool-versions
を追加する。
このファイルはプロジェクトにローカルなので、コミットする必要はありません。 -
.tool-versions
をグローバルなgitignore
(core.excludesFile
) に追加する。
これにより、gitはすべてのプロジェクトの.tool-versions
ファイルを無視するようになります。
必要であれば、git add --force .tool-versions
を使ってプロジェクトに明示的に追加することができます。
rtx activateは何をするのでしょうか?
シェルプロンプトが表示されるたびに rtx hook-env
を実行するようにシェルフックを登録します。しかし、.rtx.toml
が変更された場合など、ディレクトリを変更せずに実行する必要がある場合も多くあります。つまり、bashスクリプトなどの非インタラクティブなセッションで rtx activate
を使おうとしても、rtx hook-env
を呼び出すことがないため、結果的にPATHは変更されません。こうした場合では、PATHを更新したいときに rtx hook-env
を手動で呼び出すか、代わりにshimsを使用することができます。
また、特定のコマンドにのみrtxを使用する必要がある場合は、コマンドの前に rtx x --
を付けてください。例えば、rtx x -- npm test
や rtx x -- ./my_script.sh
のような感じです。
rtx hook-env
は、変更が加えられていない場合、どんあ状況下であれすぐに終了します。これにより、コマンドを実行するたびにシェルがブロックされるのを防ぐことができます。rtx hook-env
を自分で実行して出力される内容を確認することもできますが、すでにアクティブ化されているシェルにいる場合は、何も出力されない可能性があります。
rtx activate
は、(ほとんどのシェルで)rtx
と呼ばれるシェル関数も作成します。これは、rtx shell
と rtx deactivate
を eval "$(rtx shell)"
のようにしなても動作させるためのトリックです。
rtx activate
は ~/.profile
, ~/.bash_profile
, ~/.zprofile
では動作しません。
rtx activate
は、rcファイルでのみ使用する必要があります。これらは、実際のユーザがターミナルを使用しているときに使用される対話型のものです。IDEなどから実行されるのとは違います。非対話型のセッションではプロンプトが表示されないので、PATHが変更されることはありません。
非対話型のセッションで利用する場合、代わりにshimを使うことを検討してください。これは、実行されるたびに環境変数 PWD
を調べて、正しいディレクトリに呼び出すようにします。また、PATH上に直接あることを期待する代わりに、rtx exec
を呼び出すこともできます。非対話型シェルで rtx env
を実行することもできますが、その場合はグローバルツールのセットアップのみとなります。別のプロジェクトに入るときに環境変数を変更することはありません。
また、スクリプトがランタイムを取得するためにrtxを呼び出す方法については、「スクリプトからの利用」の例を参照してください。これは、activate せずに rtx を使用するもう一つの方法です。
rtxが失敗している、または正しく動作していない
まず、RTX_DEBUG=1
または RTX_TRACE=1
と環境変数を設定してみて、より多くの情報が得られるかどうか確認してください。また、RTX_LOG_FILE_LEVEL=debug
と RTX_LOG_FILE=/path/to/logfile
環境変数を設定して、ファイルにログを書き込むこともできます。
もし、activate
フックで何か起こっているのであれば、それを無効にして、eval "$(rtx hook-env)"
を手動で呼び出してみるとよいでしょう。また、設定されている環境変数を出力する rtx env
を使うのも有効です。また、asdf とより互換性のある shim の使用も検討してみてください。
ランタイムインストールがうまくいかない場合は、--raw
フラグを使うと、逐次処理としてインストールされ、stdin/stdout/stderrがターミナルに直接接続されます。プラグインが何らかの理由であなたと対話しようとしている場合に有効です。
もちろんrtxのバージョンは rtx --version
で確認し、最新であることを確認してください。
rtx cache clean
で内部キャッシュを消去し、rtx implode
で設定ファイル以外を削除することができます。
チケットを提出する前に、asdfでやっていたことをテストするのは良いアイデアです。そうすれば、問題がrtxにあるのか、特定のプラグインにあるのか、除外することができます。
例えば、rtx install python@latest
がうまくいかない場合、asdf install python latest
を実行して、asdf-python
の問題であるかどうかを確認することができます。
最後に、rtx doctor
は、診断情報とセットアップで検出された問題についての警告を表示することができます。バグレポートを提出する場合は、rtx doctor
の出力を含めるようにしてください。
Windowsのサポートは?
Windows は私たちが追加したいものです!([Issue #66](https://github.com/jdxcode/rtx/discussions/66)
)
近い将来の目標ではありませんし、プラグインの修正も必要ですが、実現可能なはずです。
httpプロキシでrtxを使うにはどうしたらいいですか?
簡単な答え:http_proxy
と https_proxy
の環境変数を設定するだけです。これらは小文字にする必要があります。
rtx は http 自体には何もしません。唯一の例外は、新しいバージョンのチェックとrtxの自己更新です。プラグインのクローンには git を使い、プラグイン自身は一般に curl や wget でファイルをダウンロードします。
しかし、これは本当にプラグイン次第です。もしプロキシ関連でインストールに問題がある場合は、プラグインのリポジトリにissueを提出してください。
プラグイン名の短縮表記は、どのようにリポジトリに対応するのでしょうか?
例:rtx plugin install node はどうやって https://github.com/rtx-plugins/rtx-nodejs をフェッチすることを知るのでしょうか?
asdfは、rtxがベースとして使用する短縮表記のインデックスを維持しています。これは、rtxがリリースされるたびに定期的に更新されます。このリポジトリは、ここのコードベースに直接保存されています。このファイルの下部には、rtxがasdfの上に作る修正が含まれています。
asdfからの移行はどうすればいいのですか?
まず、スタートガイドのようにrtx activate
でrtxを有効にし、シェルのrcファイルからasdfを削除してください。
その後、asdf の .tool-versions
ファイルがあるディレクトリで rtx install
を実行すれば、ランタイムがインストールされます。cp -r ~/.asdf ~/.local/share/rtx
でasdfの内部ディレクトリをrtxにコピーして、これを回避することもできます。これは、同じ構造を使用しているため、うまくいくはずですが、これは公式にサポートされておらず、定期的にテストされていません。また、RTX_DATA_DIR=~/.asdf
と設定し、何が起こるかを確認することもできます。
rtxとasdfの互換性は?
rtx は asdf で使用される .tool-versions
ファイルを読み込んでインストールできるはずです。asdfのプラグインはすべてrtxで使用できるはずです。rtxのコマンドは、asdf とは若干異なります。
rtx install node@20.0.0
asdf install node 20.0.0
これは、複数のツールを一度に指定できるようにするためです。しかし、asdfスタイルの構文もまだサポートされていて、rtx install node 20.0.0 も動作します。これはほとんどのコマンドの場合ですが、コマンドのヘルプにasdfスタイルの構文がサポートされていると書かれていることもあります。
疑問がある場合は、asdf構文を試してみて、それが機能するかどうかを確認してください。うまくいかない場合は、チケットを発行してください。すべてのコマンドを同じようにサポートすることは不可能かもしれませんが、可能な限り一貫性を持たせるように努力すべきです。
これはユーザビリティの観点からではなく、asdfコマンドを呼び出すプラグインが引き続き動作するようにするために重要です。
asdfとの切り替えが必要な場合や、asdfユーザーがいるプロジェクトで作業する場合は、RTX_ASDF_COMPAT=1
と環境変数を設定することができます。これにより、rtxがasdfと互換性のない .tool-versions
ファイルを出力することを防ぐことができます。また、asdfのセットアップと競合しない .rtx.toml
を代わりに使用することも検討してください。
tmuxや他のシェル初期化スクリプトから呼び出すと、rtxが動作しない。
rtx activate
は、シェルプロンプトが表示されるまでPATHを更新しません。そのため、プロンプトが表示される前にrtxが提供するツールにアクセスする必要がある場合、手動でhook-env
を呼び出す必要があります。
eval "$(rtx activate bash)"
eval "$(rtx hook-env)"
python --version # hook-env を明示的に呼び出した後でないと動作しない
「rtx activateは何をするのでしょうか?」も参照してください。
CLIのカラー出力を無効化/強制化する方法は?
rtxは console.rs クレートを使用しており、clicolors の仕様に準拠していて、次の環境変数の設定に従いカラー出力を制御することができます。
-
CLICOLOR
!=0
ANSIカラーがサポートされており、プログラムがパイプで接続されていない場合に有効 -
CLICOLOR
==0
ANSIカラーエスケープコードを出力しない。 -
CLICOLOR_FORCE
!=0
ANSIカラーは何があっても有効にする必要があります。
rtxは安全なのでしょうか?
現状ではasdfより少し安全ですが、必要以上に安全ではありません。安全なサプライチェーンは非常に重要であるため、この分野での作業が行われるでしょう。詳しくはSECURITY.mdを参照してください。
ドキュメント
rtx のヘルプメッセージ
% rtx --help
rtx is a tool for managing runtime versions. https://github.com/jdxcode/rtx
It's a replacement for tools like nvm, nodenv, rbenv, rvm, chruby, pyenv, etc.
that works for any language. It's also great for managing linters/tools like
jq and shellcheck.
It is inspired by asdf and uses asdf's plugin ecosystem under the hood:
https://asdf-vm.com/
Usage: rtx [OPTIONS] <COMMAND>
Commands:
activate Initializes rtx in the current shell
alias Manage aliases [aliases: a]
bin-paths List all the active runtime bin paths
cache Manage the rtx cache
completion Generate shell completions
current Shows current active and installed runtime versions
deactivate Disable rtx for current shell session
direnv Output direnv function to use rtx inside direnv
doctor Check rtx installation for possible problems.
env Exports env vars to activate rtx a single time [aliases: e]
exec Execute a command with tool(s) set [aliases: x]
implode Removes rtx CLI and all related data
install Install a tool version [aliases: i]
latest Gets the latest available version for a plugin
ls List installed and/or currently selected tool versions [aliases: list]
ls-remote List runtime versions available for install
outdated [experimental] Shows outdated tool versions
plugins Manage plugins [aliases: p]
prune Delete unused versions of tools
reshim rebuilds the shim farm
self-update Updates rtx itself
settings Manage settings
shell Sets a tool version for the current shell session
trust Marks a config file as trusted
uninstall Removes runtime versions
upgrade [experimental] Upgrades outdated tool versions
use Change the active version of a tool locally or globally. [aliases: u]
version Show rtx version
where Display the installation path for a runtime
which Shows the path that a bin name points to
node Commands for the node plugin
help Print this message or the help of the given subcommand(s)
Options:
--install-missing
Automatically install missing tools
-j, --jobs <jobs>
Number of plugins and runtimes to install in parallel
default: 4
--log-level <LEVEL>
Set the log output verbosity
[default: info]
-r, --raw
Directly pipe stdin/stdout/stderr to user.
Sets --jobs=1
-v, --verbose...
Show installation output
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
Examples:
$ rtx install node@20.0.0 Install a specific node version
$ rtx install node@20.0 Install a version matching a prefix
$ rtx install node Install the node version defined in
.tool-versions or .rtx.toml
$ rtx use node@20 Use node-20.x in current project
$ rtx use -g node@20 Use node-20.x as default
$ rtx use node@latest Use latest node in current directory
$ rtx use -g node@system Use system node everywhere unless overridden
$ rtx x node@20 -- node app.js Run `node app.js` with PATH pointing to
node-20.x
rtx サブコマンド詳細
各サブコマンドに共通するグローバルオプションを次に示します。
グローバルオプション
-
-h
,—-help
ヘルプ情報を表示する -
-v
,--verbose...
冗長な出力を表示する、複数回し亭することができる -
--install-missing
不足しているツールを自動でインストールする。 -
-j
,--jobs
<jobs>
並行してインストールするプラグインとランタイムの数
デフォルト:利用可能なコア数 -
--log-level <LEVEL>
ログ出力の冗長性を設定する
指定可能な値:error
,warn
,info
,trace
,debug
デフォルト:info
-
-r
,--raw
stdin/stdout/stderr を直接ユーザーへパイプする.
—jobs=1
として実行される
activate
現在のシェルでrtxを初期化する
rtx activate [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [SHELL_TYPE]
コマンドオプション
-
--status
ディレクトリ変更時に “rtx <PLUGIN>@<VERSION>
”のメッセージを表示する
引数
-
[SHELL_TYPE]
シェルのタイプを指定する
指定可能な値:bash
,fish
,nu
,xonsh
,zsh
alias
, a
エイリアスを管理する
rtx alias [GLOBAL_OPTIONS] [COMMAND]
コマンド
-
get
プラグインのエイリアスを表示する -
ls
,list
指定可能なエイリアスを一覧表示する(デフォルト) -
set
,add
,create
プラグインのエイリアスを追加/更新する 。 -
unset
,rm
,remove
,delete
,del
プラグインのエイリアスを消去する -
help
このメッセージまたは指定されたサブコマンドのヘルプを表示する
alias get
プラグインのエイリアスを表示する
rtx alias get [GLOBAL_OPTIONS] <PLUGIN> <ALIAS>
引数
-
<PLUGIN>
エイリアスを表示するプラグインを指定する -
<ALIAS>
表示するエイリアスを指定する
alias ls
, alias list
指定可能なエイリアスを表示する
これらはユーザー設定、またはプラグイン bin/list-aliases
から取得することができる
rtx alias ls [GLOBAL_OPTIONS]
rtx alias list [GLOBAL_OPTIONS]
コマンドオプション
-
-p
,--plugin
<PLUGIN>
指定したプラグインでフィルターする
alias set
, alias add
, alias create
プラグインのエイリアスを追加/更新する 。
rtx alias set [GLOBAL_OPTIONS] <PLUGIN> <ALIAS> <VALUE>
rtx alias add [GLOBAL_OPTIONS] <PLUGIN> <ALIAS> <VALUE>
rtx alias create [GLOBAL_OPTIONS] <PLUGIN> <ALIAS> <VALUE>
引数
-
<PLUGIN>
エイリアスを追加/更新するプラグインを指定する -
<ALIAS>
追加/更新するエイリアスを指定する -
<VALUE>
エイリアスにセットする値を指定する
alias unset
, alias rm
, alias remove
, alias delete
, alias del
プラグインのエイリアスを消去する
rtx alias unset [GLOBAL_OPTIONS] <PLUGIN> <ALIAS>
rtx alias rm [GLOBAL_OPTIONS] <PLUGIN> <ALIAS>
rtx alias remove [GLOBAL_OPTIONS] <PLUGIN> <ALIAS>
rtx alias delete [GLOBAL_OPTIONS] <PLUGIN> <ALIAS>
rtx alias del [GLOBAL_OPTIONS] <PLUGIN> <ALIAS>
引数
-
<PLUGIN>
エイリアスを消去するプラグインを指定する -
<ALIAS>
消去るエイリアスを指定する
bin-paths
アクティブなランタイムビンパスをすべてリストアップする
rtx bin-paths [GLOBAL_OPTIONS]
cache
rtxのキャッシュを管理する
rtx cache [GLOBAL_OPTIONS] [COMMAND]
コマンド
-
clear
,c
rtx の全てのキャッシュファイルを削除する -
help
このメッセージまたは指定されたサブコマンドのヘルプを表示する
cache clear
, cache c
rtx の全てのキャッシュファイルを削除する
rtx cache clear [GLOBAL_OPTIONS]
rtx cache c [GLOBAL_OPTIONS]
completion
シェルの補完を生成する
rtx completion [GLOBAL_OPTIONS] [SHELL_TYPE]
引数
-
[SHELL_TYPE]
シェルのタイプを指定する
指定可能な値:bash
,elvish
,fish
,powershell
,zsh
current
現在アクティブなランタイムとインストールされたランタイムのバージョンを表示する。
rtx current [GLOBAL_OPTIONS] [PLUGIN]
引数
-
[PLUGIN]
プラグインを指定してフィルターする
deactivate
現在のシェルセッションでrtxを無効にする
rtx deactivate [GLOBAL_OPTIONS]
direnv
direnv内部でrtxを使用するためのdirenv関数を出力する
rtx direnv [GLOBAL_OPTIONS] [COMMAND]
コマンド
-
activate
direnv内部でrtxを使用するためのdirenv関数を出力する -
help
このメッセージまたは指定されたサブコマンドのヘルプを表示する
direnv activate
direnv内部でrtxを使用するためのdirenv関数を出力する
rtx direnv activate [GLOBAL_OPTIONS]
doctor
rtxのインストールに問題がないかをチェックする。
rtx doctor [GLOBAL_OPTIONS]
env
, e
一回だけrtxを有効にするための環境変数をエクスポートする 。
rtx env [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [TOOL@VERSION]...
rtx e [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [TOOL@VERSION]...
コマンドオプション
-
-J
,—json
JSON形式で出力する -
-s
,—shell
<SHELL>
シェルのタイプを指定する
指定可能な値:bash
,fish
,nu
,xonsh
,zsh
引数
-
[TOOL@VERSION]…
使用するツールを指定する
exec
, x
ツールセットでコマンドを実行する。
rtx exec [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [TOOL@VERSION]...[-- <COMMAND>...]
rtx x [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [TOOL@VERSION]...[-- <COMMAND>...]
コマンドオプション
-
-c
,——command
<COMMAND>
実行するコマンドライン -
-C
,—cd
<DIR_PATH>
実行する前に移動するディレクトリパス
引数
-
[TOOL@VERSION]…
使用するツールを指定する -
[— <COMMAND>…]
実行するコマンドライン
——command
オプションと同じ
ただし、rtx のオプションと区別するためにダブル・ダッシュ(——
)に続けて指定する
implode
rtxのCLIと関連するデータをすべて削除する。
rtx implode [GLOBAL_OPTIONS] [COMMAND_OPTIONS]
コマンドオプション
-
--config
config ディレクトリも削除する。 -
--dry-run
実際に削除せずに、削除されるディレクトリをリストアップする。
install
, i
ツールのバージョンをインストールする。
rtx install [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [TOOL@VERSION]...
rtx i [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [TOOL@VERSION]...
コマンドオプション
-
-f
,--force
既にインストールされていても、強制的に再インストールする。
引数
-
[TOOL@VERSION]…
インストールするツールを指定する
latest
プラグインの最新バージョンを取得します。
rtx latest [GLOBAL_OPTIONS] <TOOL@VERSION>...
引数
-
<TOOL@VERSION>…
インストールするツールを指定する
ls
, list
インストールされた、あるいは現在選択されているツールのバージョンを一覧する。
rtx ls [GLOBAL_OPTIONS] [COMMAND_OPTIONS]
rtx list [GLOBAL_OPTIONS] [COMMAND_OPTIONS]
コマンドオプション
-
-J
,—json
JSON形式で出力する -
-p
,--plugin
<PLUGIN>
指定したプラグインのツールバージョンのみを表示する。 -
-c
,--current
.tool-versions
もしくは.rtx.toml
に指定されているツールバージョンのみを表示する。 -
-i
,--installed
.tool-versions
もしくは.rtx.toml
に指定されているが、まだインストールされていないものを非表示にする
ls-remote
インストール可能なランタイムバージョンをリストアップします。
rtx ls-remote [GLOBAL_OPTIONS] <TOOL@VERSION> [PREFIX]
引数
-
<TOOL@VERSION>
インストールするツールを指定する -
[PREFIX]
最新のバージョンを問い合わせる際に使用するバージョンプレフィックスを指定する
outdated
(実験的)時代遅れのツールバージョンを表示します。
rtx outdated [GLOBAL_OPTIONS] [TOOL@VERSION]...
引数
-
[TOOL@VERSION]…
古いバージョンを表示するツールを指定する
例:node@20
python@3.10
指定しない場合、グローバルおよびローカル設定にあるすべてのツールが表示される
plugins
, p
プラグインを管理する。
rtx plugins [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [COMMAND]
rtx p [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [COMMAND]
コマンドオプション
-
-c
,--core
組み込みのプラグインのみを対象にする。通常、これらは表示されません -
-u
,--urls
各プラグインの git url を表示する。
コマンド
-
install
,i
,a
プラグインをインストールする 。 -
link
プラグインを rtx にリンクする。 -
ls
,list
インストールされたプラグインをリストアップする 。 -
ls-remote
,list-remote
利用可能なすべてのリモートプラグインをリストアップする 。 -
uninstall
プラグインを削除します。 -
update
プラグインを最新バージョンに更新します -
help
このメッセージまたは指定されたサブコマンドのヘルプを表示します。
plugins install
, plugins i
, plugins a
プラグインをインストールする 。
rtx plugins install [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [NAME] [GIT_URL]
rtx plugins i [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [NAME] [GIT_URL]
rtx plugins a [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [NAME] [GIT_URL]
コマンドオプション
-
-f
,--force
既にインストールされていても、強制的に再インストールする。 -
-a
,—all
不足しているプラグインをすべてインストールする
一致するショートハンドを持つプラグインのみをインストールする
引数
-
[NAME]
インストールするプラグイン名
複数のプラグインを指定することができる
例:rtx plugins install node ruby python
-
[GIT_URL]
プラグインのgit URL
plugins link
プラグインを rtx にリンクする。
rtx plugins link [GLOBAL_OPTIONS] [COMMAND_OPTIONS] <NAME> [PATH]
コマンドオプション
-
-f
,--force
既にインストールされていても、強制的に再インストールする。
引数
-
<NAME>
インストールするプラグイン名
複数のプラグインを指定することができる
例:rtx plugins link node ruby python
-
[PATH]
プラグインのローカルパス
例: ./rtx-node
plugins ls
, plugins list
インストールされたプラグインをリストアップする 。
rtx plugins ls [GLOBAL_OPTIONS] [COMMAND_OPTIONS]
rtx plugins list [GLOBAL_OPTIONS] [COMMAND_OPTIONS]
コマンドオプション
-
-c
,--core
組み込みのプラグインのみを対象にする。通常、これらは表示されません -
-u
,--urls
各プラグインの git url を表示する。
plugins ls-remote
, plugins list-remote
利用可能なすべてのリモートプラグインをリストアップする 。
rtx plugins ls-remote [GLOBAL_OPTIONS] [COMMAND_OPTIONS]
rtx plugins list-remote [GLOBAL_OPTIONS] [COMMAND_OPTIONS]
コマンドオプション
-
-u
,--urls
各プラグインの git url を表示する。 -
--only-names
各プラグインの名前のみを表示する。
デフォルトでは、インストールされているプラグインの横に アルタリスク(*
)が表示される
plugins uninstall
プラグインを削除します。
rtx plugins uninstall [GLOBAL_OPTIONS] <PLUGIN>...
引数
-
<PLUGIN>…
削除するプラグイン名
複数のプラグインを指定することができる
例:rtx plugins uninstall node ruby python
plugins update
プラグインを最新バージョンに更新します
rtx plugins uninstall [GLOBAL_OPTIONS] [PLUGIN]...
引数
-
[PLUGIN]…
更新するプラグイン名
複数のプラグインを指定することができる
省略した場合はインストールされているすべてのプラグインを更新する
例:rtx plugins update node ruby python
prune
ツールの未使用バージョンを削除する
rtx plugins prune [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [PLUGIN]...
コマンドオプション
-
--dry-run
実際には削除しない
引数
-
[PLUGIN]…
削除するプラグインのバージョン
複数のプラグインを指定することができる
省略した場合は未使用のプラグインを削除する
reshim
shim を再構築する
rtx plugins reshim [GLOBAL_OPTIONS]
self-update
rtx自体をアップデートする
rtx plugins self-update [GLOBAL_OPTIONS]
settings
設定を管理する
rtx plugins settings [GLOBAL_OPTIONS] [COMMAND]
コマンド
-
get
現在の設定を表示する -
ls
,list
現在の設定を表示する。(デフォルト) -
set
,add
,create
設定を追加/更新する 。 -
unset
,rm
,remove
,delete
,del
設定を消去する。 -
help
このメッセージまたは指定されたサブコマンドのヘルプを表示する。
settings get
現在の設定を表示する
rtx plugins settings get [GLOBAL_OPTIONS] <KEY>
引数
-
<KEY>
表示したい設定項目のキー
settings ls
, settings list
現在の設定を表示する。
rtx plugins settings ls [GLOBAL_OPTIONS]
rtx plugins settings list [GLOBAL_OPTIONS]
settings set
, settings add
, settings create
設定を追加/更新する。
rtx plugins settings set GLOBAL_OPTIONS] <KEY> <VALUE>
rtx plugins settings add GLOBAL_OPTIONS] <KEY> <VALUE>
rtx plugins settings create GLOBAL_OPTIONS] <KEY> <VALUE>
引数
-
<KEY>
設定項目のキー -
<VALUE>
設定項目のキーに設定する値
settings unset
, settings rm
, settings remove
, settings delete
, settings del
設定を消去する。
rtx plugins settings unset [GLOBAL_OPTIONS] <KEY>
rtx plugins settings rm [GLOBAL_OPTIONS] <KEY>
rtx plugins settings remove [GLOBAL_OPTIONS] <KEY>
rtx plugins settings delete [GLOBAL_OPTIONS] <KEY>
rtx plugins settings del [GLOBAL_OPTIONS] <KEY>
引数
-
<KEY>
消去する設定項目のキー
global
指定がない場合に使用するバージョンを設定する。
rtx global [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [TOOL@VERSION]...
コマンドオプション
-
——pin
正確なバージョンを設定ファイルに保存する
例:rtx use --pin node@20
は~/.tool-versions
にnode 20.0.0
を保存する -
--fuzzy
ファジーバージョンを設定ファイルに保存する。
例:rtx use --fuzzy node@20
は、~/.tool-versions
にnode 20
を保存する -
——remove <TOOL>
設定ファイルからツールを削除する。 -
-p
,--path <PATH>
設定ファイルまたはディレクトリへのパスを指定する。
引数
-
[TOOL@VERSION]…
インストールするツールを指定する
local
特定のディレクトリ内でだけバージョンを設定する。
rtx local [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [TOOL@VERSION]...
コマンドオプション
-
-p
,--parent
.tool-versions
ファイルをカレントディレクトリだけでなく上位ディレクトリも再帰的に検索する。デフォルトでは、このコマンドはカレントディレクトリ("$PWD/.tool-versions
")のみを設定する -
——pin
正確なバージョンを設定ファイルに保存する
例:rtx use --pin node@20
は$PWD/.tool-versions
にnode 20.0.0
を保存する -
--fuzzy
ファジーバージョンを設定ファイルに保存する。
例:rtx use --fuzzy node@20
は、$PWD/.tool-versions
にnode 20
を保存する -
——remove <TOOL>
設定ファイルからツールを削除する。 -
-p
,--path <PATH>
設定ファイルまたはディレクトリへのパスを指定する。
引数
-
[TOOL@VERSION]…
インストールするツールを指定する
@VERSION
が省略された場合は、.tool-versions
あるいは.rtx.toml
で設定されているバージョンを表示する
shell
現在のシェルで使用するランタイムのバージョンを設定する。
rtx shell [GLOBAL_OPTIONS] [COMMAND_OPTIONS] [TOOL@VERSION]...
コマンドオプション
-
-u
,--unset
以前に設定されたバージョンを削除する
引数
-
[TOOL@VERSION]…
インストールするツールを指定する
@VERSION
が省略された場合は、.tool-versions
あるいは.rtx.toml
で設定されているバージョンを表示する
trust
設定ファイルを信頼済みとしてマークする
rtx trust [GLOBAL_OPTIONS] [CONFIG_FILE]
引数
-
[CONFIG_FILE]
設定ファイルのパス
uninstall
ランタイムバージョンを削除する
rtx uninstall [GLOBAL_OPTIONS] <TOOL@VERSION>...
引数
-
<TOOL@VERSION>…
アンインストールするツールを指定する
upgrade
(実験的)古くなったツールのバージョンをアップグレードします。
rtx upgrade [GLOBAL_OPTIONS] <TOOL@VERSION>...
引数
-
<TOOL@VERSION>…
アップグレードするツールを指定する
省略した場合は、現在使用中のツールがアップグレードされる
例:node@20
python@3.10
use
, u
ローカルまたはグローバルでツールの有効なバージョンを変更します。
rtx use [GLOBAL_OPTIONS] [COMMAND_OPTIONS] <TOOL@VERSION>...
rtx u [GLOBAL_OPTIONS] [COMMAND_OPTIONS] <TOOL@VERSION>...
コマンドオプション
-
——pin
正確なバージョンを設定ファイルに保存する
例:rtx use --pin node@20
は~/.tool-versions
にnode 20.0.0
を保存する -
--fuzzy
ファジーバージョンを設定ファイルに保存する。
例:rtx use --fuzzy node@20
は、~/.tool-versions
にnode 20
を保存する -
——remove <TOOL>
設定ファイルからツールを削除する。 -
-g
,--global
ローカルではなく、グローバルな設定ファイル(~/.config/rtx/config.toml
)を使用する。 -
-p
,--path <PATH>
設定ファイルまたはディレクトリへのパスを指定する。
引数
-
[TOOL@VERSION]…
ツールのバージョンを指定する
@VERSION
を省略した場合は、@latest
が使用される
例:node@20
python@3.10
version
rtxのバージョンを表示する
rtx version [GLOBAL_OPTIONS]
where
ランタイムのインストールパスを表示する
rtx where [GLOBAL_OPTIONS] <TOOL@VERSION>...
引数
-
<TOOL@VERSION>…
インストールパスを表示するツールを指定する@<PREFIX>
が指定された場合、そのプレフィックスと一致する最新のインストール済みバージョンを表示する
それ以外の場合は、現在インストールされている有効なバージョンを表示する
例:node@20
python@3.10
which
bin名が指すパスを表示します。
rtx which [GLOBAL_OPTIONS] [COMMAND_OPTIONS] <BIN_NAME>
コマンドオプション
-
--plugin
パスではなく、プラグイン名を表示する。 -
--version
パスの代わりにバージョンを表示する。 -
-t
,--tool
<TOOL@VERSION>
特定のツール@バージョンを使用する。
例:rtx which npm --tool=node@20
node
nodeプラグインのコマンドです。
rtx node [GLOBAL_OPTIONS] [COMMAND]
コマンド
-
node-build
rtxの内部node-buildを使用/管理する。 -
help
このメッセージまたは指定されたサブコマンドのヘルプを表示する。
node node-build
rtxの内部node-buildを使用/管理する。(通常は使用しない)
rtx node node-build [GLOBAL_OPTIONS] [args]...
rtx node node-build [-kpv] <definition> <prefix>
rtx node node-build --definitions
rtx node node-build --version
引数
-
[args]...
内部node-build への引数
node-build オプション
-
-c
,--compile
一致するバイナリが存在しても、強制的にコンパイルする。 -
-k
,--keep
インストール後、ソースツリーを削除しない。 -
-p
,--patch
ビルド前にstdinからパッチを適用する。 -
-v
,--verbose
Verboseモード:コンパイル状況をstdoutに出力する。 -
-4
,--ipv4
IPv4 アドレスにのみ名前解決する。 -
-6
,--ipv6
IPv6 アドレスにのみ名前解決する。 -
--definitions
すべての組み込み定義をリストアップします。 -
--version
node-buildのバージョンを表示します。
node-build 引数
<definition>
<prefix>
help
このメッセージまたは指定されたサブコマンドのヘルプを表示します。
rtx help [GLOBAL_OPTIONS] <COMMAND>
引数
-
<COMMAND>
サブコマンド
SECURITY.md (抄訳)
セキュリティポリシー
rtxは開発者ツールを管理するための便利なツールですが、そのモデルは潜在的なリスクにも開放されています。以下は、rtxの主要な領域と、現在行われているセキュリティ上の配慮、および今後必要な配慮です。
rtxをよりセキュアにする方法についてお考えがあれば、チケットを開くかメールを送ってください。
コアCLIのセキュリティ
コアCLIの開発はGitHUb jdxcode/rtx 上で行われており、一人の開発者(私、@jdxcode)だけがアクセスできます。他の開発者は、公開された Pull Requests を通してのみ貢献することができます。アクセスできる開発者の数を1人に減らすことで、鍵が漏れる可能性を最小にすることができます。
ただし、バスファクター(Bus Factor)の問題が発生します。もし私がある日突然死んでしまったり、開発を続けられなくなったりした場合、私のGitHubアカウントには後継者が何人か登録されており、必要であれば私のアカウントを引き継ぐことができます。
コアCLIにおける依存関係は、セキュリティに影響する要素でもあります。どのような依存関係をプロジェクトに組み込むかについては、慎重に判断するようにしています。可能な限り、Rustコミュニティで広く使われている依存関係だけを選びました。rtxをより安全にするために、機能を犠牲にしてでも依存関係を減らすためのPRや提案を歓迎します。
rtx.pub
rtx.pubは、rtxのアセットホストです。コンパイル済みのrtx CLIバイナリをホストしたり、rtxが新しいバージョンのリリースをチェックするために使用する "VERSION"をホストするために使用されます。現在、CDN、アセット、ドメイン登録のために3つの異なるベンダーの混合でホストされています。これは、セキュリティ上の理由から単一のベンダーに集約する予定です。
RTXプラグイン
プラグインは、潜在的な問題の最大の原因であり、最も多くの作業を行う必要がある場所です。
プラグインには3つのタイプがあります:
-
core
CLIにハードコードされているプラグインです。これらは、Rustで書かれた最も一般的な言語のための公式プラグインです。 - community
GitHub rtx-plugins にあるプラグインです。今のところ、これらのプラグインは @jdxcode が唯一のコントリビューターとなっていますが、特定のプラグインのオーナーやコラボレーターがいる場合は、将来的に変更されるかもしれません。もし、あなたのプラグインをここに移動させたいのであれば、私に相談してください。 - 実験的(external)
他者が所有するプラグインで、shorthandレジストリにあるプラグインも含まれます。これらは、インターネットから任意のツールをインストールするよりも安全ではありません。
このプラグインはshorthandレジストリに登録されているため、rtx install foo@
を実行することができますが、私が保証するものではありません。そのようなプラグインをビルドしている人がほとんど誰なのか見当もつきません。GitHub rtx-plugins から来たものであれば、もっと信頼してもいいのではないでしょうか。(rtx plugins ls-remote --urls
を持つオーナーを参照)。
時間が経てば、より多くのプラグインをrtxの完全なメンテナンスに移行させることができるはずです。環境変数 RTX_PARANOID
を追加する予定ですが、これを1
に設定すると、rtxができるだけ安全に動作するように変更されます(例:コアプラグインの使用のみ、アセットのGPG検証を使用するプラグインの使用のみ許可など)。
プライバシー
現在、rtxが行う定期的な作業は、毎週行われる新バージョンのチェックだけです。rtxは(バージョン以外の)データを送信しませんが、IPアドレスを使ってrtxの(非常に)広範な使用データを推測することが可能です。環境変数 RTX_HIDE_UPDATE_WARNING=1
でこの動作を無効にすることができます。また、自分でコードを監査して、それが何をするのかを確認することもできます。
基本的なことですが、公開されている解析情報を見てみたいと思います。homebrew はこれを行うのに素晴らしい仕事をしたと思いますが、私たちは、データが匿名かつ公にアクセス可能である同様のモデルを持つことになるでしょう。そうすることで、私とプラグイン作者の両方が、効果的な機能を構築できているかどうかを知ることができます。また、rtxを使った開発を行うことで、組織からの賛同を得ることができます。(特に大きな技術系企業では、みんな数字が大好きです)
サポートされるバージョン
サポートされるバージョンは、最新のものだけです。
脆弱性の報告
security@<RTX_DOMAIN_IN_README>.pub
までメールを送ってください。
必要であれば、GPGでメッセージを暗号化することもできます:
-
jdxcodeの公開鍵
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 1wxfuzN2+ao= =/CHf -----END PGP PUBLIC KEY BLOCK-----
参考資料
Notion - 複数のランタイムバージョンをプロジェクト単位で管理できる rtx-cli の紹介
Notion - 複数のランタイムバージョンをプロジェクト単位で管理できる asdf の紹介
Notion - zlib の CLIツール zclib の紹介
Notion - JSONとMessagePackを相互変換する msgpack-cli の紹介