rustとは以下のようなコンセプトのプログラミング言語です
Rust言語は速度、並行性、安全性を言語仕様として保証するC言語、C++に代わるシステムプログラミング(英語版)に適したプログラミング言語を目指している。
Wikipediaより
今回はそのrustでパッケージ(クレート)を使用する方法をまとめたいと思います。
時間がない人はクレートの使い方の項を見てください。
目的
- cargoで作ったプロジェクト内で、外部パッケージ(クレート)を使用する方法がわからなかったのでその備忘録
- 同じことで躓いている人がいればその助けになれば嬉しい
- 同じ環境を用意すれば予備知識無しで再現できるようにすること
対象者
- rust触ってみたいけどクレートインポートで躓いたよって方
やること
- randというクレートをインストールしてサンプルコードを実行してみる。
実行環境
Macbook pro 13-inch 2016
macOSX High Sierra 10.13.6
rustc 1.32.0 (9fda7c223 2019-01-16)
rustup 1.16.0 (beab5ac2b 2018-12-06)
cargo 1.32.0 (8610973aa 2019-01-02)
用語解説
- cargo : rustのプロジェクトを管理するソフト。rustのビルド、コードが依存するライブラリのダウンロード、ライブラリのビルドを担当します。
- クレート : パッケージ、ライブラリのrust版(細かく言えば違うと思います)
- rustup : rustのインストーラ
- Cargo.toml : rustのプロジェクト毎の設定ファイル
クレートインストール方法
rustでは使用したいクレートがあるとき、cargoで作成したプロジェクト内にあるCargo.tomlファイル内の[dependencies]に使用したいパッケージ名とバージョンを記述します。
pythonのパッケージのように、pipなどでインストールする手順は必要ありません。
あとはコード内でインポートしてあげればOKです。
実際に使ってみようみよう!!
今回はcargoを使い新しいプロジェクトを作成した後、randというクレートを使って見るところまで進めます。
cargo で新しいプロジェクトを作成(--binはデフォルトのオプションになったのでつけなくてOKです)
terminal上でこのコマンドを実行することで新しいプロジェクトが作成されます。
cargo new sample_project
今回使用するrandというクレートをCargo.tomlの中に記述します。(version 0.3.0でお願いします)
cargo new
の時点で生成されたコードに1行足します。
[package]
name = "sample_project"
version = "0.1.0"
authors = ["uemurakaito <kituemr@gmail.com>"]
edition = "2018"
[dependencies]
rand = "0.3.0" # この行を足しました
プロジェクトフォルダ内(sample_project)のsrc/main.rsを以下のように変更します(randのドキュメントから引用)
// 最初は extern crate rand; を書いていましたが、コメントにて2018年エディションはこの宣言が不要になり、useから直接モジュールをインポートできることを教えていただきました、ありがとうございます。
//randをインポート
//extern crate rand;
//ローカルスコープ内にRngをインポート
//// genはRng traitに定義されているためこれが必要
use rand::Rng;
fn main(){
//乱数生成機を初期化
let mut rng = rand::thread_rng();
//True or Falseをそれぞれ0.5の確率で生成
if rng.gen() { // random bool
//rng.gen<T>のTの部分で型を指定しそれにあった乱数を生成
println!("i32: {}, u32: {}", rng.gen::<i32>(), rng.gen::<u32>());
}
printlin!("True or False:: {}", rng.gen::<bool>());
}
出力(乱数生成でif rng.gen()
でtrueが出た場合)
i32: 848344424, u32: 2127722729
T or F:: false
まとめ
- クレートのインストールはプロジェクト設定ファイルのCargo.tomlファイルの中に記述する
-
cargo run
を実行した時にcargoがダウンロード、ビルドをしてくれる - ありがとうございました