cargo でインストールしたパッケージを高速にアップデートする

前提

2020/04/19 時点での話です。

背景

$ cargo install HOGEHOGE を実行しても、一度インストールされたパッケージはアップデートされません。

したがって $ cargo install --force HOGEHOGE のように --force オプションを付けて毎回上書きでインストールする必要がありますが、それはつまり毎回コンパイルするということで、とてつもなく時間がかかります。

結論

cargo-update というパッケージを cargo でインストールして、それ以降は $ cargo install-update --all を実行します。

手順

1. cargo-update のインストール

$ cargo install cargo-update
    Updating crates.io index
  Downloaded cargo-update v3.0.0
  Downloaded 1 crate (42.5 KB) in 2.30s
  Installing cargo-update v3.0.0
(省略)
    Finished release [optimized] target(s) in 2m 09s
  Installing /home/FOOBAR/.cargo/bin/cargo-install-update
  Installing /home/FOOBAR/.cargo/bin/cargo-install-update-config
   Installed package `cargo-update v3.0.0` (executables `cargo-install-update`, `cargo-install-update-config`)

2. 以降は、cargo install-update --all を毎回実行する

アップデートがあったパッケージのみを自動でインストールしてくれます。

$ cargo install-update --all
    Updating registry 'https://github.com/rust-lang/crates.io-index'

Package       Installed  Latest   Needs update
fd-find       v7.5.0     v8.0.0   Yes
grex          v1.0.0     v1.1.0   Yes
ripgrep       v12.0.0    v12.0.1  Yes
ripgrep_all   v0.9.2     v0.9.5   Yes
bat           v0.13.0    v0.13.0  No
cargo-update  v3.0.0     v3.0.0   No
exa           v0.9.0     v0.9.0   No
kiro-editor   v0.3.5     v0.3.5   No
procs         v0.9.20    v0.9.20  No
silicon       v0.3.0     v0.3.0   No

Updating fd-find
    Updating crates.io index
  Downloaded fd-find v8.0.0
(省略)

効果

10個ほどのCLIのパッケージをインストールしている私の場合、CPUの違いにもよりますが、--force でインストールするとだいたい1時間〜2時間かかっていました。

それが、更新がない場合は30秒ほどになりました。

注意点

crates.io 経由以外では、やはり毎回コンパイルする必要が出てきます。

参考

Powered by はてなブログ