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の技術発表資料です
実践で使えるtorchのテンソル演算
nearme_tech
PRO
0
6
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
240
初めてのmarimo (ハンズオン)
nearme_tech
PRO
0
25
ローカルLLM
nearme_tech
PRO
0
45
LlamaIndex Workflow: Build Practical AI Agents Fast
nearme_tech
PRO
0
28
Box-Muller法
nearme_tech
PRO
1
40
Kiro触ってみた
nearme_tech
PRO
0
350
今だからこそ入門する Server-Sent Events (SSE)
nearme_tech
PRO
4
590
ReactNative のアップグレード作業が (意外に)楽しかった話
nearme_tech
PRO
2
140
Other Decks in Programming
See All in Programming
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
150
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
430
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
300
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
0
1.3k
TestingOsaka6_Ozono
o3
0
260
これならできる!個人開発のすゝめ
tinykitten
PRO
0
140
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
700
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.4k
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
440
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
160
2年のAppleウォレットパス開発の振り返り
muno92
PRO
0
180
Implementation Patterns
denyspoltorak
0
140
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Six Lessons from altMBA
skipperchong
29
4.1k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
61
47k
YesSQL, Process and Tooling at Scale
rocio
174
15k
4 Signs Your Business is Dying
shpigford
187
22k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Technical Leadership for Architectural Decision Making
baasie
0
200
My Coaching Mixtape
mlcsv
0
21
We Have a Design System, Now What?
morganepeng
54
8k
First, design no harm
axbom
PRO
1
1.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.4k
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