コンテンツにスキップ

Rustを始める

あなたのパソコンでRustを動かして、最初のプログラムを作ってみましょう。まだ何もインストールしたくない場合は、Rust Playground(ブラウザでRustを実行できるサイト)で進めて、あとでこのページに戻ってきてもかまいません。

ステップ1:rustup でRustをインストールする

Section titled “ステップ1:rustup でRustをインストールする”

Rustの公式なインストール方法は、rustup というツールを使うことです。rustup は、Rustのコンパイラとビルドツールの cargo をインストールし、それらを最新の状態に保ってくれます。

rustup.rs を開いて、使っているOSの手順に従ってください。

  • Windows — rustup-init.exe をダウンロードして実行し、デフォルトのオプションのまま進めます。

  • macOS / Linux — ターミナルに次のコマンドを貼り付けます。

    Terminal window
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

ステップ2:インストールできたか確認する

Section titled “ステップ2:インストールできたか確認する”

ターミナルを一度閉じて開き直し、次のコマンドを実行します。

Terminal window
rustc --version
cargo --version

rustc 1.xx.0 のようなバージョン番号が表示されれば、準備完了です。

  • rustc はRustのコンパイラです(あなたのコードを実行できるプログラムに変換します)。
  • cargo は、プロジェクトのビルド、実行、テスト、管理をまとめてこなすRustの万能ツールです。ほとんどの作業で cargo を使います。

ステップ3:最初のプロジェクトを作る

Section titled “ステップ3:最初のプロジェクトを作る”

ファイルを手作業で作る代わりに、cargo にプロジェクトを用意してもらいましょう。

Terminal window
cargo new hello_rust
cd hello_rust

これで hello_rust というフォルダができ、Rustのプロジェクトに必要なものがすべてそろいます。

hello_rust/
├── Cargo.toml # プロジェクトの設定と依存関係
└── src/
└── main.rs # ここにコードを書く
  • Cargo.toml はプロジェクトの説明書です(名前、バージョン、使っているライブラリなど)。
  • src/main.rs は最初に実行されるファイルです。cargo が Hello World のコードまで書いておいてくれます。

プロジェクトのフォルダの中で、次のコマンドを実行します。

Terminal window
cargo run

cargo がプロジェクトをコンパイルし、次のように表示されます。

Hello, world!

これだけです。あなたは今、Rustのプログラムをビルドして実行しました。

src/main.rs を開くと、次のコードがあります。

fn main() {
println!("Hello, world!");
}
  • fn main() { ... } は main関数 を定義しています。Rustのプログラムはすべて、ここから実行が始まります。
  • println!("...") は、1行のテキストを画面に表示します。

メッセージを書き換えて、もう一度 cargo run を実行してみましょう。

fn main() {
println!("はじめてのRustプログラムからこんにちは!");
}

実行結果:

はじめてのRustプログラムからこんにちは!
▶ 実際に試してみよう

よく使う2つのコマンドです。

コマンド すること
cargo run コンパイルして実行する(開発中はこれが便利)
cargo build コンパイルだけする。プログラムは target/debug/ に作られる
cargo build --release 最適化された、より速いバージョンをコンパイルする(配布用)

うまくいかないとき:コンパイラのエラーを読む

Section titled “うまくいかないとき:コンパイラのエラーを読む”

コンパイラのエラーは必ず目にします。毎日のように、Rustを何年使っていても、です。エラーが出るのは、あなたの能力が足りないからではありません。コンパイラがちゃんと仕事をしている証拠です。はじめて見たときに怖くないように、わざとエラーを起こしてみましょう。

src/main.rs の println! から ! を消してみます。

fn main() {
println("Hello, world!");
}

cargo run を実行すると、次のように表示されます。

error[E0423]: expected function, found macro `println`
--> src/main.rs:2:5
|
2 | println("Hello, world!");
| ^^^^^^^ not a function
|
help: use `!` to invoke the macro
|
2 | println!("Hello, world!");
| +

上から順に読んでいきましょう。

  1. 1行目は、何が間違っているかを伝えています。Rustは関数を期待していたのに、println はマクロ(macro)だった、という意味です(マクロが何かは次のページで学びます)。
  2. --> src/main.rs:2:5 は場所を示しています。ファイル src/main.rs の2行目、5文字目です。
  3. ^^^^^^^ の印は、問題のあるコードの部分をぴったり指しています。
  4. help: の部分には、直し方が書かれていることがよくあります。ここでは「マクロを呼び出すには ! を使ってください」と書かれ、足りない ! の位置に + の印まで付いています。

! を戻せば、また元どおり動きます。

fn main() {
println!("Hello, world!");
}

実行結果:

Hello, world!
▶ 実際に試してみよう

ステップ5:エディタを設定する(おすすめ)

Section titled “ステップ5:エディタを設定する(おすすめ)”

快適に開発するために、エディタに rust-analyzer の拡張機能をインストールしましょう。入力しながら、自動補完、その場でのエラー表示、型のヒントなどが使えるようになります。

  • VS Code — rust-analyzer 拡張機能をインストールします
  • ほかの多くのエディタ(JetBrains、Neovim など)も rust-analyzer に対応しています。

あなたの名前、好きな食べ物、そして Rustを動かしたよ! の3行を表示するプログラムを作ってください。ヒント:println! 1つで1行が出力されるので、3つ使います。

解答を見る
fn main() {
println!("私の名前はSamです");
println!("ピザが好きです");
println!("Rustを動かしたよ!");
}

実行結果:

私の名前はSamです
ピザが好きです
Rustを動かしたよ!
▶ 実際に試してみよう

下のような小さなバナーを表示してください。タイトルの上下に = の線を引きます。それができたら、わざと ! を1つ消して cargo run を実行し、エラーを読んでから直してみましょう。ヒント:= の線も、ほかのメッセージと同じように println! の中のただの文字列です。

解答を見る

タイトルは英語のままにしています。日本語の文字は画面上で半角2文字分の幅を取るので、= の線と長さがそろわなくなるからです。

fn main() {
println!("==============");
println!(" HELLO RUST");
println!("==============");
}

実行結果:

==============
HELLO RUST
==============
▶ 実際に試してみよう
  • rustup.rs から rustup でRustをインストールします。
  • rustc --version と cargo --version で確認します。
  • cargo new でプロジェクトを作り、cargo run で実行します。
  • プロジェクトには Cargo.toml(設定)と src/main.rs(あなたのコード)があります。
  • コンパイラのエラーは上から順に読みます。何が間違っているか、どこか、そして多くの場合 help: に直し方が書かれています。
  • エディタに rust-analyzer を入れると、ずっと快適になります。

理解度チェック

1. Rustのコンパイラと cargo をインストールし、最新に保ってくれるツールはどれですか?

2. Rustのプロジェクトの名前、バージョン、依存関係を記述するファイルはどれですか?

3. プログラムを実行せず、コンパイルだけするコマンドはどれですか?

スコア: 0 / 3