👌

Cargoの「Updating crates.io index」が遅い問題の対処法

2023/05/05に公開

Rustをいじっていて「cargo add」「cargo check」をした時にcrates.ioの最新のインデックスの取得がとてつもなく遅い時があるため、それに対応する方法を以下に記します。

対処法

現在のcrate.ioを更新するgitプロトコルではレジストリで利用可能なすべてのクレートをインデックス化するリポジトリを複製するようなのですが、それでは膨大に時間がかかる場合があるので、使用するクレートの情報のみをダウンロードするsparse protocolに設定を変更するとパフォーマンスが劇的に改善します。
以下の2通りの方法があるので、お好みの方法で設定を変更してください。

環境変数に設定を追加する場合

CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparseを環境変数に追加します。

.cargo/config.tomlに設定を追加する場合

$ vi ~/.cargo/config.toml

//以下の設定を追加
[registries.crates-io]
protocol = "sparse"

余談

このsparse protocolはcargoの1.70.0からはデフォルトになるそうなのでもうcrates.ioの更新が遅くて悩むことがなくなりそうですね。

参考資料

https://blog.rust-lang.org/2023/03/09/Rust-1.68.0.html#cargos-sparse-protocol

Discussion