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

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

本稿では、RustをWindows10, Ubuntu 20.10, macOS 11(Big Sur)にインストールし、簡単なプログラムを実行するまでを紹介します。

Windows10でRust!

こちらのリンクからダウンロードページに進み、[RUSTUP-INIT.EXE(64-BIT)をダウンロードする]をクリックします。

ダウンロードした「rustup-init.exe」を実行します。

Microsoft C ++ビルドツールのインストール

すでに、C ++ビルドツールがインストールされている場合は、この項をスキップしてかまいません。
「rustup-init.exe」を実行し、次のメッセージが出た場合は、いったん、「n」を入力してインストーラを終了します。メッセージは、およそ次のようなことが書かれています。
「Rustには、Visual Studio2013以降のMicrosoft C ++ビルドツールが必要です。しかしまだインストールされていないようです。続行する前に、C ++ビルドツールをインストールしてください。」
後でインストールしても良いようですが、私は先にしました。

このリンクから、C ++ビルドツールのダウンロードサイトに移動します。「Build Toolsのダウンロード」をクリックし、インストーラをダウンロードします。

ダウンロードしたインストーラを起動します。

C++ Build Toolsのチェックボックスをチェックし、[インストール]をクリックします。

インストール後、Windowsを再起動します。

Rustのインストール

Rustのインストーラを起動すると、次の画面が表示されます。デフォルトの「1」を選択します。

最後に[Enter]キーを入力すると下のウインドウが閉じます。

これでインストールは完了です。
PowerShellを起動して、rust関連のコマンドが実行できることを確認します。

> cargo -V
cargo 1.51.0 (43b129a20 2021-03-16)

> rustc -V
rustc 1.51.0 (2fd73fabe 2021-03-23)

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コマンドで表示したのが下の図です。

> tree
C:.
└─show_os_ver
    ├─src
    └─target
        └─debug
            ├─.fingerprint
            │  └─show_os_ver-6e9761e250227a20
            ├─build
            ├─deps
            ├─examples
            └─incremental
                └─show_os_ver-2pbgi5bw157s3
                    └─s-fx46y9e08f-st9gr9-7vzjtifks76a

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 (C:\Users\xxxx\works\rust\show_os_ver)
    Finished dev [unoptimized + debuginfo] target(s) in 2.12s
     Running `target\debug\show_os_ver.exe`
Hello, world!

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

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

use std::process::Command;

fn main() {
    let proc = Command::new("wmic")
        .args(&["os", "get", "caption"])
        .output()
        .expect("Failed to start `wmic`");

    println!("{}", String::from_utf8_lossy(&proc.stdout));
}

プログラムからwmicコマンドを引数付きで実行し、wmicから受け取った出力結果を表示します。
let proc = Command::new(“wmic”) の行でwmicコマンドを実行します。
.args(&[“os”, “get”, “caption”]) でwmicに与える引数を指定します。
.output() でwmicの実行完了を待つと同時に出力を受け取ります。
.expect(“Failed to start wmic“); で例外処理を登録します。
println!(“{}”, String::from_utf8_lossy(&proc.stdout)); でwmicの実行結果を表示します。

> cargo run
   Compiling show_os_ver v0.1.0 (C:\Users\xxxxx\works\rust\show_os_ver)
    Finished dev [unoptimized + debuginfo] target(s) in 0.53s
     Running `C:\Users\xxxxx\works\rust\show_os_ver\target\debug\show_os_ver.exe`
Caption
Microsoft Windows 10 Enterprise Evaluation

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

UbuntuでRust!

Windows上にLinux環境を構築する方法にWSLがあります。WSL(Windows Subsystem for Linux ) とは、Linuxのバイナリ実行ファイルをWindows 10およびWindows Server上で実行できるようにしたものです。
WSLでWindows上にUbuntu環境を構築する方法は、このリンクの記事に詳しいので、よかったら参考にしてください。

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のバージョンを表示してみる

Ubuntuでも、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 の行でコマンドを実行します。
.args でcatに与える引数を指定します。
.output() でcatの実行完了を待つと同時に出力を受け取ります。
.expect で例外処理を登録します。
println!(“{}”, String::from_utf8_lossy(&proc.stdout)); で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でRust!

Rustのインストール

macOSの場合は、Ubuntu同様ターミナルからcurlコマンドを実行してインストールします。プロンプト”>”が表示されたら、「1」を入力します。

% curl https://sh.rustup.rs -sSf | sh
info: downloading installer

Welcome to Rust!

 < 略 >

   default host triple: x86_64-apple-darwin
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1

sourceコマンドでPATH環境変数の設定を読み込み、rust関連のコマンドが実行できることを確認します。

% source $HOME/.cargo/env
% 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

プロジェクトのディレクトリ構成は、Ubuntuの章で説明したものとほぼ同じです。もし、treeコマンドで表示したいのであれば、Homebrewをインストールして、treeコマンドをインストールします。

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
% brew install tree
% tree
.
└── show_os_ver
    ├── Cargo.toml
    └── src
        └── main.rs

2 directories, 2 files

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 (/Users/apple/works/rust/show_os_ver)
    Finished dev [unoptimized + debuginfo] target(s) in 2.38s
     Running `/Users/apple/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("sw_vers")
        .output()
        .expect("Failed to start `sw_vers`");

    println!("{}", String::from_utf8_lossy(&proc.stdout));
}

プログラムから”sw_vers”コマンドを実行し、出力結果を表示します。
let proc = Command::new の行でコマンドを実行します。
.output() でsw_versの実行完了を待つと同時に出力を受け取ります。
.expect で例外処理を登録します。
println!(“{}”, String::from_utf8_lossy(&proc.stdout)); でsw_versの実行結果を表示します

% cargo run
   Compiling hello v0.1.0 (/Users/apple/works/rust/hello)
    Finished dev [unoptimized + debuginfo] target(s) in 6.30s
     Running `/Users/apple/works/rust/hello/target/debug/hello`
ProductName:	macOS
ProductVersion:	11.0.1
BuildVersion:	20B50

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

さいごに

Windows10, WSLのUbuntu, macOS 11(Big Sur)それぞれにRustをインストールして簡単なプログラムを実行できるようになるまでを紹介しました。この記事をきっかけに、C言語の次世代を期待されているRust使いが一人でも多く輩出されればと思います。