blog.tmp.tokyo

No Promises Await at Journey's End

世界一速い Rust 環境の構築と Hello, world! 表示までのご案内

僕らの走ってきた道は ...

数あるプログラミング言語の中でも、私が最も得意とするのは Java 言語になります。その他、COBOL や C/C++, Python, Ruby, Objective-C, Swift, JavaScript, HTML, CSS, C#, VB, VC, ShellScript などなど仕事で使った言語は数知れず。プログラミング言語はいくつも覚えられるのに、人間が話す言語は日本語以外は全くダメです。なんででしょうかね。

最近興味を持っているのが Rust というプログラミング言語です。

ポスト C++ とか言われていたり、つい最近だと Microsoft が注目しているとかいうニュースも飛び込んできました。C/C++ はとにかく速いし、ポインタが使えるので便利ですが、だいたいポインタで間違えていろいろトラブルを出すのが関の山ですが、Rust はこんなへっぽこなプログラマのために「メモリセーフ」な言語として世の中に華々しくデビューしたのです。

・・・といっても最初のバージョンが出たのは 10 年以上前ですけど。

C/C++ 並みに速く動くし、メモリセーフともなれば使わない手はありません。早速、環境を構築して試してみようと暇な時間を見つけてやってみました。

爆速の開発環境構築

最近のプログラミング言語は基本的にお金がかかることはないのでパソコンがあれば始められます。Rust もとりあえず Windows でも macOS でも Linux でも何かあればやれます。ただ、macOS か Linux の方がやりやすいと思います。特にインストールは。

ということで macOS でやった例をご紹介します。たぶん 5 分もあれば環境を作って Hello, world が出せます。

www.rust-lang.org

Rust の公式サイトは結構エグいデザインです。GET STARTED のボタンを押してください。

www.rust-lang.org

そうするともっとエグいデザインのサイトに行きますね。ページの真ん中あたりに、

$> curl https://sh.rustup.rs -sSf | sh

というコマンドが書いてあるのでコピーして Terminal にペタっと貼り付けて実行します。こういう時は curl ってコマンドはナンジャラホイとか考えたらダメです。とにかく貼って実行あるのみ。

tomohikonoMacBook-puro:~ tomohiko$ curl https://sh.rustup.rs -sSf | sh
info: downloading installer

Welcome to Rust!

This will download and install the official compiler for the Rust programming 
language, and its package manager, Cargo.

It will add the cargo, rustc, rustup and other commands to Cargo's bin 
directory, located at:

  /Users/tomohiko/.cargo/bin

This path will then be added to your PATH environment variable by modifying the
profile file located at:

  /Users/tomohiko/.profile

You can uninstall at any time with rustup self uninstall and these changes will
be reverted.

Current installation options:

   default host triple: x86_64-apple-darwin
     default toolchain: stable
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>

という表示になるので、1 を選びます。上の表示でパスが私の環境になっているのは適当に読み替えてください。こういう時も考えちゃダメです。default とあるのでそれを選べばいいです。うちの会社の若手にもいるんですが、こういうどうでもいいところで 1,2,3 のどれにするかで半日くらい悩んで進まない人がいます。default を選んでおいて Rust をある程度身につけたら 2 や 3 が何かを考えて必要なら環境を作り直せばいいんです。最初は考えずにガンガン進むのが勉強のコツです。

1 を選ぶといろいろコンパイラとかをダウンロードし始めます。会社でやった時は回線が早くてあっという間でしたが、自宅で記事を書きながらやると ADSL 回線なのでダウンロードに時間がかかっています。5 分くらいと書きましたが、回線速度によっては時間がかかりますのであしからず。

info: syncing channel updates for 'stable-x86_64-apple-darwin'
info: latest update on 2019-07-04, rust version 1.36.0 (a53f9df32 2019-07-03)
info: downloading component 'rustc'
 82.2 MiB /  82.2 MiB (100 %) 412.8 KiB/s in  3m 35s ETA:  0s    
info: downloading component 'rust-std'
 55.8 MiB /  55.8 MiB (100 %) 400.0 KiB/s in  2m 24s ETA:  0s    
info: downloading component 'cargo'
  3.6 MiB /   3.6 MiB (100 %) 387.2 KiB/s in  9s ETA:  0s
info: downloading component 'rust-docs'
 11.1 MiB /  11.1 MiB (100 %) 409.6 KiB/s in 30s ETA:  0s
info: installing component 'rustc'
 82.2 MiB /  82.2 MiB (100 %)  17.6 MiB/s in  4s ETA:  0s
info: installing component 'rust-std'
 55.8 MiB /  55.8 MiB (100 %)  21.3 MiB/s in  2s ETA:  0s
info: installing component 'cargo'
info: installing component 'rust-docs'
 11.1 MiB /  11.1 MiB (100 %)   3.4 MiB/s in  3s ETA:  0s
info: default toolchain set to 'stable'

  stable installed - rustc 1.36.0 (a53f9df32 2019-07-03)


Rust is installed now. Great!

To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH 
environment variable. Next time you log in this will be done automatically.

To configure your current shell run source $HOME/.cargo/env
tomohikonoMacBook-puro:~ tomohiko$ 

ということでインストール完了です。一番下の行を読んでおかないとハマります。

$> source $HOME/.cargo/env

を実行しておけ、ということです。なんでか知りませんが、インストール時に環境変数にパスを通してくれません。

$> tomohikonoMacBook-puro:~ tomohiko$ cargo --version
cargo 1.36.0 (c4fcfb725 2019-05-15)

cargo --version を実行してバージョン番号が表示されれば OK です。めでたく Rust の開発環境が整いました。cargo というのが Rust で使用するパッケージマネージャ兼ビルドツールのようです。

お前はもう死んでいる

一般的なプログラミング言語だと、ここで Hello, world! と標準出力に表示される簡単なプログラムを書くので、Rust でも同じことをやりましょう。

tomohikonoMacBook-puro:~ tomohiko$ cd
tomohikonoMacBook-puro:~ tomohiko$ mkdir rust_project
tomohikonoMacBook-puro:~ tomohiko$ cd rust_project/

Rust は cargo コマンドを使用してプロジェクトと呼ばれるソースとか設定ファイルとかをひとまとめにしたフォルダを作ります。ひとつのプログラムを作るのにプロジェクトという単位で作っていく感じです。もちろん、単発の Rust プログラムを書いてコンパイル実行できますが、cargo コマンドでプロジェクトを作っていくのが公式でも紹介されている内容です。そのため、まずはホームディレクトリに移動して、適当な名前の Rust 用のプログラムを作っていくフォルダを作ります。上の例では rust_project というフォルダを作りました。

そして、rust_project フォルダに移動しておきます。

tomohikonoMacBook-puro:rust_project tomohiko$ cargo new hello_cargo --bin
     Created binary (application) `hello_cargo` package

ここで上のように cargo new コマンドを実行します。そのあとに続くのはプロジェクト名です。hello_cargo にしました。命名規則は Camel Case ではなく Snake Case らしいです。最後の --bin はなくてもよさそうですが、公式のドキュメントにはバイナリファイルの出力オプションとしてつける形で紹介されているので、私も習っておくことにしました。

tomohikonoMacBook-puro:rust_project tomohiko$ cd hello_cargo/
tomohikonoMacBook-puro:hello_cargo tomohiko$ cargo run
   Compiling hello_cargo v0.1.0 (/Users/tomohiko/rust_project/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.57s
     Running `target/debug/hello_cargo`
Hello, world!

そして、上のように hello_cargo のプロジェクトフォルダへ移動して、cargo run コマンドを実行します。これでビルドされて Hello, world! が表示されます。すごいですね。1 行もプログラムを書かずにプログラムを実行しました。これであなたも Rust プログラマの仲間入りです。

プロジェクトを作った段階で Hello, world! のプログラムも出来上がっているのです!

説明しよう!

要するに最初に書くプログラムが自動生成されているだけです。

tomohikonoMacBook-puro:hello_cargo tomohiko$ ls
Cargo.lock  Cargo.toml  src     target
tomohikonoMacBook-puro:hello_cargo tomohiko$ cd src
tomohikonoMacBook-puro:src tomohiko$ ls
main.rs

プロジェクトフォルダの中にいろいろファイルが生成されています。src というフォルダに Rust のプログラムファイルが入っているので移動します。main.rs が見えますね。Rust は .rs という拡張子のファイルを作るようです。これを適当なエディタかビューワで表示してみましょう。

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

これが最も基本的な Rust のプログラムです。fn は JavaScript とかと同じで function の意味ですね。関数を意味する言葉だと思います。main() は Java と同様に起動するための特別なメソッド(というか関数か)。標準出力には println!() を使うようです。公式ドキュメントを読めばわかりますが、! には意味があるようです。

このプログラムを Java 言語で書くと、

public static void main(String[] args) {
    System.out.println("Hello, world!");
}

になります。まあだいたい似たような感じですね。若干書く量は多いです。たぶん Hello, world を出すのに一番少ないコード量は Ruby だと思っていました。

p "Hello, world!"

自動生成という裏技を使って Rust は Ruby を超えたと言えます。

続きは Web で

ということで、ここまでの流れは以下の公式ドキュメントに詳細に乗っています。

doc.rust-jp.rs

公式のチュートリアルです。非常に詳しいので私もこれを読んで勉強中です。これが書籍になったものが売っているようですが、結構高いのでこのドキュメントを無料で見た方がお得です。微妙な日本語もありますが・・・。

とにもかくにも Rust 環境の完成から Hello, world も表示できました。しっかりしたドキュメントもあるので勉強が始められます。ぜひとも Rust 言語を勉強してみてはどうでしょうか。私はこれで作りたいプログラムがあるのでしばらく勉強してみようと思います。