Rustで外部モジュールを使えるようにする
前回は自作のライブラリを動かせるようにしました。
今回は外部ライブラリを使えるようにしましょう。
ちょうどC++でOpenGLとSDLの勉強をしてたので、 Rustも同じように勉強していこうかなと思いました。
とりあえず今回は外部モジュールの読み込み方をメインとします。
開発の続きに関してはもう一つのブログのほうで進めていきます。
Rust用のSDL2を導入してみる
ここでSDL2のライブラリの情報が見られます。
Rustは1つのモジュールの塊のことを「クレート(木箱)」と表現しています。
最初にプロジェクトを作成したときに「Cargo.toml」というファイルがあります。
それにクレートの情報を記載してインストールしていくというのが基本のようです。
node.jsのpackage.jsonみたいな役割ですね。
おそらくnpmみたいにコマンドでインストールする方法もありそうですが、 今回は.tomlファイルに書き込んでインストールする方法でやります。
上記のアドレスにアクセスしたサイドバーの上部らへんに「install」の項目に 「sdl2 = "0.34.5"」という感じの文字列が有ると思うのでそれをコピーします。
コピーしたら.tomlファイルに書き込みましょう。
[dependencies]
sdl2 = "0.34.5"
デフォルトだと「dependencies」に何も描き込まれてないと思うので その下に先ほどコピーしたものをペーストします。
SDL公式からライブラリをDLをする
おそらくC++でSDLをやっているのであればすでにダウンロードしているかもしれません。
「SDL2-devel-2.0.x-VC.zip」をダウンロードしてください。
解凍すると「SDL2-devel-2.0.14-VC\SDL2-2.0.14\lib\x64」の中身
- SDL2.dll
- SDL2.lib
- SDL2main.lib
- SDL2test.lib
の4つをコピーして
「C:\Users\ユーザー名\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib」
にペーストしてください。
ユーザー名は自分のWindowsにサインインしてるアカウント名。
そして「stable-x86_64-pc-windows-msvc」の部分は環境によって可変らしいです。
コマンドプロンプト等で
rustup show
を実行すると
stable-x86_64-pc-windows-msvc (default)
みたいな感じにでますのでそこが自分の環境の名前になります。
そして自分の環境に合わせてディレクトリをたどってコピーしたライブラリをペーストしてください。
ライブラリを無事入れられたらSDL2を使う準備ができました。
SDL2を使ってWindowを出してみる
VSCを再起動してみるとsdl2の予測変換がでるようになっています。
以下のコードを入力してください。
extern crate sdl2;
use sdl2::event::Event;
use sdl2::keyboard::Keycode;
use sdl2::pixels::Color;
use std::time::Duration;
pub fn main() -> Result<(), String> {
let sdl_context = sdl2::init()?;
let video_subsystem = sdl_context.video()?;
let window = video_subsystem
.window("rust-sdl2 demo: Video", 800, 600)
.position_centered()
.opengl()
.build()
.map_err(|e| e.to_string())?;
let mut canvas = window.into_canvas().build().map_err(|e| e.to_string())?;
canvas.set_draw_color(Color::RGB(255, 0, 0));
canvas.clear();
canvas.present();
let mut event_pump = sdl_context.event_pump()?;
'running: loop {
for event in event_pump.poll_iter() {
match event {
Event::Quit { .. }
| Event::KeyDown {
keycode: Some(Keycode::Escape),
..
} => break 'running,
_ => {}
}
}
canvas.clear();
canvas.present();
::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 30));
// The rest of the game loop goes here...
}
Ok(())
}
公式のサンプルのコピペです。
私も1から写経したので、ちゃんと覚えるならコピペせずに打ち込んでみるといいでしょう。
main.rsに書き込み終わったら
cargo run
でコンパイルしてくれます。
そして自動的にウィンドウが立ち上がり、赤で塗りつぶされた画面が表示されたらOKです。
今回は落としてきたライブラリを自力で導入して使えるようにしました。
次はcargoを使ったインストールを学べたら記事を書こうと思います。
サンプルのコードについては説明が知りたければ公式を見てもらったほうがいいでしょう。