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
TUI App in Rust
Search
Yoshihito
October 22, 2020
Programming
220
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TUI App in Rust
Yoshihito
October 22, 2020
More Decks by Yoshihito
See All by Yoshihito
Custom Runtime Lambda empowered by Rust
yoshihitoh
0
3.2k
Rust tutorial - implement a cli tool.
yoshihitoh
0
280
introduce-rust.pdf
yoshihitoh
2
550
regrowth2018-introduce-reinvent-sessions
yoshihitoh
0
1.1k
mobilemethod-2-about-analytic-data.pdf
yoshihitoh
0
1.3k
cpp-library-on-browse-nodejs
yoshihitoh
0
2.8k
Other Decks in Programming
See All in Programming
1B+ /day規模のログを管理する技術
broadleaf
0
120
Contextとはなにか
chiroruxx
1
380
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
280
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
160
Vite+ Unified Toolchain for the Web
naokihaba
0
410
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
230
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
290
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.1k
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.5k
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
1k
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
380
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
500
Code Review Best Practice
trishagee
74
20k
The SEO identity crisis: Don't let AI make you average
varn
0
510
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
Technical Leadership for Architectural Decision Making
baasie
3
430
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
The SEO Collaboration Effect
kristinabergwall1
1
500
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Utilizing Notion as your number one productivity tool
mfonobong
4
330
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Transcript
RustͰ࡞ΔTUIΞϓϦέʔγϣϯ Fukuoka.rs#7 ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹΫϥεϝιουגࣜձࣾ ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹ ɹɹฏ 1
About me • Ϋϥεϝιουגࣜձࣾ (Developers.IOͷͱ͜) • ԬΦϑΟεॴଐ • CXࣄۀຊ෦ •
αʔόʔαΠυΤϯδχΞ • ͬͯΔ͜ͱ • AWSڥʹγεςϜߏங • ϞόΠϧΞϓϦ • IoT 2
ΞδΣϯμ • എܠ • TUIΞϓϦέʔγϣϯͱʁ • RustͰͲ͏࡞Δ͔ • ·ͱΊ 3
എܠ • AWS্ʹγεςϜΛߏங͍ͯ͠ΔͱɺCloudWatch Logsͷ͓ੈʹͳΔ͜ͱ͕ଟ͍ • Ϛωδϝϯτίϯιʔϧ͔ΒϩάΛ֬ೝͰ͖Δ͕ຖճϒϥβΛ։͘ͷ໘͍͘͞ • λʔϛφϧ͔Β֬ೝ͍͕ͨ͠ɺAWS CLIࢦఆ߲͕ଟ݅͘Λม͑ͳ͕ΒݟΔ߹গ͠໘ ͍͘͞
• ϩάάϧʔϓͷࢦఆ • ϩάετϦʔϜͷࢦఆ • ରظؒͷࢦఆ ͜ͷ͋ͨΓͷ݅Λ؆୯ʹࢦఆͰ͖ΔΑ͏ʹ͍ͨ͠ 4
ͦ͜ͰTUIΞϓϦέʔγϣϯ 5
TUIΞϓϦέʔγϣϯͱ • Text-based user interfaces • Terminal user interfacesͱݺΕΔΈ͍ͨ •
ࢀߟ: Text-based user interface | Wikipedia • CLIίϚϯυϥΠϯͰૢ࡞͢Δ • GUIΞΠίϯը૾ͱ͍ͬͨάϥϑΟΧϧͳUIͰૢ࡞͢Δ • TUI໊લͷ௨ΓɺςΩετϕʔεͷUIͰૢ࡞͢Δ 6
GDB (TUIϞʔυ) • ιʔείʔυ • ϒϨʔΫϙΠϯτ • step/nextͰιʔείʔυͷද͕ࣔมΘ Δ 7
Tig ը૾tui-rsͷϦϙδτϦΛදࣔͨ͠ͷ 8
bo#om 9
TUIΞϓϦέʔγϣϯͷߏཁૉ • λʔϛφϧ੍ޚ • Πϕϯτ੍ޚ • ΞϓϦέʔγϣϯϩδοΫ • UIඳը 10
λʔϛφϧ੍ޚ • TUIλʔϛφϧը໘શҬʹඳը͢Δ • ΞϓϦىಈ·Ͱͷදࣔ༰͕ফ͑ͳ͍Α͏ʹ͍ͨ͠ • Alternate ScreenΛ͏ • ඪ४ೖྗEnterΛԡ͢ͱೖྗ͕֬ఆ͢Δ
• TUIͰΠϯλϥΫςΟϒʹૢ࡞͍ͨ͠߹ඍົ • rawϞʔυʹΓସ͑Δ • ීஈcookedϞʔυ 11
Πϕϯτ੍ޚ • TickΠϕϯτ • ҰఆִؒͰൃੜ͢ΔΠϕϯτ • σʔλͷߋ৽ը໘ͷඳըͰར༻͢Δ • ೖྗΠϕϯτ •
ϚεೖྗΩʔೖྗͰൃੜ͢ΔΠϕϯτ • ը໘ΛΓସ͑ͨΓɺԿ͔͠ΒͷػೳΛ࣮ߦ͢Δͷʹར༻͢Δ 12
ΞϓϦέʔγϣϯϩδοΫ • ΞϓϦέʔγϣϯݻ༗ͷϩδοΫ • "gͷ߹GitΛૢ࡞͢Δ • bo)omͷ߹γεςϜϓϩηεͷঢ়ଶΛऔಘ͢Δ 13
UIඳը • ΞϓϦέʔγϣϯϩδοΫͰऩूͨ͠σʔλΛඳը͢Δ • GUIͱҧͬͯλʔϛφϧ্ʹදࣔ͢Δ • ςΩετϕʔε͕ͩ࠷ۙϦονͳදࣔ૿͍͑ͯΔ 14
RustͰͲ͏࡞Δ͔ 15
λʔϛφϧ੍ޚ • ৭ʑͳϥΠϒϥϦ͕༻ҙ͞Ε͍ͯΔ • termion • h*ps:/ /github.com/redox-os/termion • crossterm
• h*ps:/ /github.com/crossterm-rs/crossterm Windowsαϙʔτ͍ͨ͠߹crosstermΛ͏͜ͱ͕ଟͦ͏ • Using cossterm for windows support. by TimonPost · Pull Request #99 · Rigellute/spo?fy- tui 16
λʔϛφϧ੍ޚ: crosstermͷ߹ 17
λʔϛφϧ੍ޚ: crosstermͷ߹ 18
Πϕϯτఆٛ ֤ΠϕϯτΛఆٛ͢Δ 19
TickΠϕϯτ - ඪ४ϥΠϒϥϦͰ࣮ݱ͢Δ • std::sync::mpsc Ͱ௨৴༻νϟωϧΛ࡞Δ • std::thread ͰTickΠϕϯτ༻ͷεϨουΛ࡞Δ •
(νϟωϧʹTickΠϕϯτૹ৴ → εϦʔϓ) Λ܁Γฦ͢ 20
TickΠϕϯτ - ΫϨʔτΛར༻͢Δ • crossbeam-channelͷ tick Λ͏ • ytop͕͜ͷํࣜ •
tokioͷ interval Λ͏ • ͜ͷํࣜݟͨΒͣ 21
TickΠϕϯτ - tokioͷ߹ 22
ೖྗΠϕϯτ λʔϛφϧ੍ޚͷϥΠϒϥϦΛ࣮ͬͯݱ͢Δ • termion • termion::input::TermRead Λ͏ • std::io::stdin().keys() ͰΩʔೖྗΛѻ͑ΔΑ͏ʹͳΔ
• ࢀߟ: h,ps:/ /docs.rs/termion/1.5.5/termion/input/trait.TermRead.html#tymethod.keys • crossterm • crossterm::event::read ͰΩʔೖྗΛಡΈࠐΉ • featuresͰ event-stream Λ༗ޮʹ͢ΔͱΩʔೖྗΛඇಉظετϦʔϜͰѻ͑Δ • ࢀߟ: h,ps:/ /docs.rs/crossterm/0.18.0/crossterm/event/fn.read.html 23
ೖྗΠϕϯτ - crossterm event-streamͷ߹ 24
ΞϓϦέʔγϣϯϩδοΫ • ΞϓϦέʔγϣϯݻ༗ͷϩδοΫΛ࣮͢Δ • ࠓճCloudWatch Logsͷσʔλऔಘ͕ϝΠϯॲཧ • ݱঢ়ެࣜͷAWS SDKͳ͠ •
ඇެ͕ࣜͩ Rusoto Λ͏ͱAWSͷ֤छAPIʹΞΫηεͰ͖Δ • h7ps:/ /github.com/rusoto/rusoto 25
UIඳը Կछྨ͔͋ΔͷͰΈͷͷΛ͏ͱྑͦ͞͏ • tui-rs • h)ps:/ /github.com/fdehau/tui-rs • Cursive •
h)ps:/ /github.com/gyscos/Cursive 26
࡞ͬͨͷ • ະɾະެ։Ͱ͢ 27
࡞ͬͨͷ - ߏ • λʔϛφϧ੍ޚ • crossterm • Πϕϯτ੍ޚ •
TickΠϕϯτ → tokio::time::interval • ೖྗΠϕϯτ → crossterm::event::EventStream • ΞϓϦέʔγϣϯϩδοΫ • CloudWatch LogsपΓ → rusoto_logs • UIඳը • tui-rs 28
ৼΓฦΓ ઌʹͬͱ͚/ͬͯΕΑ͔ͬͨܥͷϊϋ • ඪ४ग़ྗͷϩάग़ྗNG • ϑΝΠϧग़ྗ͢Δ • σόοά༻ͷΟδΣοτΛ࡞͢Δ (Φεεϝ) •
CLion͔Βىಈ/σόοάͰ͖ͳ͍ • rawϞʔυʹΓସ͑ΒΕͳ͍ͨΊ • λʔϛφϧͰىಈ͔ͯ͠ΒϓϩηεʹσόοΨΛΞλον͢Εྑ͍ 29
·ͱΊ • RustͩͱखܰʹTUIΞϓϦέʔγϣϯ࡞ΕΔ • ඞཁͳϥΠϒϥϦ͕ॆ࣮͍ͯ͠Δ • termion • crossterm •
tui-rs • CLI→TUIʹ͢Δͱૢ࡞ָ͕ʹͳΔέʔε͋Γͦ͏ • TUIΞϓϦͳͲπʔϧ࡞Λ௨ͯ͠RustͷཧղΛਂΊ͍͖͍ͯͨ 30
ࢀߟ • Tig • h&ps:/ /github.com/jonas/5g • tui-rs • h&ps:/
/github.com/fdehau/tui-rs • ytop • h&ps:/ /github.com/cjbassi/ytop • bo&om • h&ps:/ /github.com/ClementTsang/bo&om • spo5fy-tui • h&ps:/ /github.com/Rigellute/spo5fy-tui 31
͓͠·͍ 32