この記事では、Ubuntu 22.04にRustをインストールします。Rustは執筆時点での最新バージョン1.62.0です。
はじめに
Rustについて
Rustはパフォーマンス、信頼性、生産性の高さが特徴のプログラミング言語です。Stack Overflow Developer Survey 2022では86%以上の支持を集めて1位に選ばれ、7年連続で最も愛される言語になっています。
環境
インストール
公式サイトによるとcurl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs | shを実行するとインストール出来ます。
それではcurlコマンドを実行してみましょう。
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
途中でインストールの方法を選択できますがここではデフォルトの1を選択しています。
Current installation options:
default host triple: x86_64-unknown-linux-gnu
default toolchain: stable (default)
profile: default
modify PATH variable: yes
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1
最後に、下記のようなログが表示されていればOKです。
stable-x86_64-unknown-linux-gnu installed - rustc 1.62.0 (a8314ef7d 2022-06-27)
Rust is installed now. Great!
To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).
To configure your current shell, run:
source $HOME/.cargo/env
Rustを始めるには、カレントシェルを再起動か、もしくは、source $HOME/.cargo/env
コマンドを実行してください。と、実行ログに出ています。ここではsource $HOME/.cargo/env
コマンドを実行します。
$ source $HOME/.cargo/env
最後に実行できるか確認してみましょう。
$ cargo --version
cargo 1.62.0 (a748cf5a3 2022-06-08)
$ rustc --version
rustc 1.62.0 (a8314ef7d 2022-06-27)
ちなみにcurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
はこのコマンドを実行するとrustup-init.shがダウンロードされ、このrustup-init.shがプラットフォームに適したツール群をインストールします。rustup-init.shはrustupのGitHubにあります。
$HOME/.cargo/env
本質的な部分ではないですが、試しに$HOME/.cargo/env
の内容を確認します。中身はシェルスクリプトになっていて、環境変数PATHに$HOME/.cargo/bin
がない場合は追加するという処理をしています。
#!/bin/sh
# rustup shell setup
# affix colons on either side of $PATH to simplify matching
case ":${PATH}:" in
*:"$HOME/.cargo/bin":*)
;;
*)
# Prepending path in case a system-installed rustc needs to be overridden
export PATH="$HOME/.cargo/bin:$PATH"
;;
esac
$HOME/.cargo/env
の実行後は環境変数PATHを確認すると$HOME/.cargo/bin
があることが確認できます。
$ echo $PATH
/home/higma/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$HOME/.cargo/bin
ディレクトリにはコンパイラのrustcやコンパイルマネージャとパッケージマネージャを兼ねるcargo、ドキュメンテーションツールのrustdocなどがあります。
$ ls $HOME/.cargo/bin
cargo cargo-clippy cargo-fmt cargo-miri clippy-driver rls rustc rustdoc rustfmt rust-gdb rust-lldb rustup
また、~/.bashrcには. “$HOME/.cargo/env
“が追加されています。これでシェルを起動する時に実行されPATHが設定されるようになっています。.コマンド(ドットコマンド)はsourceコマンドと同じものです。
$ tail -n 1 ~/.bashrc
. "$HOME/.cargo/env"
動作確認
実際にはcargoを使ったコンパイルが多いのですが、ここではrustcとcargoの両方のコンパイルを試してみます。cargoを使った場合も内部的にrustcが動いてコンパイルしています。
rustcで直接コンパイル
hello.rsのような内容のファイルを用意しrustcでコンパイルします。コンパイル時には-oオプションで生成される実行ファイル名をhelloにしています。コンパイルが完了すると./helloが生成されているので実行して、Hello, world!と表示されれば正常に動作しています。
fn main() {
println!("Hello, world!");
}
// コンパイル
$ rustc hello.rs -o hello
// 実行
$ ./hello
Hello, world!
もし、コンパイル時にerror: linker `cc` not found
エラーが出たらgccパッケージをインストールしてください。
$ rustc hello.rs -o hello
error: linker `cc` not found
|
= note: No such file or directory (os error 2)
error: aborting due to previous error
$ sudo apt install gcc
cargoでコンパイル
cargo new <プロジェクト名>でプロジェクトの作成をします。ここではプロジェクト名はhelloとしています。プロジェクトのディレクトリに移動します。その後、cargo runコマンドを実行します。すると、ビルド、生成された実行ファイルの実行をおこないます。Hello, world!と表示されれば正常に動作しています。
// プロジェクトの作成
$ cargo new hello
Created binary (application) `hello` package
// ディレクトリの移動
$ cd hello
// ビルド&実行
$ cargo run
Compiling hello v0.1.0 (/home/higma/rust/hello)
Finished dev [unoptimized + debuginfo] target(s) in 1.00s
Running `target/debug/hello`
Hello, world!
Cargoは他にもいろいろなことができます。まずは、表にまとめておきます。改めて別の記事で解説していきたいと思います。
サブコマンド | 説明 |
build, b | プロジェクトのビルドをする |
check, c | ビルドできるかのチェックをする |
clean | プロジェクトのクリーンをする |
doc, d | ドキュメントを作成する |
new | プロジェクトの作成 |
init | 既存のディレクトリでプロジェクトの作成 |
add | マニフェストファイルに依存関係を追加する |
run, r | 実行ファイルを実行する |
test, t | テストを実行する |
bench | ベンチマークを実行する |
update | Cargo.lockに記述された依存をアップデートする |
search | crate.ioからパッケージを探します |
publish | パッケージをcreate.ioに公開します |
install | rust製のバイナリをインストールする |
uninstall | rust製のバイナリアンインストールします |
参考サイト
まとめ
Ubuntu 22.04にRustをインストールする方法を説明しました。また、Cargoでのプロジェクトの作成、ビルド&実行を確認しました。
Rustを使いこなして、つよつよエンジニアを目指しましょう!
コメント