2019-02-17

rustup component addとcargo installの違い

どうも、仕事ではGolangばかり書いているメテオです。そろそろRustの本格導入もやっていきたいですね。

さて、今日後輩と話していて、 rustup component addcargo install は同じじゃないのか?と聞かれたので答えると共にここにも残しておきます。

rustup component add

  • rustup component addしたとき、 https://static.rust-lang.org/dist/channel-rust-[toolchain].toml から情報を取ってきます
  • rustupを使ってinstallする場合はsourceではなくbinaryが降ってきます
  • binaryはCI(Travis)で自動生成しており、CIがビルドに失敗した場合は降ってきません

cargo install

  • cargo installしたときは、crates.ioから情報を取ってきます
  • defaultだとcrates.ioにpublishされた最新バージョンのsourceをダウンロードし、自分の端末上でbuildします

どっちがいいか

  • 本来であればrustupでインストールできるものはrustupで統一すべきです。
  • しかし、rustup componentで入れようとすると時々ビルドに失敗してbinaryが落とせないことが多いので、 cargo install のほうが安定していると思います。
  • 動かしているPCがあまりにも非力ではない限りは cargo install でもよさそうです。

補足

curl https://static.rust-lang.org/dist/channel-rust-nightly.toml

[pkg.rustfmt-preview]
version = ""
[pkg.rustfmt-preview.target.aarch64-unknown-linux-gnu]
available = false

[pkg.rustfmt-preview.target.arm-unknown-linux-gnueabi]
available = false

[pkg.rustfmt-preview.target.arm-unknown-linux-gnueabihf]
available = false

[pkg.rustfmt-preview.target.armv7-unknown-linux-gnueabihf]
available = false

[pkg.rustfmt-preview.target.i686-apple-darwin]
available = false

[pkg.rustfmt-preview.target.i686-pc-windows-gnu]
available = false

[pkg.rustfmt-preview.target.i686-pc-windows-msvc]
available = false

[pkg.rustfmt-preview.target.i686-unknown-linux-gnu]
available = false

[pkg.rustfmt-preview.target.mips-unknown-linux-gnu]
available = false

[pkg.rustfmt-preview.target.mips64-unknown-linux-gnuabi64]
available = false

[pkg.rustfmt-preview.target.mips64el-unknown-linux-gnuabi64]
available = false

[pkg.rustfmt-preview.target.mipsel-unknown-linux-gnu]
available = false

[pkg.rustfmt-preview.target.powerpc-unknown-linux-gnu]
available = false

[pkg.rustfmt-preview.target.powerpc64-unknown-linux-gnu]
available = false

[pkg.rustfmt-preview.target.powerpc64le-unknown-linux-gnu]
available = false

[pkg.rustfmt-preview.target.s390x-unknown-linux-gnu]
available = false

[pkg.rustfmt-preview.target.x86_64-apple-darwin]
available = false

[pkg.rustfmt-preview.target.x86_64-pc-windows-gnu]
available = false

[pkg.rustfmt-preview.target.x86_64-pc-windows-msvc]
available = false

[pkg.rustfmt-preview.target.x86_64-unknown-freebsd]
available = false

[pkg.rustfmt-preview.target.x86_64-unknown-linux-gnu]
available = false

[pkg.rustfmt-preview.target.x86_64-unknown-netbsd]
available = false