🦀

Rust 開発環境 構築とHelloWorld(MacOS)

2024/04/14に公開

環境構築の前提

シェルの種類

  • zsh

インストール済であること

  • Homebrew
  • vscode

環境構築(terminal作業)

rustup

rustupを導入し、その次があります。
この図は最初の一歩として必要最低限に省略しています。気になった方はThe rustup bookを参照してください。
https://rust-lang.github.io/rustup/index.html

ではまずは、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がありますね。デフォルトでハロワが実装されていることが確認できると思います。

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が導入済みであることが条件となっています。

詳細マニュアルはこちらから
https://rust-analyzer.github.io/manual.html#features

追記予定(いずれ)

vscode拡張は、テスト関連など便利なものを都度追記していこうと思います。

Discussion