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
CLI Tool開発のためのRust
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
niboshi
March 01, 2017
Programming
1.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CLI Tool開発のためのRust
2017/03/01 "RustのLT会! Rust入門者の集い #2"で使った資料です。
niboshi
March 01, 2017
Other Decks in Programming
See All in Programming
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
250
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
130
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
220
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
380
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
14
6k
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.5k
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.5k
Creating Composable Callables in Contemporary C++
rollbear
0
180
TAKTでAI駆動開発の品質を設計する
j5ik2o
7
1.6k
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.5k
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
150
JavaDoc 再入門
nagise
1
430
Featured
See All Featured
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
380
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Making Projects Easy
brettharned
120
6.7k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
170
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
The Invisible Side of Design
smashingmag
301
52k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
550
The SEO identity crisis: Don't let AI make you average
varn
0
510
Designing Powerful Visuals for Engaging Learning
tmiket
1
430
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
450
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Transcript
CLI Tool։ൃͷͨΊͷ Rust ʹ΅͠(@mpppk)
Rustೖऀͷू͍(૾) ͢͝ʔ͍ MFUzϨοτzͬͯ ಡΉΜͩΑ ͳΔ΄Ͳ ʔ
Rustೖऀͷू͍(ݱ࣮)
େมͳͱ͜Ζʹདྷͯ͠·ͬͨ (ݫ͍͠ϚαΧϦ͓ئ͍͠·͢ʂ)
ʹ΅͠(@mpppk)
mpppk/skylarq • yamlͰॻ͍ͨ༰ʹ ैͬͯɺϑΝϛϨεͷ Ξϯέʔτʹࣗಈճ ͯ͠ΫʔϙϯΛ͏ CLI Tool(Node.js)
RustͰCLI Tool࡞Γ͍ͨ
RustΛ࢝ΊΔࡍͷ (ͨͿΜ)ҰൠతͳϞνϕʔγϣϯ • ϝϞϦ҆શ • ϦΞϧλΠϜੑ • ϨΠϠʔ৮ΕΔ • WebAssembly
γϡοͱCLI࡞Γ͍ͨͱ͖ʹ Rustྑ͍ͷͰઆ • ΫϩείϯύΠϧ • όΠφϦ1ͭͰಈ࡞ • ϨΠϠʔ৮ΕΔ • Ϧονͳจ๏(iterator,
pattern match, etc…) • ඞཁेͳϥΠϒϥϦ
ྫ͑ jqΫϩʔϯΛ࡞Δͱ͢Δͱ • ඞཁͳͷ • serializer/deserializer • option parser •
query parser
Serialiser / Deserialiser
serializer/deserializer ͷબࢶ • Serde(˒674) • rustc-serialize(˒166) • ࠓޙSerdeʹஔ͖Θ͍ͬͯ͘Β͍͠
Serde • γϦΞϥΠζ/σγϦΞϥΠζͷͨΊͷFW • ҙͷstructʹରͯ͠derive attributeͰ Serialize/Deserialize Trait͕࣮͞ΕΔ • ࣗલͰTraitΛ࣮͢Δ͜ͱͰ֦ுՄೳ
Serde Example: serde_json
SerdeରԠࡁϑΥʔϚοτ
Option Parser
Option parserͷબࢶ • clap-rs(˒947) • ࡉ੍͔͍ޚ͕Մೳ • getopts(˒49) • Rustެࣜ
• ϛχϚϧͳ༷ • docopt.rs(˒452) • cargo͕࠾༻ • ϔϧϓϝοηʔδ͔ΒࣗಈͰparser͕ੜ͞ΕΔ
clap-rs (Option parser) • Builder PatternͰίϚϯυϥΠϯҾΛఆٛ
clap-rs (Option parser) • --help--version͕উखʹ࣮͞ΕΔ
Query Parser
query parserͷબࢶ • nikomatsakis/lalrpop(˒371) • ಠࣗߏจ • Ұ෦ͷsyntax͕௨Βͳ͍ͳͲɺ·ͩൃలத • kevinmehall/rust-peg(˒342)
• ಠࣗߏจ • Geal/nom(˒1212) • parser combinator • byte୯ҐͰͷॲཧ͕Մೳ • RustͷϚΫϩͱͯ͠ఆ͍ٛͯ͘͠
lalrpop (query parser) • parser generator + α • ୯ͳΔߏจͷߏங͚ͩͰͳ͘
۩ମతͳॲཧ༰ҰॹʹఆٛͰ͖Δ
mpppk/aq • ͱΓ͋͑ͣ.fooͷύʔεΛ Ͱ͖ΔΑ͏ʹ͚ͨͩ͠ • ͍ΖΜͳϑΥʔϚοτʹରԠͰ͖Δͱ ศརͦ͏
·ͱΊ • CLI͋Μ·ؔͳ͔ͬͨ • ཉ͍͠ͱࢥͬͨϥΠϒϥϦ͍͍ͩͨ͋Δײ͡ • Rustͷײ • Pattern matchॆ࣮ͨ͠IteratorͷAdapter/Consumer
͕͋ͬͯॻָ͍͍ͯͯ͠ • ͱʹ͔͘ίϯύΠϧ͕௨Βͳ͍ • ϝιουʹΓग़͚ͨͩ͠ͰΤϥʔ • ͱΓ͋͑ͣclone()࿈ଧ… • ࠓ·Ͱҙࣝͯ͠ͳ͔ͬͨΦʔόϔουΛҙࣝͤ͟ΔΛ ಘͳͯ͘ྑ͍ͷ͔
͓ΘΓ