Oshiro-lab.

Rust 学習記 #1 - Getting Started

2024-03-30

ドクターメイトでは開発に Rust を導入しているんだけれど、

自分自身は Rust の経験がまったく無いので、業務でも使えるレベルを目指して学習記を残していきます。

基本的には、The Rust Programming Language (通称: The Book) を中心に学習していこうかなと。

必要に応じて、他のブログ記事などを見つつ進めていきます。

コミュニティによる日本語版 ( https://doc.rust-jp.rs/book-ja/title-page.html ) もあるので、

そちらを読み進めても良いかも。

作業環境

  • Ubuntu 22.04.4 LTS (Linux x64 6.5.0-21-generic)
  • Visual Studio Code 1.87.2
  • Rust 環境をつくる

    1. Getting Started

    https://doc.rust-lang.org/book/ch01-00-getting-started.html

    1.1 Installation

    Linux や macOS ならばターミナルから以下のコマンドでインストール。

    $ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

    コマンドを打つと、Current installation options を聞かれるので、

    1) Proceed with standard installation (default - just press enter) を選択。

    (単に Enter キーを押せば OK)

    少し待って Rust in installed now. Great! と表示されれば、無事にインストール完了。

    ターミナルを開き直して、以下のコマンドでインストールされていることを確認。

    $ rustc --version
    rustc 1.77.1 (7cf61ebde 2024-03-27)

    今後 Rust をアップデートする場合は、以下のコマンドで。

    $ rustup update

    1.2 Hello, World!

    作業は Visual Studio Code (VS Code) で。

    作業用ディレクトリを作成

    以下は一例。

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

    作成したディレクトリを VS Code で開く。

    image

    rust-analyzer をインストールする

    Rust 公式から rust-analyzer という拡張機能が提供されているので、インストールする。

    image

    rust-analyzer は入力の補完や、型のチェックなどをサポートする拡張機能なので、

    とりあえず導入しておくのが良さそう。

    main.rs を作成してコードを書き始める

    Rust の拡張子は .rs なのでファイル名は ***.rs という形式になる。

    ここでは main.rs という名前でファイルを作成。

    main 関数は実行可能な Rust のプログラムにおいて、一番初めに動作する特別な関数

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

    作成したらコンパイルして実行。

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

    記念すべき Rust デビュー 👏

    1.3 Hello, Cargo!

    Rust には Cargo というビルドシステムとパッケージマネージャを兼ね備えたツールが提供されている。

    Cargo は Rust をインストールしたときに同時にインストールされているので、すでにインストールされているはず。

    $ cargo --version
    cargo 1.77.1 (e52e36006 2024-03-26)

    プロジェクトを作成する

    cargo コマンドを用いてプロジェクトを作成してみる。

    $ cd ~/projects
    $ cargo new learning_rust
    image

    作成されたファイル群から Cargo.toml を見てみる。

    [package]
    name = "learning_rust"
    version = "0.1.0"
    edition = "2021"
    
    # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
    
    [dependencies]
    

    TOML 形式で書かれた Cargo の設定ファイルで、パッケージ情報や依存するクレート(コードのパッケージのこと)などを記載する。

    [package] にはその名前やバージョンなどを記載し、

    [dependencies] には依存するクレートを列挙していく。

    ビルドと実行

    cargo build コマンドでプロジェクトをビルドする。

    $ cargo build
       Compiling learning_rust v0.1.0 (/home/oshiroman/projects/learning_rust)
        Finished dev [unoptimized + debuginfo] target(s) in 0.12s

    ビルドが完了すると ./target/debug ディレクトリ内に実行ファイルが生成される。

    さらに cargo run コマンドを使うことでビルドと実行を同時に行うことができる。

    $ cargo run
        Finished dev [unoptimized + debuginfo] target(s) in 0.00s
         Running `target/debug/learning_rust`
    Hello, world!

    また cargo build --release コマンドでリリースビルドを作成することができる。

    リリースビルドは ./target/release 内に作成し、通常のビルドに比べるとコンパイルに時間を要する。

    代わりに最適化によって実行速度が向上するため、ベンチマークをとるときはリリースビルドを作成する。

    チェック

    cargo check コマンドを使うとコンパイル可能かどうかをチェックする。

    ビルドや実行よりも高速に動作する。

    $ cargo check
        Finished dev [unoptimized + debuginfo] target(s) in 0.02s

    (c) 2015 - 2024 Tatsuya Oshiro