JSのツールチェーン管理ツール「proto」を使ってみる
はじめに
個人的に使ってみた所感です。
記載してある情報には誤りがある場合があります。ご了承ください 🙇♂️
ツールチェーンってなに?
自分も初めて聞いたので ChatGPT に聞いてみました。
ツールチェインとは、ソフトウェア開発において、プログラムを作成するために必要な一連のツールの集合のことです。
なるほど。
JavaScript を例にすると、Node.js や Deno, npm や yarn などのツール群を総じてツールチェーンと表現するみたい。勉強になります。
最近、分からない単語が登場した時は Google さんよりも ChatGPT さんに聞きがちです。web の知識をまとめた上で噛み砕いて教えてくれるので理解が捗ります。もちろん情報の精査はしますが。
JavaScript のツールチェーン管理ツール「proto」
今回自分が見つけたのがprotoという Rust 製の JavaScript のツールチェーン管理ツールです。
このツールを使用することで Node.js や npm, pnpm などのツールを一元管理することができます。
JavaScript 以外にも Python や Go なども対応しており、サードパーティー製のプラグインを使用することで、Biome や Terraform、.NET 等も管理できるらしいです。
使ってみる
インストール
では実際に使っていきたいと思います。
まずはインストールから。
自分は Mac に入れるアプリケーションや CLI はすべてHomebrewで管理したい人間です。
ですがInstall Protoを見てみても brew でのインストール方法が記述されていません。
なので今回はbrew tap
コマンドを使用して、brew で管理できるように頑張ってみたいと思います。
brew tap とは公式以外のリポジトリをフォーミュラとして Homebrew に追加するもので、brew のもとで install,uninstall,update などが行えます。もちろん自分が公開しているものも簡単に追加できます。
brew tap とは - Qiitaより引用
(とても分かりやすかったです。ありがとうございました mm)
まずは、brew tap
を使い、proto のリポジトリを Homebrew に追加していきます。
brew tap moonrepo/proto https://github.com/moonrepo/proto
そうするとbrew install
で proto がインストールできるようになっています。
brew install proto
自分の環境ではproto setup
を実行しないと動かなかったので実行します。
(公式のインストール方法に従って導入すれば問題ないのかな?)
proto setup
導入できました!!
proto --version
# proto 0.31.5
Node.js をインストールしてみる
proto がインストールできたので実際に Node.js を入れてみます。
インストールするにはinstall
コマンドを使います。
# iはinstallのエイリアス
proto i node # version指定したい場合はnode 20のように指定する
# [ INFO 2024-03-10 04:21:49.703] proto::commands::install:install Node.js has been installed to ~/.proto/tools/node/21.7.1!
実際にインストールされたか確認してみます。
node --version
# v21.7.1
これで proto 経由で Node.js をインストールすることができました。
バージョン固定してみる
pin
コマンドを使用します。
proto pin node 21 --global
# [ INFO 2024-03-10 04:38:23.501] proto::commands::pin:pin Set the Node.js version to ~21
ディレクトリ毎に使用するバージョンを変えたい時は--global
オプションを削除し使用したいディレクトリでpin
コマンドを実行します。
--global
オプションを外すとコマンドを実行したディレクトリに.prototools
が生成され、そこに固定したツールとバージョンが記載されます。
proto pin node 21
cat .ptorotools
───────┬─────────────────────────────────────────────────────────────────────────
│ File: .prototools
───────┼─────────────────────────────────────────────────────────────────────────
1 │ node = "~21"
───────┴─────────────────────────────────────────────────────────────────────────
終わりに
これでディレクトリ、プロジェクト毎に使用するツールのバージョンを自由に固定できるようになりました。
今回は実際の使用頻度が高いであろう最低限の機能の紹介に留めておきます。(というか自分がまだ触れていないだけです。。。)
他の管理ツール(asdfとか)でも似たようなことはできそうなのであえて周りと違ったものを使いたい!なんて方は試してみるといいかもしれません。
「protoは〇〇ができてasdfだと△△ができない!」だとか、「そもそもprotoと他のツールでは役割が全然違う!」みたいな知見をお持ちの方がいらっしゃったら是非コメントにて教えていただきたいですmm
拙い記事ですがご覧いただきありがとうございました!!
おまけ(エイリアス機能について)
想定した使い方ができなかったのでおまけとして残しておきます。
The proto alias <tool> <label> <version> (or proto a) command will define a custom alias that maps to a specific version for the provided tool. Aliases can be used anywhere a version is accepted.
fmfm
ひょっとしてnode --version
をtest-node --version
みたいに実行できちゃうのかな?なんて思ったのでやってみました。
pin
コマンドと同様に--global
をつけずに実行すると実行したディレクトリのみで設定したエイリアスが使えるらしいです。
proto alias node test-node 21 --global
# [ INFO 2024-03-10 04:44:00.409] proto::commands::alias:alias Added alias test-node (~21) for Node.js
これでエイリアスが設定できたはず。。。!!
あれ。。。
test-node --version
# zsh: command not found: test-node
おかしいですね。。。もしかしたらこのエイリアスはnode
コマンドのエイリアスって訳ではないのかもしれません🤔
ひょっとしたらprotoを開発しているmoonrepoの別プロダクトであるmoonで使えたりするのかもしれません。(完全に憶測です)
Discussion