Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Hello, World!

Rust をインストールしたので、最初の Rust プログラムを書いてみましょう。 新しい言語を学ぶときには、Hello, world! というテキストを画面に表示する小さなプログラムを書くのが慣例なので、ここでも同じことを行います!

注: この本では、コマンドラインの基本的な知識があることを前提としています。Rust は、どのエディタやツールを使うか、コードをどこに置くかについて特に要件を課しません。そのため、コマンドラインではなく IDE を使いたい場合は、使い慣れた IDE を自由に使ってください。現在では多くの IDE がある程度 Rust をサポートしています。詳しくは IDE のドキュメントを確認してください。Rust チームは rust-analyzer を通じた優れた IDE サポートの実現に注力してきました。詳しくは 付録 D を参照してください。

プロジェクトディレクトリのセットアップ

まず、Rust のコードを保存するためのディレクトリを作成します。Rust にとってコードがどこに置かれているかは重要ではありませんが、この本の練習問題やプロジェクトでは、ホームディレクトリに projects ディレクトリを作成し、すべてのプロジェクトをそこに置くことをお勧めします。

ターミナルを開き、次のコマンドを入力して projects ディレクトリを作成し、その projects ディレクトリの中に「Hello, world!」プロジェクト用のディレクトリを作成してください。

Linux、macOS、および Windows の PowerShell では、次のように入力します:

$ mkdir ~/projects
$ cd ~/projects
$ mkdir hello_world
$ cd hello_world

Windows の CMD では、次のように入力します:

> mkdir "%USERPROFILE%\projects"
> cd /d "%USERPROFILE%\projects"
> mkdir hello_world
> cd hello_world

Rustプログラムの基本

次に、新しいソースファイルを作成し、main.rs という名前にします。Rust のファイルは常に .rs 拡張子で終わります。ファイル名に複数の単語を使う場合は、アンダースコアで区切るのが慣例です。たとえば、helloworld.rs ではなく hello_world.rs を使います。

では、今作成した main.rs ファイルを開き、リスト 1-1 のコードを入力してください。

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

ファイルを保存し、~/projects/hello_world ディレクトリにあるターミナルウィンドウに戻ってください。Linux または macOS では、次のコマンドを入力してファイルをコンパイルし、実行します:

$ rustc main.rs
$ ./main
Hello, world!

Windows では、./main の代わりに .\main を入力します:

> rustc main.rs
> .\main
Hello, world!

オペレーティングシステムに関係なく、文字列 Hello, world! がターミナルに表示されるはずです。この出力が表示されない場合は、インストールのセクションにある 「トラブルシューティング」 を参照して、助けを得る方法を確認してください。

もし Hello, world! が表示されたなら、おめでとうございます! これで正式に Rust プログラムを書いたことになります。つまり、あなたは Rust プログラマーです――ようこそ!

Rustプログラムの構造

この「Hello, world!」プログラムを詳しく見ていきましょう。まずは最初の要素です:

fn main() {

}

これらの行は、main という名前の関数を定義しています。main 関数は特別です。すべての実行可能な Rust プログラムにおいて、常に最初に実行されるコードだからです。ここでは、最初の行で、引数を取らず何も返さない main という名前の関数を宣言しています。引数がある場合は、丸かっこ (()) の中に入ります。

関数本体は {} で囲まれます。Rust では、すべての関数本体を波かっこで囲む必要があります。開始の波かっこは、関数宣言と同じ行に置き、その前に 1 つ空白を入れるのが良いスタイルです。

注: Rust プロジェクト全体で標準的なスタイルに従いたい場合は、rustfmt という自動フォーマッタツールを使ってコードを特定のスタイルに整形できます(rustfmt については 付録 D で詳しく説明します)。Rust チームは、rustc と同様に、このツールも標準の Rust 配布物に含めているので、すでにコンピュータにインストールされているはずです!

main 関数の本体には、次のコードが入ります:

#![allow(unused)]
fn main() {
println!("Hello, world!");
}

この行が、この小さなプログラムの仕事をすべて行います。つまり、テキストを画面に表示します。ここでは、注目すべき重要な点が 3 つあります。

まず、println! は Rust のマクロを呼び出しています。もし関数を呼び出しているのであれば、println! なし)と書きます。Rust のマクロは、Rust の構文を拡張するためにコードを生成するコードを書く手段であり、これについては 第20章 でさらに詳しく説明します。今のところは、! を使っているということは通常の関数ではなくマクロを呼び出していること、そしてマクロは必ずしも関数と同じ規則に従うわけではないことだけ知っておけば十分です。

2 つ目に、"Hello, world!" という文字列があります。この文字列を println! の引数として渡すと、その文字列が画面に表示されます。

3 つ目に、行の末尾にセミコロン (;) を付けています。これは、この式が終わり、次の式を始める準備ができていることを示します。Rust のコードのほとんどの行はセミコロンで終わります。

コンパイルと実行

新しく作成したプログラムを実行したばかりなので、この過程の各ステップを見ていきましょう。

Rust プログラムを実行する前に、Rust コンパイラを使ってコンパイルする必要があります。そのためには、次のように rustc コマンドを入力し、ソースファイル名を渡します:

$ rustc main.rs

C や C++ の経験があるなら、これは gccclang に似ていることに気付くでしょう。コンパイルが成功すると、Rust はバイナリ実行ファイルを出力します。

Linux、macOS、および Windows の PowerShell では、シェルで ls コマンドを入力すると実行ファイルを確認できます:

$ ls
main  main.rs

Linux と macOS では、2 つのファイルが表示されます。Windows の PowerShell では、CMD を使った場合と同じ 3 つのファイルが表示されます。Windows の CMD では、次のように入力します:

> dir /B %= /B オプションはファイル名のみを表示することを意味します =%
main.exe
main.pdb
main.rs

ここには、.rs 拡張子のソースコードファイル、実行ファイル(Windows では main.exe、それ以外のすべてのプラットフォームでは main)、そして Windows を使用している場合は .pdb 拡張子のデバッグ情報を含むファイルが表示されています。ここから、次のように main または main.exe ファイルを実行します:

$ ./main # または Windows では .\main

main.rs が「Hello, world!」プログラムであれば、この行により Hello, world! がターミナルに表示されます。

Ruby、Python、JavaScript のような動的言語に慣れている場合、プログラムをコンパイルすることと実行することを別々の手順として扱うことに慣れていないかもしれません。Rust は 事前コンパイル型 言語です。つまり、プログラムをコンパイルして実行可能ファイルを誰かに渡せば、その人は Rust をインストールしていなくても実行できます。誰かに .rb.py、または .js ファイルを渡した場合、その人はそれぞれ Ruby、Python、または JavaScript の実装をインストールしている必要があります。しかし、それらの言語では、プログラムをコンパイルして実行するのに必要なコマンドは 1 つだけです。言語設計では、あらゆることがトレードオフです。

単純なプログラムであれば rustc でコンパイルするだけでも十分ですが、プロジェクトが大きくなるにつれて、すべてのオプションを管理し、コードを共有しやすくしたくなるでしょう。次は、現実の Rust プログラムを書くのに役立つ Cargo ツールを紹介します。