Rust on Arch Linux: 始め方
Tags: rust, rustup, cargo, archlinux
Published: 2023-01-07 02:35:09

## はじめに

[Rust](https://www.rust-lang.org/) (あるいは rustlang) はモダンな汎用プログラミング言語の一つです。高速で、安全で、開発生産性を備えています。

Rust にはたくさんの特徴があります。例えば [関数型プログラミング (英語)](https://doc.rust-lang.org/book/ch13-00-functional-features.html) パラダイムや、[所有権 (英語)](https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html)、[ゼロコスト抽象化 (英語)](https://doc.rust-lang.org/stable/embedded-book/static-guarantees/zero-cost-abstractions.html) (!) などです。速度と安全性について言うと、GC すなわちガベージ・コレクションがありません。そのため非常に少ないメモリで動作し、ゴミを残しません。生産性について言うと、[cargo](https://doc.rust-lang.org/cargo/) というよくできたパッケージ・マネージャーがあり、さらに [rustup](https://rustup.rs/) という[ツールチェイン (英語)](https://rust-lang.github.io/rustup/concepts/toolchains.html) (stable / beta / nightly と複数に分かれたリリースチャネル) に対応したインストーラーがあります。

Rust はクロス・プラットフォームに対応しています。単一のコードベースから、さまざまなプラットフォームで動作するようにコンパイルできます。さらに出力が単体のバイナリになるので、ファイルサイズは最適化されておりそれゆえ小さいです。ここにおいて Rust のさらなる特徴が挙げることができます。すなわちポータビリティです。
サポートされているプラットフォームですが、まず Windows / Mac / Linux です。(Tier 1) そしてそれだけにとどまらず FreeBSD (Tier 2) や OpenBSD (Tier 3) も含まれます。

Tier とは何でしょうか ? Rust の [プラットフォームのサポートモデル (英語)](https://doc.rust-lang.org/rustc/platform-support.html) に関わるものです。3 つの層から成ります。

| Tier | 説明 |
| ----- | ----------- |
| 1 | "動作の保証" (公式バイナリのビルドプロセスで、テストまで自動化されています) |
| 2 | "ビルドの保証" (ビルドの自動化と、テストの一部自動化) |
| 3 | 正常動作しない可能性あり (コードベースとしてはサポートされていますが、ビルドとテストの自動化はされていません) |

64 ビット Linux (kernel 3.2+, glibc 2.17+) は、Tier 1 です。最も厚くサポートされているカテゴリです !!

本記事では Rust を [Artix Linux](https://artixlinux.org/) という [Arch Linux](https://archlinux.org/) 由来の OS にインストールする方法を紹介します。

### 環境

- OS: Artix Linux (Arch Linux 由来)
- App: Rust [1.66.0](https://releases.rs/docs/1.66.0/)
- App toolchains installer: rustup 1.25.1
- ターミナル: [Xfce4 Terminal](https://gitlab.xfce.org/apps/xfce4-terminal)
- IDE (& エディター): [VSCodium](https://vscodium.com/) (あるいは [VS Code](https://code.visualstudio.com/))

## チュートリアル

各所の [`doas`](https://man.openbsd.org/doas) は [`sudo`](https://www.sudo.ws/) に置き換えることができます。

### インストール

[pacman](https://wiki.archlinux.org/title/Pacman) を使用する場合でも、少なくとも 2 つの選択肢があります。

1. Rust の直接インストール
2. rustup をインストールして stable チャネルの環境を構築する方法

後者の方法が公式に推奨されています。とは言え必ずしもというわけではありません。お試しで前者の方法を採って時短することも可能です。

いずれの方法についても以下に示します。ターミナルを開いて始めましょう。

#### Rust の直接インストール (選択肢 1)

```console
$ doas pacman -Sy rust
```

#### rustup のインストール (選択肢 2)

```console
$ doas pacman -Sy rustup
```

続いて以下を実行します。

```console
$ rustup default stable
```

出力は以下の通りでした:

```console
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2022-12-15, rust version 1.66.0 (69f9c33d7 2022-12-12)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
info: downloading component 'rust-std'
info: downloading component 'rustc'
 68.0 MiB /  68.0 MiB (100 %)  22.9 MiB/s in  2s ETA:  0s
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 19.0 MiB /  19.0 MiB (100 %)  15.3 MiB/s in  1s ETA:  0s
info: installing component 'rust-std'
 29.7 MiB /  29.7 MiB (100 %)  17.4 MiB/s in  1s ETA:  0s
info: installing component 'rustc'
 68.0 MiB /  68.0 MiB (100 %)  19.7 MiB/s in  3s ETA:  0s
info: installing component 'rustfmt'
info: default toolchain set to 'stable-x86_64-unknown-linux-gnu'

  stable-x86_64-unknown-linux-gnu installed - rustc 1.66.0 (69f9c33d7 2022-12-12)

```

完了です 😉

余談ですが rustup を使うと、stable の代わりに、nightly もしくは beta 版の環境を入れることもできます。それらの方が、コンパイルタイムが短縮されていたり、充実した (しかしながらおそらくはテスト中の) 機能を使える場合があります。

### プロジェクトの作成

最初にディレクトリをつくります。

```console
$ mkdir my-first-rust-prj

$ cd my-first-rust-prj
```

次に VSCodium を (あるいは VS Code を) そのディレクトリで立ち上げます。
キーボードの `Ctrl + Shift + @` を押して、ターミナルを開きましょう。

![init in ide](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jdkfgfi3tam763ipdwr7.png)

[`cargo init`](https://doc.rust-lang.org/cargo/commands/cargo-init.html) を実行します。すると cargo のパッケージが生成されます:

```console
$ cargo init --bin .
```

なお `--bin` オプションはデフォルトの挙動に該当するので、省略しても大丈夫です。

出力は以下の通りでした:

```
     Created binary (application) package
```

次のようなものたちができているはずです。`Cargo.toml`、これはプロジェクトのマニフェスト定義、`Cargo.lock`、こちらは依存パッケージのロックファイル、それから `src/main.rs` というプログラムのエントリになるもの、などなど。さらに [`cargo build`](https://doc.rust-lang.org/cargo/commands/cargo-build.html) を実行すると、`target` というディレクトリが生成されます。

```
.
├─.gitignore
├─src
├───main.rs
├─Cargo.lock
└─Cargo.toml
```

### デモアプリの実行

コンパイルできるセットが手に入りました。

実際にコンパイルしてアプリとして実行するには、どうすれば良いのでしょうか ? こちらを実行するだけです:

```console
$ cargo run
```

出力は以下の通りでした:

```console
   Compiling my-first-rust-prj v0.1.0 (/(...)/my-first-rust-prj)
    Finished dev [unoptimized + debuginfo] target(s) in 0.26s
     Running `target/debug/my-first-rust-prj`
Hello, world!
```

やりました。"Hello, world!" と出力されました。すばらしいですね :)

別のやり方として、バイナリを生成して、それを手動で実行することもできます。

```console
$ cargo build
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s

$ ./target/debug/my-first-rust-prj
Hello, world!
```

## おわりに

さあ Rust プロジェクトのこと始めができました。すぐにでも開発を始められます。
データ加工、ファイル I/O の実装、ネットワーク接続の制御、サーバー構築、などなど。

Rust との旅をお楽しみください -- 安全で、強力で、おもしろくて、堅牢で、魅力的なものになるでしょう。
良い旅を ;)

### 参考

- [The Rust Programming Language (英語)](https://doc.rust-lang.org/stable/book)
  - 本当に良い本です !!
- [Learn Rust (英語)](https://www.rust-lang.org/learn)