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
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
270
Building a Meta Ray-Ban display app
akkeylab
0
110
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
110
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
490
数百円から始めるRuby電子工作
tarosay
0
140
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
150
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
350
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.9k
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
220
メールのエイリアス機能を履き違えない
isshinfunada
0
230
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
200
Featured
See All Featured
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
260
Paper Plane
katiecoart
PRO
2
53k
Leo the Paperboy
mayatellez
8
2.1k
Speed Design
sergeychernyshev
33
2k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
460
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
30 Presentation Tips
portentint
PRO
1
370
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
250
Being A Developer After 40
akosma
91
590k
The Cult of Friendly URLs
andyhume
79
7k
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