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)