Rustは、Mozillaによって開始され、現在はRust Foundationによって管理されているオープンソースのシステムプログラミング言語です。Stack OverflowのDeveloper Surveyで長年「最も愛されている言語」に選ばれ続けているのには理由があります。
経験豊富なプログラマにとって、Rustは「トレードオフを解消する」言語として映るはずです。
C/C++ではプログラマの責任であったメモリ管理を、Rustは所有権(Ownership)というコンパイル時のシステムで保証します。
「使わないものにはコストを払わない。使うものについては、手書きのコード以上のコストをかけない」というC++の哲学を継承しています。イテレータや高階関数を使っても、最適化された低レベルコードと同等のパフォーマンスが得られます。
多くの言語で並行処理はバグの温床(データ競合など)ですが、Rustではコンパイラがデータ競合を検知し、コンパイルエラーとして報告します。「コンパイルが通れば、並行性のバグを含んでいる可能性は低い」という安心感を持ってコーディングできます。
Rustの開発環境は非常にモダンで、バージョン管理やパッケージ管理が統合されています。
Rustのバージョンマネージャである rustup を使用してインストールするのが標準的です。
macOS / Linux / WSL (Windows Subsystem for Linux) の場合:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Windowsの場合:
公式サイト(rust-lang.org)から rustup-init.exe をダウンロードして実行します(C++ビルドツールが必要になる場合があります)。
インストール後、以下のコマンドでバージョンが表示されれば成功です。
rustc --version cargo --version
まずは、ビルドシステムを使わずにコンパイラ rustc を直接叩いて、Rustプログラムの最小単位を見てみましょう。
以下のコードを記述します。
fn main() {
// !がついているのは関数ではなく「マクロ」の呼び出しです
println!("Hello, world from rustc!");
}コンパイルと実行は以下の手順で行います。
rustc hello.rs
.exe)が生成されます。./hello (Windowsなら .\hello.exe)Hello, world from rustc!
fn main() { ... }: エントリポイントです。引数や戻り値がない場合、このように記述します。
println!: 末尾に ! がついているのはマクロであることを示しています。Rustでは可変長引数を取る機能などをマクロとして実装しています。;: 文の終わりには必須です。実際の開発では rustc を直接使うことは稀です。公式のビルドシステム兼パッケージマネージャである Cargo を使用します。Node.jsにおける npm、Pythonにおける pip + venv のような存在ですが、それ以上にプロジェクトのライフサイクル全体を管理します。
新しいプロジェクトを作成します。
cargo new hello_cargo cd hello_cargo
このコマンドにより、以下のディレクトリ構造が生成されます。
Cargo.toml: パッケージのマニフェストファイル(依存関係やメタデータを記述)。src/main.rs: ソースコード。.gitignore: Gitの設定ファイルも自動生成されます。生成されたプロジェクトで、以下のコマンドを試してみましょう。
cargo check
cargo build
target/debug/ に生成されます。コンパイル速度重視で、最適化は行われません。cargo run
cargo build --release
target/release/ に生成されます。コンパイル時間は長くなりますが、強力な最適化がかかり、実行速度が劇的に向上します。src/main.rs の中身は以下のようになっています(生成時デフォルト)。
fn main() {
println!("Hello, world!");
}Rustは「公式のスタイル」を重視する言語です。議論の余地をなくすために強力なツールが標準で用意されています。
Go言語の gofmt のように、コードを自動整形します。
cargo fmt
多くのエディタ(VS Codeなど)では保存時に自動実行されるよう設定するのが一般的です。
単なるスタイルチェックだけでなく、パフォーマンスの改善案や、Rustらしい書き方(Idiomatic Rust)を提案してくれます。
cargo clippy
例えば、無駄な計算や非推奨なAPIの使用などを指摘してくれるため、学習中はこのコマンドの警告に従うだけでRustの理解が深まります。