Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rustは厳しいが役に立つ Part3「Rustでデータべース(MongoDB編)」
Search
NearMeの技術発表資料です
PRO
September 30, 2022
Programming
0
640
Rustは厳しいが役に立つ Part3「Rustでデータべース(MongoDB編)」
NearMeの技術発表資料です
PRO
September 30, 2022
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
Tile38 Overview
nearme_tech
PRO
0
35
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
210
実践で使えるtorchのテンソル演算
nearme_tech
PRO
0
21
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
440
初めてのmarimo (ハンズオン)
nearme_tech
PRO
0
34
ローカルLLM
nearme_tech
PRO
0
55
LlamaIndex Workflow: Build Practical AI Agents Fast
nearme_tech
PRO
0
34
Box-Muller法
nearme_tech
PRO
1
55
Kiro触ってみた
nearme_tech
PRO
0
410
Other Decks in Programming
See All in Programming
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
480
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
460
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
230
AI巻き込み型コードレビューのススメ
nealle
2
1.4k
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
230
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
CSC307 Lecture 08
javiergs
PRO
0
670
Fluid Templating in TYPO3 14
s2b
0
130
Data-Centric Kaggle
isax1015
2
780
Featured
See All Featured
From π to Pie charts
rasagy
0
130
The SEO identity crisis: Don't let AI make you average
varn
0
330
GraphQLとの向き合い方2022年版
quramy
50
14k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.7k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
Fireside Chat
paigeccino
41
3.8k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
170
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
200
Transcript
0 Rustは厳しいが役に立つ Part3「Rustでデータべース(MongoDB編)」 2022-09-30 第15回NearMe技術勉強会 Kaito Asahi
1 目次 RustとMongoDB MongoDBについて ハンズオン!! 実際に簡単なアプリケーションをつくります
2 MongoDBとは? • Build faster. Build smarter. → 迅速そして賢いデータベースの構築 →
シャーディング、インメモリでの処理、レプリカセット • JSONライクにデータを扱っている • さまざまなユースケースがある(https://www.mongodb.com/ja-jp/use-cases) • データベース言語「SQL」を使えない ※次回以降で、MySQLについても扱います。 出典:https://www.mongodb.com/
3 ハンズオンのために 以下の作業をおこなってください。 (1) 必須 • Rust環境の構築(https://www.rust-lang.org/ja/tools/install) • MongoDBのインストール (https://www.mongodb.com/docs/manual/installation/)
(2) 任意 • Mongo Compassのインストール(GUIでデータベースを確認できる) (https://www.mongodb.com/try/download/compass)
4 データのインサート (0) 準備 src/bin/insert.rsを作成し、以下を追加してください。 use mongodb::{ bson::{doc, oid::ObjectId}, options::ClientOptions,
Client, }; use serde::{Deserialize, Serialize};
5 データのインサート (1) データベースクライアントを作成する main関数内に、以下の2つの変数を宣言する。 ※parseメソッドの引数は、一応各デバイスで確認してください。 ※基本のport番号は27017です。 let client_options =
ClientOptions::parse("mongodb://localhost:27017").await?; let client = Client::with_options(client_options)?;
6 データのインサート (2) データベースを作成し、コレクションを作成 main関数内に、以下の2つの変数を追加する。 let db = client.database("test_pokemon"); let
collection = db.collection::<Pokemon>("pokemons");
7 データのインサート (3) データの準備 3-1. main関数の外にPokemon構造体を作成する #[derive(Serialize, Deserialize)] struct Pokemon
{ #[serde(rename = "_id", skip_serializing)] id: Option<ObjectId>, name: String, where_from: String, }
8 データのインサート (3) データの準備 3-2. main関数内にポケモンのデータのサンプルを追加する。 let pokemons = vec![
Pokemon { id: None, name: "Bulbasaur".to_string(), where_from: "Kanto".to_string(), }, … ];
9 データのインサート (4) pokemonsドキュメントにデータを挿入する main関数内に、以下を追加する。 ※Ok(())は、main関数でResultを返すために置いてあります。 collection.insert_many(pokemons, None).await?; Ok(())
10 データのインサート (5) Mongo Compassで確認
11 データの検索 (0) 準備 src/bin/search.rsを作成し、以下を追加してください。 use futures::stream::TryStreamExt; use mongodb::{ bson::{doc,
oid::ObjectId}, options::{ClientOptions, FindOptions}, Client, }; use serde::{Deserialize, Serialize};
12 データの検索 (1) フィルターを作成する 先程のcollection変数の部分までは同じで、以下のようにフィルターを作成。 → ここでは、Venusaur(フシギバナ)を検索しています。 → sortは、”where_from”で逆順(-1)にしている。 let
filter = doc! {"name": "Venusaur"}; let find_options = FindOptions::builder().sort(doc! {"where_from": -1}).build();
13 データの検索 (2) フィルターをつけて検索する 先程のcollection変数の部分までは同じで、以下のようにフィルターを作成する。 ※awaitを用いて、検索が終了するまで、後に現れる検索結果の表示を行わないよ うにしています。 let mut cursor
= collection.find(filter, find_options).await?;
14 データの検索 (3) 検索結果の表示 検索して、データがあればそれを報告する。 while let Some(pokemon) = cursor.try_next().await?
{ if let name = pokemon.name { println!("name: {}, where from: {}", name, pokemon.where_from); } }
15 (おまけ)Pokeapiを用いて、全てのポケモンを取得しました 別途結果をお見せいたします。
16 参考リンクまとめ 1. MongoDB:https://www.mongodb.com/ 2. MongoDB Compass:https://www.mongodb.com/try/download/compass 3. Rust:https://www.rust-lang.org/ja/tools/install 4.
Rustでのデータベース作成について ・https://zenn.dev/kyoheiu/articles/c3b6b6f156e57a ・https://zenn.dev/tfutada/articles/e5bf173edd541b 5. Pokeapi:https://pokeapi.co/ 6. Rustでapiを叩く:https://qiita.com/odayushin/items/0e2a5a3d047e6b08c811
17 余談 Rustに関する本で、Webアプリに特化したものが出るらしいので、 速攻購入してブラッシュアップしていきたいです... https://www.shuwasystem.co.jp/book/9784798067315.html
18 Thank you