😸

Rustお勉強 No.1 〜Hello Worldまで〜

2021/03/21に公開

概要

こちらは素人がプログラミング言語 Rust のお勉強をする記事です。
Rust とか書けたらかっこよくね?というモチベーションで勉強しています。
基本的には自分向けの記事なので、あまり親切ではないです。

お勉強用のリポジトリ

https://github.com/MasahikoJinno/study-rust

前提条件

$ sw_vers
ProductName:    macOS
ProductVersion: 11.2.2
BuildVersion:   20D80
$ brew -v
Homebrew 3.0.7
Homebrew/homebrew-core (git revision 9077fcaeec; last commit 2021-03-20)
Homebrew/homebrew-cask (git revision 6a506eefa6; last commit 2021-03-20)

環境構築

Rust のインストール

brew install rust

バージョンの確認

$ rustc --version
rustc 1.50.0
$ cargo --version
cargo 1.50.0

※ Homebrew を利用しない場合

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

プロジェクトの作成

作成コマンド実行

ディレクトリごと作成する場合

cargo new hello

ディレクトリを Rust のプロジェクトにする場合

cargo init

どことなく npm っぽいですね。

結果

コマンドを実行すると以下のようなファイルが生成される。

~/w/m/study-rust ❯❯❯ tree
.
├── Cargo.lock
├── Cargo.toml
├── README.md
└── src
    └── main.rs

1 directory, 4 files

Cargo.toml

これは多分 package.json 的なやつ

Cargo.toml
[package]
name = "study-rust"
version = "0.1.0"
authors = ["MasahikoJinno <miracle_t_shirt09@yahoo.co.jp>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

Cargo.lock

これは多分 yarn.lock とか package-lock.json 的なやつ

Cargo.lock
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
name = "study-rust"
version = "0.1.0"

src/main.rs

ソースファイル。
久々にコンパイル言語を書いたからこういう main ファイル的なやつ懐かしい。
Hello World まで自動生成してくれる。

src/main.rs
fn main() {
    println!("Hello, world!");
}

実行してみる

cargo run

以下のコマンドを実行すると build して実行してくれる。
開発中とか学習中は便利ですね。

$ cargo run

cargo build

build だけのコマンド

$ cargo build

build 成果物

build すると、target/ 配下に成果物が出力される。

tree target
target
├── CACHEDIR.TAG
└── debug
    ├── build
    ├── deps
    │   ├── study_rust
    │   ├── study_rust.d
    │   └── study_rust.dSYM
    │       └── Contents
    │           ├── Info.plist
    │           └── Resources
    │               └── DWARF
    │                   └── study_rust
    ├── examples
    ├── incremental
    │   └── study_rust-i4przhxy7ffj
    │       ├── s-fwxjnfzrit-1i3edt1-3t7sykxlxqd6f
    │       │   ├── 1h7getjdrqwg6tlu.o
    │       │   ├── 1vw2akw1crbzv8ck.o
    │       │   ├── 28t2rupsrdt1y5j6.o
    │       │   ├── 2pdqpu4d1nj7th54.o
    │       │   ├── 2uq22bc1ond0s23k.o
    │       │   ├── 36jrlkyjl494ka2w.o
    │       │   ├── 3s8quisig1bfe1e2.o
    │       │   ├── 5ethmr3ni1xkflzz.o
    │       │   ├── dep-graph.bin
    │       │   ├── query-cache.bin
    │       │   └── work-products.bin
    │       └── s-fwxjnfzrit-1i3edt1.lock
    ├── study-rust
    ├── study-rust.d
    └── study-rust.dSYM -> deps/study_rust.dSYM

12 directories, 19 files

上記だと target/debug/study-rust が実行ファイルなので以下のコマンドで実行できる。

$ target/debug/study-rust
Hello, world!

rustc コマンド

rustc コマンドで build することも可能。
cargo コマンドを使うと複数のファイルのコンパイルとビルドが一気にできるが、
1つのファイルだけを対象にしたいときは rustc コマンドを使うこともできる。

$ rustc src/main.rs

pwd に main という実行ファイルが生成される。

$ .main
Hello, world!

さっとコード書いてさっと使いたいときとかは便利ですね。

※ evcxr_repl という REPL のクレート(Rust ではライブラリのことをクレートと呼称するらしい)もあるみたい

所感

まだ何もやってないけど、Hello World までのハードルはそこまで高くないと感じた。
※ 最小限だと3つコマンドを実行すれば Hello World がターミナルに表示されるところまで行くので。

Hellow World では build が遅いとかそういうのは感じなかった。
※ 某言語は build が遅いと感じている

npm っぽい cargo というものがあるので、JavaScript 書いてる民の私からしても割ととっつきやすいと感じた。

Go と比較されがち(※)なので Go も触ってみようと思う
※ コンパイル言語、シングルバイナリなど共通点が多い気がする。使われ方みたいなのは違うけど。(思ってるのワイだけかも)

PS

Rust のコンパイルエラー結構親切っすね。

Discussion