DEV Community

井山梃子歴史館
井山梃子歴史館

Posted on

2

cargo nix-installを作るぞ

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で行うことができます.

実装するぞうおおおお

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more