loading...

cargo nix-installを作るぞ

__pandaman64__ profile image 井山梃子歴史館 ・1 min read

Cargoは普通Rustのパッケージマネージャとして使われますが,cargo installでRust製コマンドラインツールをインストールすることもできます.
インストールできるツールにはcargo-editcargo-geigerのようなRust開発を便利にするツールのほか,batripgrepといった日々使うCLIもインストールできます.

このようにcargo installは便利なのですが,自分はNixを常用しているのでこれらのツールもNixで管理したいわけです.
特に問題となるのが,外部ライブラリへの依存です.
例えば,diesel-cliは(デフォルトで)Postgresqlに依存しているため,cargo installするにはPostgresqlをインストールしなければいけません.
これをnix-envで管理するのは二度手間ですし,nix-shellの場合はGCによって依存先が消えてしまうリスクもあります.

そこで,Nixを使ってRustクレートをインストールするツールcargo nix-installを考えてみました.
概ね次の手順でよいでしょう:

  1. クレートをフェッチする.
  2. crate2nixでNixファイルを生成.
  3. nix-envでインストール

まず初めにクレートをcrates.io(もしくはGitリポジトリ)からフェッチしてあげなければいけません.
次に,Nixでビルドするためのdefault.nixを生成します.
ここでは,crate2nixを使うことにします.crate2nixはRust依存関係を各クレートごとに別々のNixパッケージとしてビルドするので,Nixをビルドキャッシュとして有効活用できます.
最後にNixパッケージとしてビルドしたツールをnix-envでインストールしてあげます.これによってアンインストールもNixで行うことができます.

実装するぞうおおおお

Discussion

pic
Editor guide