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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
The NotImplementedError Problem in Ruby
koic
1
1k
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
230
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
act1-costs.pdf
sumedhbala
0
140
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
320
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
160
Lessons from Spec-Driven Development
simas
PRO
0
230
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
130
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.8k
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
260
Oxcを導入して開発体験が向上した話
yug1224
4
350
Agentic UI
manfredsteyer
PRO
0
210
Featured
See All Featured
Bash Introduction
62gerente
615
220k
Code Reviewing Like a Champion
maltzj
528
40k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
370
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Why Our Code Smells
bkeepers
PRO
340
58k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
380
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
270
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
500
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