Rust on Arch Linux: 始め方

nabbisen - Jan 7 '23 - - Dev Community

はじめに

Rust (あるいは rustlang) はモダンな汎用プログラミング言語の一つです。高速で、安全で、開発生産性を備えています。

Rust にはたくさんの特徴があります。例えば 関数型プログラミング (英語) パラダイムや、所有権 (英語)ゼロコスト抽象化 (英語) (!) などです。速度と安全性について言うと、GC すなわちガベージ・コレクションがありません。そのため非常に少ないメモリで動作し、ゴミを残しません。生産性について言うと、cargo というよくできたパッケージ・マネージャーがあり、さらに rustup というツールチェイン (英語) (stable / beta / nightly と複数に分かれたリリースチャネル) に対応したインストーラーがあります。

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

Tier とは何でしょうか ? Rust の プラットフォームのサポートモデル (英語) に関わるものです。3 つの層から成ります。

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

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

本記事では Rust を Artix Linux という Arch Linux 由来の OS にインストールする方法を紹介します。

環境

  • OS: Artix Linux (Arch Linux 由来)
  • App: Rust 1.66.0
  • App toolchains installer: rustup 1.25.1
  • ターミナル: Xfce4 Terminal
  • IDE (& エディター): VSCodium (あるいは VS Code)

チュートリアル

各所の doassudo に置き換えることができます。

インストール

pacman を使用する場合でも、少なくとも 2 つの選択肢があります。

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

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

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

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

$ doas pacman -Sy rust
Enter fullscreen mode Exit fullscreen mode

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

$ doas pacman -Sy rustup
Enter fullscreen mode Exit fullscreen mode

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

$ rustup default stable
Enter fullscreen mode Exit fullscreen mode

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

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)

Enter fullscreen mode Exit fullscreen mode

完了です 😉

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

プロジェクトの作成

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

$ mkdir my-first-rust-prj

$ cd my-first-rust-prj
Enter fullscreen mode Exit fullscreen mode

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

init in ide

cargo init を実行します。すると cargo のパッケージが生成されます:

$ cargo init --bin .
Enter fullscreen mode Exit fullscreen mode

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

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

     Created binary (application) package
Enter fullscreen mode Exit fullscreen mode

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

.
├─.gitignore
├─src
├───main.rs
├─Cargo.lock
└─Cargo.toml
Enter fullscreen mode Exit fullscreen mode

デモアプリの実行

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

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

$ cargo run
Enter fullscreen mode Exit fullscreen mode

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

   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!
Enter fullscreen mode Exit fullscreen mode

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

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

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

$ ./target/debug/my-first-rust-prj
Hello, world!
Enter fullscreen mode Exit fullscreen mode

おわりに

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

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

参考

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .