LoginSignup
13
5

More than 5 years have passed since last update.

Rustでパッケージ(クレート)インストールから使用するまでの軌跡

Last updated at Posted at 2019-02-14

rustとは以下のようなコンセプトのプログラミング言語です

Rust言語は速度、並行性、安全性を言語仕様として保証するC言語、C++に代わるシステムプログラミング(英語版)に適したプログラミング言語を目指している。
Wikipediaより

今回はそのrustでパッケージ(クレート)を使用する方法をまとめたいと思います。

時間がない人はクレートの使い方の項を見てください。

目的

  • cargoで作ったプロジェクト内で、外部パッケージ(クレート)を使用する方法がわからなかったのでその備忘録
  • 同じことで躓いている人がいればその助けになれば嬉しい
  • 同じ環境を用意すれば予備知識無しで再現できるようにすること

対象者

  • rust触ってみたいけどクレートインポートで躓いたよ:frowning2:って方

やること

  • 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行足します。

Cargo.toml
[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のドキュメントから引用)

main.rs
// 最初は 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がダウンロード、ビルドをしてくれる
  • ありがとうございました:grin:

参考サイト

Rustで乱数生成
Generate Random Values
CrateRand
Wikipedia(rust)

13
5
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5