---
title: はじめての Rust！  〜Rust いいかも！と思ってもらう 90 分〜
tags: 
author: [ふみふみ](https://www.docswell.com/user/2323code)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/GJWPN9V272.jpg?width=480
description: 2025/04/06(日)に行われた「第74回 RustLadies &amp; GTUGGirls 「はじめてのRust」」で行ったハンズオン資料です。 https://gtuggirls.connpass.com/event/349267/
published: April 06, 25
canonical: https://www.docswell.com/s/2323code/ZN12X2-2025-04-06-154243
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/GJWPN9V272.jpg)

はじめての Rust！
〜Rust いいかも！と思ってもらう 90 分〜
2025 年 4 月 6 日
第 74 回 RustLadies &amp; GTUGGirls 「はじめての Rust」
ふみふみ


# Page. 2

![Page Image](https://bcdn.docswell.com/page/4EZK3944E3.jpg)

今日のゴール
「Rust、思ったよりちょっと楽しいかも！」
「また機会があれば触ってみたい！」
と思ってもらうこと！


# Page. 3

![Page Image](https://bcdn.docswell.com/page/Y76QXK3G7V.jpg)

一緒に楽しむための心がまえ
何となくわかった、で OK！
ふみふみも勉強中です！


# Page. 4

![Page Image](https://bcdn.docswell.com/page/G75RXPLXE4.jpg)

Rust とは
特徴
事例
できること


# Page. 5

![Page Image](https://bcdn.docswell.com/page/9J2DX6LQJR.jpg)

Rust とは
安全性と信頼性に優れた言語！
静的型付け／コンパイル時エラー
所有権（Ownership）でメモリ安全


# Page. 6

![Page Image](https://bcdn.docswell.com/page/DEY289QYEM.jpg)

どこで使われてる？


# Page. 7

![Page Image](https://bcdn.docswell.com/page/VJN8QLKR78.jpg)

Firefox
Shipping Rust in Firefox
Firefox に組み込まれた Rust
Dropbox
Lossless compression with Brotli in Rust for a bit of Pied Piper on the
backend - Dropbox
Cloudflare
Serverless Rust with Cloudflare Workers


# Page. 8

![Page Image](https://bcdn.docswell.com/page/YE9KD4VZE3.jpg)

Rust でできること
CLI ツール（例：ripgrep）
WebAssembly（wasm）
ゲーム・アプリ開発
IoT や組み込み分野にも！
キーワード：「安全」「速い」


# Page. 9

![Page Image](https://bcdn.docswell.com/page/GE8R3Q4YJD.jpg)

環境の確認
Rust インストール済みですか？ ( rustc --version )
VSCode の方： rust-analyzer は入っていますか？
https://www.rust-lang.org/ja/tools


# Page. 10

![Page Image](https://bcdn.docswell.com/page/LELKVX69JR.jpg)

環境の確認
$ rustc --version
$ cargo --version


# Page. 11

![Page Image](https://bcdn.docswell.com/page/4JM2GL5VJW.jpg)

Hello, World!


# Page. 12

![Page Image](https://bcdn.docswell.com/page/PJRMZK3WE9.jpg)

Rust での開発の流れ
1. コード記述
2. コンパイル
3. 実行
それぞれのコマンドは一緒にやっていきましょう！


# Page. 13

![Page Image](https://bcdn.docswell.com/page/PEXV9L4V7X.jpg)

Hello, World!をしてみよう
.rs
ファイルを作ってみよう
$ mkdir hello_rust
$ cd hello_rust
$ touch main.rs


# Page. 14

![Page Image](https://bcdn.docswell.com/page/3EKQPLZ5ED.jpg)

main.rs
に記述しよう
fn main() {
println!(&quot;Hello, World!&quot;);
}


# Page. 15

![Page Image](https://bcdn.docswell.com/page/L73PX3D1E5.jpg)

実行しよう
1. rustc でコンパイル
2. ./main で実行
$ rustc main.rs
// 実行ファイルが作られる
$ ls
main main.rs
$ ./main
Hello, World!


# Page. 16

![Page Image](https://bcdn.docswell.com/page/87DL24PKEG.jpg)

cargo を使ってみよう！


# Page. 17

![Page Image](https://bcdn.docswell.com/page/VJP21MN3J8.jpg)

Cargo とは
Rust のビルドシステム &amp; パッケージマネージャ
Mac の Homebrew
Linux の apt
JS/TS の yarn, npm
Java の Maven Central Repository


# Page. 18

![Page Image](https://bcdn.docswell.com/page/2EVDY9KNEQ.jpg)

よく使う Cargo コマンド
cargo run
// 今日1番使います！
cargo check
// コンパイルが通るかのチェック
// 実行ファイルは作らない
cargo fmt
// コードの整形


# Page. 19

![Page Image](https://bcdn.docswell.com/page/57GY9ZQ57L.jpg)

数当てゲームを作ってみよう！
まずは実際のゴールを見てみましょう!


# Page. 20

![Page Image](https://bcdn.docswell.com/page/4EQMWLKLJP.jpg)



# Page. 21

![Page Image](https://bcdn.docswell.com/page/KJ4VKDP5E1.jpg)

数当てゲームの作り方
1. rand クレートを追加（ cargo add rand ）
2. ランダムな数（1~100）を生成
3. 標準入力で数字を受け取る（ io::stdin().read_line(&amp;mut guess) ）
4. 文字列 → 数値に変換（ .trim().parse() ）
5. マッチングで大小を判定 → ヒントを表示
6. loop で繰り返し → 当たったら終了！


# Page. 22

![Page Image](https://bcdn.docswell.com/page/LE13XZ92JG.jpg)

実際のコード
use rand::Rng;
use std::cmp::Ordering;
use std::io;
fn main() {
println!(&quot;Guess the number!&quot;);
let secret_number = rand::thread_rng().gen_range(1..=100);
loop {
println!(&quot;Please input your guess.&quot;);
let mut guess = String::new();
io::stdin()
.read_line(&amp;mut guess)
.expect(&quot;Failed to read line&quot;);
let guess: u32 = match guess.trim().parse() {
Ok(num) =&gt; num,
Err(_) =&gt; continue,
};
println!(&quot;You guessed: {guess}&quot;);
}
}
match guess.cmp(&amp;secret_number) {
Ordering::Less =&gt; println!(&quot;Too small!&quot;),
Ordering::Greater =&gt; println!(&quot;Too big!&quot;),
Ordering::Equal =&gt; {
println!(&quot;You win!&quot;);
break;
}
}


# Page. 23

![Page Image](https://bcdn.docswell.com/page/GEWPN9Q2J2.jpg)

1 つ 1 つ一緒に書いていきましょう！


# Page. 24

![Page Image](https://bcdn.docswell.com/page/47ZK39W473.jpg)

cargo でプロジェクトを作ろう
cargo new guessing_game
cd guessing_game
src/main.rs を開きましょう！
既に Hello, World が書かれています


# Page. 25

![Page Image](https://bcdn.docswell.com/page/YJ6QXKGGJV.jpg)

クレートのインポート
はじめに、使用するライブラリ（クレート）を記述します。
use でインポートできます。
use rand::Rng;
use std::cmp::Ordering;
use std::io;


# Page. 26

![Page Image](https://bcdn.docswell.com/page/GJ5RXPVX74.jpg)

ここから先は、main()に記述します！
main()を定義
fn main() {
println!(&quot;Guess the number!&quot;);
}


# Page. 27

![Page Image](https://bcdn.docswell.com/page/9E2DX63QER.jpg)

秘密の数字を作る
1 以上 100 以下の数字の中で、
答えとなる数字をランダムに作成します。
（=を外すと、1~99 の間で作成されます）
// main()の中
let secret_number = rand::thread_rng().gen_range(1..=100);
// 1..=100 : 1以上100以下の間


# Page. 28

![Page Image](https://bcdn.docswell.com/page/D7Y2891Y7M.jpg)

入力を受け取る
ここから先は、 loop{} 内に書いていきます！
io:stdin() で標準入力を受け取ることができます。
受け取った値を、変数に入れます。
loop {
// ループ開始
println!(&quot;Please input your guess.&quot;);
let mut guess = String::new();
// 空文字を変数 guess へ
io::stdin()
.read_line(&amp;mut guess) // 成功時の処理
.expect(&quot;Failed to read line&quot;); // 失敗時の処理


# Page. 29

![Page Image](https://bcdn.docswell.com/page/VEN8QL2RJ8.jpg)

文字列型 → 数字型に変換
文字列で受け取っているので、このままでは数字の比較ができません！
そこで、数字の形に変換して、数の大小を比較できるようにします。
let guess: u32 = match guess.trim().parse() {
// 文字列で受け取ったものをu32型に変換
Ok(num) =&gt; num,
// 成功したら、numという変数へ
Err(_) =&gt; continue,
// 失敗したら、次のループへ
};


# Page. 30

![Page Image](https://bcdn.docswell.com/page/Y79KD41Z73.jpg)

ここまで順調そうですか？
必要であれば、お手洗い、水分補給、おやつタイムしましょう！
ストレッチもぜひ！


# Page. 31

![Page Image](https://bcdn.docswell.com/page/G78R3Q3YED.jpg)

ユーザーの入力を確認
&quot;{変数名}&quot;
で、変数の値を含めた文字列にできます
println!(&quot;You guessed: {guess}&quot;);


# Page. 32

![Page Image](https://bcdn.docswell.com/page/L7LKVXV9ER.jpg)

ユーザーの入力を元に結果を比較
答えの数字と比較して、正解か不正解かを判定します。
1. 大きい
2. 小さい
3. 等しい（正解！）


# Page. 33

![Page Image](https://bcdn.docswell.com/page/4EM2GLGVEW.jpg)

それぞれで、表示するメッセージを定義します。
match guess.cmp(&amp;secret_number) {
Ordering::Less =&gt; println!(&quot;Too small!&quot;),
// 正解より小さい時
Ordering::Greater =&gt; println!(&quot;Too big!&quot;),
// 正解より大きい時
Ordering::Equal =&gt; {
println!(&quot;You win!&quot;);
break;
// 正解と等しい時
// ループ終了
}
}


# Page. 34

![Page Image](https://bcdn.docswell.com/page/PERMZKZW79.jpg)

最終的なコード
use rand::Rng;
use std::cmp::Ordering;
use std::io;
fn main() {
println!(&quot;Guess the number!&quot;);
let secret_number = rand::thread_rng().gen_range(1..=100);
loop {
println!(&quot;Please input your guess.&quot;);
let mut guess = String::new();
io::stdin()
.read_line(&amp;mut guess)
.expect(&quot;Failed to read line&quot;);
let guess: u32 = match guess.trim().parse() {
Ok(num) =&gt; num,
Err(_) =&gt; continue,
};
println!(&quot;You guessed: {guess}&quot;);
}
}
match guess.cmp(&amp;secret_number) {
Ordering::Less =&gt; println!(&quot;Too small!&quot;),
Ordering::Greater =&gt; println!(&quot;Too big!&quot;),
Ordering::Equal =&gt; {
println!(&quot;You win!&quot;);
break;
}
}


# Page. 35

![Page Image](https://bcdn.docswell.com/page/P7XV9L9VJX.jpg)

実際に遊んでみましょう〜！
アレンジも Ok！
メッセージを日本語にする
ヒントを与える（あといくつ足せばいい？など）
数字の範囲を小さく（大きく）する


# Page. 36

![Page Image](https://bcdn.docswell.com/page/37KQPLP57D.jpg)

まとめ
今日みなさんができるようになったこと
Rust とはどんな言語か
Rust の開発はどんな流れか
Rust での Hello, World のやり方
パッケージ管理・ビルドツール「cargo」 の使い方
数当てゲームをつくる
「Rust、悪くないかも…？」と思っていただけたら嬉しいです！


# Page. 37

![Page Image](https://bcdn.docswell.com/page/LJ3PX3X175.jpg)

参考文献
Rust 公式：https://www.rust-lang.org/ja
The Rust Book：https://doc.rust-lang.org/book/
ベテランエンジニアも意外と知らない「パッケージ管理システムの仕組み」 #パ
ッケージマネージャー - Qiita
コンセプトから理解する Rust：書籍案内｜技術評論社


# Page. 38

![Page Image](https://bcdn.docswell.com/page/8JDL242K7G.jpg)

アンケートにご協力お願い
します...！


# Page. 39

![Page Image](https://bcdn.docswell.com/page/VEP21M13E8.jpg)

ご参加ありがとうございました！
お疲れ様でした！
またぜひ Rust で一緒に遊びましょう！
RustLadies でお待ちしています！


