Rust 開発環境 構築とHelloWorld(MacOS)
環境構築の前提
シェルの種類
- zsh
インストール済であること
- Homebrew
- vscode
環境構築(terminal作業)
rustup
rustup
を導入し、その次があります。
この図は最初の一歩として必要最低限に省略しています。気になった方はThe rustup book
を参照してください。
ではまずは、rustupのインストールをしていきます。
brew install rustup-init
インストールされたら早速セットアップしていきましょう、以下コマンドを実行します
rustup-init
インタラクティブに設定が始まりました。特別に設定を変更しないためエンターキーで 1)を選択します。
Welcome to Rust!
...
...
1) Proceed with standard installation (default - just press enter)
2) Customize installation
3) Cancel installation
インストールが完了しました。(お疲れ様でした) 内容を少し見ていきましょう。
-
stable-x86_64-apple-darwin installed - rustc 1.77.2 (25ef9e3d8 2024-04-09)
インストールされてものです。stable
がインストールされていることがわかります。 -
To get started you may need to restart your current shell.
terminalを再起動してくださいと言われています。 -
$HOME/.cargo/env
がenvファイルに設定されたと言っています。macかつzshの場合は.zshenv
を指しています。
stable-x86_64-apple-darwin installed - rustc 1.77.2 (25ef9e3d8 2024-04-09)
Rust is installed now. Great!
To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).
To configure your current shell, you need to source
the corresponding env file under $HOME/.cargo.
This is usually done by running one of the following (note the leading DOT):
. "$HOME/.cargo/env" # For sh/bash/zsh/ash/dash/pdksh
source "$HOME/.cargo/env.fish" # For fish
ターミナルは再起動しましたか?
インストールされたものを確認してみます。(確認作業なのでスキップして構いません)
- まずは、パスが通っているか確認します。再起動していれば反映されているはずです。
echo $PATH
xxxxxxxxxxxxx.cargo/bin
- ホームディレクトリに以下ファイル、ディレクトリが追加されているはずです
ls -a | grep -e rust -e cargo
.cargo
.rustup
$HOME/.cargo/env
が設定更新されていることを確認します。
cat .zshenv
. "$HOME/.cargo/env"
- initしたときに一緒にインストールしたものをバージョン確認します。チーム開発するときは意識する箇所になりますね。※バージョンをチームの皆さんに共有(強制)する方法などは本記事では扱いません。
cargo --version
rustc --version
rustdoc --version
rustup --version
プロジェクトの作成(まだ環境構築完成じゃないですが、一旦)
環境構築のみを優先したい方は読み飛ばしていただいて構いません。いちはやくHello World
をしたい方のために新規プロジェクト作成を行います。インストールされたcargo
のコマンドを使っていきましょう。
cargo new hello
cargo new
はプロジェクトフォルダごと、cargo init
はカレントディレクトリを。newとinitの違いは言語共通なきもします。以下のようはファイルができました。
tree
.
├── Cargo.toml
└── src
└── main.rs
すでにmain.rs
がありますね。デフォルトでハロワが実装されていることが確認できると思います。
cat src/main.rs
fn main() {
println!("Hello, world!");
}
cargo run
をしてみましょう。run
は実は2つのコマンドを実行しており、プログラムの実行前にcargo build
を内部で実行しています。(実行時に、buildしているような表示が出てくる理由です)
cargo run
Compiling hello v0.1.0 (/Users/komoriissei/work/rust/hello)
Finished dev [unoptimized + debuginfo] target(s) in 2.75s
Running `target/debug/hello`
Hello, world!
コンパイルが行われたため、たくさんのファイルが増えました。Rustは複数のプラットフォームで動作させることができます。target
とはクロスコンパイルの仕組みですが、詳しくはThe rustup book
を参照ください。
tree
.
├── Cargo.lock
├── Cargo.toml
├── src
│ └── main.rs
└── target
├── CACHEDIR.TAG
└── debug
├── build
├── deps
│ ├── hello-da8a7b3e504a9f69
│ ├── hello-da8a7b3e504a9f69.1zkvffvai7m8kgx6.rcgu.o
│ ├── hello-da8a7b3e504a9f69.2qnrnr0xpc6cemqi.rcgu.o
│ ├── hello-da8a7b3e504a9f69.2qvotb002u1ch2x6.rcgu.o
│ ├── hello-da8a7b3e504a9f69.3c4lalx5piysa0v5.rcgu.o
│ ├── hello-da8a7b3e504a9f69.75lao8o9v0nazjn.rcgu.o
│ ├── hello-da8a7b3e504a9f69.d
│ └── hello-da8a7b3e504a9f69.jt9uts3yq2rrf0p.rcgu.o
├── examples
├── hello
├── hello.d
└── incremental
└── hello-1kmf8j3gd3pfe
├── s-gv8cukt31i-e03zx6-cr28hwnatic7bga9q8apn0qv6
│ ├── 1zkvffvai7m8kgx6.o
│ ├── 2qnrnr0xpc6cemqi.o
│ ├── 2qvotb002u1ch2x6.o
│ ├── 3c4lalx5piysa0v5.o
│ ├── 75lao8o9v0nazjn.o
│ ├── dep-graph.bin
│ ├── jt9uts3yq2rrf0p.o
│ ├── query-cache.bin
│ └── work-products.bin
└── s-gv8cukt31i-e03zx6.lock
環境構築(vscode拡張)
rust-analyzer
インポート挿入によるコード補完、定義・実装・型定義への移動、参照の検索、マウスオーバー時のヒント、構文の強調表示、その他たくさんの機能がついています。基本のき
としてインストールすることをおすすめします。
Quick startに記載されているとおりで、事前にrustup
が導入済みであることが条件となっています。
詳細マニュアルはこちらから
追記予定(いずれ)
vscode拡張は、テスト関連など便利なものを都度追記していこうと思います。
Discussion