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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
[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