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.1k
Rust tutorial - implement a cli tool.
yoshihitoh
0
280
introduce-rust.pdf
yoshihitoh
2
550
regrowth2018-introduce-reinvent-sessions
yoshihitoh
0
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
RTSPクライアントを自作してみた話
simotin13
0
490
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
170
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.5k
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
120
AI駆動開発勉強会 広島支部 第一回勉強会 AI駆動開発概要とワークショップ
hayatoshimiu
0
450
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.5k
Oxlintのカスタムルールの現況
syumai
5
1k
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
110
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
150
Claspは野良GASの夢をみるか
takter00
0
170
Stage 3 Decorators でできること / できないこと / TSKaigi 2026
susisu
1
1.6k
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
550
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
10k
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Unsuck your backbone
ammeep
672
58k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
200
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
160
The Mindset for Success: Future Career Progression
greggifford
PRO
0
350
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
200
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Paper Plane (Part 1)
katiecoart
PRO
0
8.5k
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