RustをUbuntuにインストールしてプログラムを走らせる


はじめに

Rust(ラスト)は、C言語、C++に代わるシステムプログラミング言語と言われています。OSや言語を記述するのに適した言語というわけです。

Windows上にLinux環境を構築する方法にWSLがあります。WSL(Windows Subsystem for Linux ) とは、Linuxのバイナリ実行ファイルをWindows 10およびWindows Server上で実行できるようにしたものです。本稿では、WSL上のUbuntu20.04にRustをインストールし、簡単なプログラムを実行するまでを紹介します。

参考URL

WSLでWindows上にUbuntu環境を構築する方法は、下記リンクの記事に詳しいので、よかったら参考にしてください。
LinuxとWindowsの欲張りな環境を手にする

Windows, macOSでのインストール方法などは下記リンクを参照ください。
RustをWindows/Ubuntu/macOSにインストールしてサンプルプログラムを走らせる
本稿は自身のブログから転載しました。

Rustのインストール

Ubuntuの場合は、まずCコンパイラ(gcc)をインストールします。

$ sudo apt install gcc

次にターミナルからcurlコマンドを実行してrustをインストールします。プロンプト”>”が表示されたら、「1」を入力します。

$ curl https://sh.rustup.rs -sSf | sh
info: downloading installer
Welcome to Rust!
 < 略 >
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1

ここで一旦、Ubuntuを終了し、起動しなおします。「exit」と入力し、スタートメニューからUbuntuを起動します。

Ubuntuの再起動が完了したところで、rust関連のコマンドが実行できることを確認します。すでにPATH環境変数の設定も実施されています。

$ rustc -V
rustc 1.51.0 (2fd73fabe 2021-03-23)
$ cargo -V
cargo 1.51.0 (43b129a20 2021-03-16)

Hello Worldを表示してみよう

任意の場所に「rust」フォルダを作成します。
次に、「cargo new プロジェクト名」でプロジェクトを作成します。下ではプロジェクト名を「show_os_ver」としました。

$ mkdir rust
$ cd rust
$ cargo new show_os_ver
     Created binary (application) `show_os_ver` package

プロジェクトのディレクトリ構成をtreeコマンドで表示したのが下の図です。

$ sudo apt install tree
$ tree
.
└── show_os_ver
    ├── Cargo.toml
    └── src
        └── main.rs

show_os_ver/src/main.rsがソースコードです。

$ cd show_os_ver/src
$ cat main.rs
fn main() {
    println!("Hello, world!");
}

すでに、「Hello World」を出力するプログラムがおかれているので、これをビルドして実行します。
cargo runコマンドが便利です。ビルドと実行を一気に行ってくれます。

$ cargo run
   Compiling show_os_ver v0.1.0 (/home/linux/works/rust/show_os_ver)
    Finished dev [unoptimized + debuginfo] target(s) in 0.17s
     Running `/home/linux/works/rust/show_os_ver/target/debug/show_os_ver`
Hello, world!

OSのバージョンを表示してみる

ここまでではプログラムを何も作っていません。そこで、OSのバージョンを表示する簡単なプログラムを作ってみます。
エディタでmain.rsを編集します。

use std::process::Command;
fn main() {
    let proc = Command::new("/usr/bin/cat")
        .args(&["/etc/lsb-release"])
        .output()
        .expect("Failed to start `cat`");
    println!("{}", String::from_utf8_lossy(&proc.stdout));
}

プログラムから
”/usr/bin/cat /etc/lsb-release”
を実行し、catから受け取った出力結果を表示します。lsb-releaseファイルは、Ubuntuのバージョンが記載されているテキストファイルです。

  • let proc = Command::new の行でcatコマンドを実行します。
  • .args でcatに与える引数を指定します。
  • .output() でcatの実行完了を待つと同時に出力を受け取ります。
  • .expect で例外処理を登録します。
  • println!(“{}”,・・・); でcatの実行結果を表示します。

さっそく実行してみます。

$ cargo run
   Compiling show_os_ver v0.1.0 (/home/linux/works/rust/show_os_ver)
    Finished dev [unoptimized + debuginfo] target(s) in 0.24s
     Running `/home/linux/works/rust/show_os_ver/target/debug/show_os_ver`
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"

OSのバージョンを表示することができました。

おわりに

macOSやWindowsから上記同様のことをやってみたい方は、下の記事をどうぞ!
RustをWindows/Ubuntu/macOSにインストールしてサンプルプログラムを走らせる