Hello,World!の次のチュートリアルであるRustアプリケーションへ依存関係の追加を行います。
Rustで依存関係を追加する
Rustアプリケーションへ依存関係を追加します。 Rustのパッケージレジストリであるcrates.ioには、さまざまな種類のライブラリがあるようです。また Rustでは、パッケージのことを「crates」と呼ばれているようです。
Crate(クレート)とは
crates(クレートkrāt)は木箱(Google翻訳)。crateだと木枠という意味らしいです(Google翻訳)。Rustにおけるパッケージのことで、パッケージとは、なにかの機能をもったプログラムの集まりのことです。
では、Hello,World!で作成したプロジェクトを変更していきましょう。
チュートリアルに習い、「ferris-says」というcreateを呼び出してみます。
「ferris-says」のとは、フェリスというカニのキャラクターが話してくれるAAを表示するcrateです。ちなみにフェリスはRUSTの非公式マスコットらしいです。
非公式マスコットってふなっしーを思い出しました笑
Ferris
rustaceanというページで画像やGIFがのっています。
また、sourceがGitHubで公開されています。
https://github.com/mgattozzi/ferris-says
Cargo.tomlへ依存関係を追加する
「Cargo.toml」とは、Rustアプリケーションのマニフェストファイルで、メタデータや依存関係を保存(定義)します。
「Cargo.toml」を開いて、「dependencies」(依存関係)へ下記を追加します。
[dependencies]
ferris-says = "0.1.1"
上記は依存関係にcrateの「ferris-says」バージョン”0.1.1″を追加したという意味です。
実際の編集した画像(VSCODE)
続いて、プログラム本体である、「main.rs」を編集します。
main.rsを編集して依存関係を追加したcrate(クレート)を利用する
「src」フォルダ直下にある「main.rs」の内容をすべて消して下記を入力します。
main.rs
保存したら実行してみます。
Cargo RUNで依存性を追加したRustアプリケーションを実行する
では、実行してみましょう。
コマンドプロンプトを開いて、プロジェクトルート(今回の例だとhello-rust直下)から「cargo run」を実行します。
下記の結果が表示されます。
非公式マスコットのフェリスのAAが表示されました。
実際に実行した画像
crateの「ferris-says」の機能を利用して、フェリスのAAが表示されました。
依存性を追加してRustアプリケーションへ機能を追加、利用することができました!!!
コードの解説
use ferris_says::say;
use std::io::{stdout, BufWriter};
use で利用する下記2つのcrateを指定します。
・「ferris_says」の「say」・・・フェリスのAAを表示する機能
・「std」の「io」の「{stdout, BufWriter}」・・・コンソールに表示する機能
次にmain関数内の処理です。
let stdout = stdout();
let out = b"Hello fellow Rustaceans!";
let width = 24;
「stdout」には、コンソールにメッセージを表示する機能を設定します。
「out」には、メッセージを文字列で設定します。
「width」には、メッセージ表示幅を数値で設定します。
全ての行の先頭にある「let」とは、変数を定義しています。
※正確には「let」は束縛を導入するらしいです、このあたりは別途別の投稿にまとめようと思います
let mut writer = BufWriter::new(stdout.lock());
say(out, width, &mut writer).unwrap();
「let mut」で変更可能な変数を定義します。
1行目で「writer」にコンソールに文字を書き出す機能を設定します。
2行目でフェリスcrateのsay関数を呼び出します。
out:メッセージ、width:メッセージの幅のサイズ、writer:書き込み機能を渡しています。
「&mut」は、元の変数(ここではwriter)の参照および編集権限を渡しています。(値渡しのようなイメージですが、こちらも別の投稿にまとめようと思います)
最後の「unwrap()」は、say関数からの返された型(Result<>)から中身をとりだしています。
試しに「unwrap()」を削ってビルドすると下記のワーニングが表示されます。
C:\workspace\hello-rust>cargo build
Compiling hello-rust v0.1.0 (C:\workspace\hello-rust)
warning: unused `std::result::Result` that must be used
--> src\main.rs:10:5
|
10 | say(out, width, &mut writer);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: #[warn(unused_must_use)] on by default
= note: this `Result` may be an `Err` variant, which should be handled
Finished dev [unoptimized + debuginfo] target(s) in 1.00s