Cargoは普通Rustのパッケージマネージャとして使われますが,cargo install
でRust製コマンドラインツールをインストールすることもできます.
インストールできるツールにはcargo-editやcargo-geigerのようなRust開発を便利にするツールのほか,batやripgrepといった日々使うCLIもインストールできます.
このようにcargo install
は便利なのですが,自分はNixを常用しているのでこれらのツールもNixで管理したいわけです.
特に問題となるのが,外部ライブラリへの依存です.
例えば,diesel-cliは(デフォルトで)Postgresqlに依存しているため,cargo install
するにはPostgresqlをインストールしなければいけません.
これをnix-env
で管理するのは二度手間ですし,nix-shell
の場合はGCによって依存先が消えてしまうリスクもあります.
そこで,Nixを使ってRustクレートをインストールするツールcargo nix-install
を考えてみました.
概ね次の手順でよいでしょう:
- クレートをフェッチする.
- crate2nixでNixファイルを生成.
- nix-envでインストール
まず初めにクレートをcrates.io
(もしくはGitリポジトリ)からフェッチしてあげなければいけません.
次に,Nixでビルドするためのdefault.nix
を生成します.
ここでは,crate2nixを使うことにします.crate2nixはRust依存関係を各クレートごとに別々のNixパッケージとしてビルドするので,Nixをビルドキャッシュとして有効活用できます.
最後にNixパッケージとしてビルドしたツールをnix-env
でインストールしてあげます.これによってアンインストールもNixで行うことができます.
実装するぞうおおおお
Top comments (0)