やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Rustのプロジェクト構造

 用語が多いので一旦まとめる。

成果物

俯瞰

  • クレート(cratecargo new プロジェクト名 --lib)
    • モジュール(mod)
      • 列挙(enum), 構造体(struct)
      • メソッド(impl, fn)
      • 関数(fn)
        • 変数宣言(let
        • 制御文
          • 条件文(if, match, if let
          • 繰返文(loop, while, for

実行バイナリ用クレート

  • クレート(cargo new プロジェクト名 --bin)
    • /src
      • main.rs(cargo new プロジェクト名 --bin)

 main.rsは単体テストコードが書けないのでシンプル。

ライブラリ用クレート

  • クレート(cargo new プロジェクト名 --lib)
    • /src
      • lib.rs(cargo new プロジェクト名 --lib)
        • pub mod my_mod(任意ファイル名でOK)
      • my_mod.rs(任意ファイル名でOK)
        • 実装
          • pub fn 任意関数名() {...}(公開されているので結合テスト可)
          • fn 任意関数名() {...}(非公開なので単体テストのみ可)
        • 単体テスト
          • #[cfg(test)] mod tests { #[test] fn test_任意関数名() { assert_eq!(任意関数名(), 1); }
    • /tests結合テスト
      • 任意ファイル名.rs
        • extern crate プロジェクト名;
        • #[test] fn test_任意関数名() { assert_eq!(プロジェクト名::任意関数名(), 1); }

 lib.rsがトップレベル。pub mod ファイル名;のようにしてサブモジュールをロードする。

 単体テストは同ファイル内にtestsモジュールを作成するのが慣習。

 結合テストtestsディレクトリ配下に書くルール。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux

前回まで