Slide 1

Slide 1 text

Rust͜ͱ͸͡Ί CLIπʔϧ࡞੒͔Βcrates.io΁ͷެ։·Ͱ Fukuoka.rs#5 ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹΫϥεϝιουגࣜձࣾ ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹ ɹɹฏ઒ 1

Slide 2

Slide 2 text

About me • Ϋϥεϝιουגࣜձࣾ (Developers.IOͷͱ͜) • ෱ԬΦϑΟεॴଐ • CXࣄۀຊ෦෦ • αʔόʔαΠυΤϯδχΞ • ΍ͬͯΔ͜ͱ • AWSͷΠϯϑϥߏங • ϞόΠϧΞϓϦؔ࿈ͷαʔό։ൃ • ෼ੳ༻σʔλͷऩू/Ճ޻ • IoT (NEW) 2

Slide 3

Slide 3 text

Developers.IO 3

Slide 4

Slide 4 text

ͨ·ʹRustͷϒϩάॻ͍ͯ·͢ 4

Slide 5

Slide 5 text

ΞδΣϯμ • ͳͥRust͔ • Ͳ͏΍ֶͬͯͿ͔ • ԿΛ࡞Δ͔ • ࣮૷ʹ͍ͭͯ • Ͳ͏΍ͬͯެ։͢Δ͔ 5

Slide 6

Slide 6 text

ͳͥRust͔ • ΤίγεςϜ͕ॆ࣮ • cargo • rustup • crates.io • ڧྗͳܕγεςϜ • ϝϞϦ҆શ • ॻָ͍͍ͯͯ͠ 6

Slide 7

Slide 7 text

Ͳ͏΍ֶͬͯͿ͔ • ๛෋ͳΦϯϥΠϯڭࡐΛಡΈړΔ • TRPL (h)ps:/ /doc.rust-lang.org/book/) • Rust by Example (h)ps:/ /doc.rust-lang.org/rust-by-example/) • ࣮ࡍʹॻ͍ͯΈΔ • ΦϯϥΠϯδϟοδܥ • πʔϧ࡞੒ 7

Slide 8

Slide 8 text

ԿΛ࡞Δ͔ • ୯७ͳ΋ͷ→ ίϚϯυϥΠϯπʔϧ • ීஈͷۀ຿Ͱ໾ʹͨͭ΋ͷ • ීஈͷۀ຿Ͱ܁Γฦ͠ߦͬͯΔ࡞ۀ • πʔϧԽͯ͠ۀ຿ޮ཰UP! • UNIXλΠϜελϯϓͷม׵࡞ۀ͕ଟ͍ͳʁ • DBͷ಺༰Λղऍ͢Δ • AWS CLIʹࢦఆ͢Δ 8

Slide 9

Slide 9 text

UNIXλΠϜελϯϓ (ఆٛ) (WikipediaΑΓҾ༻) UNIXΤϙοΫɺ͢ͳΘͪڠఆੈք࣌ (UTC) Ͱͷ1970೥1݄1೔ޕ લ0࣌0෼0ඵ͔Βܗࣜతͳܦաඵ਺ʢ͢ͳΘͪɺ࣮࣭తͳܦաඵ ਺͔Βɺͦͷؒʹૠೖ͞ΕͨӞඵΛҾ͖ɺ࡟আ͞ΕͨӞඵΛՃ͑ ͨ΋ͷʣͱͯ͠ද͞ΕΔɻ 9

Slide 10

Slide 10 text

UNIXλΠϜελϯϓ (ݱ࣮) • ௨ৗ͸ΤϙοΫ͔Βͷܦաඵ਺Λ࢖͏ • DynamoDBͷTTLͱ͔ • ΤϙοΫ͔ΒͷܦաϛϦඵ਺Λ࢖͏͜ͱ΋͋Δ • CloudWatch Logsͷݕࡧظؒͷࢦఆ (--start-9me΍--end-9me) • ΞΫηεස౓͕ߴ͍APIͷ࣮ߦཤྺͳͲ • Ϣʔβ୯ҐͰه࿥͢Δ৔߹ • ඵ਺୯ҐͰه࿥͢Δͱ࣮ߦॱংΛࣝผͰ͖ͳ͍ 10

Slide 11

Slide 11 text

UNIXλΠϜελϯϓม׵ͷྫ 3೔લʙ౰೔ͷޕલ0࣌·Ͱʹൃੜͨ͠ΤϥʔΛର৅ʹݕࡧ͢Δ৔߹ ݕࡧ։࢝೔࣌ʙऴྃ೔࣌ΛܾΊΔ (୯Ґ:ϛϦඵ) START_TS=$(python -c 'from datetime import *; print(int((datetime.today() + timedelta(days=-3)).timestamp()) * 1000)') STOP_TS=$(python -c 'from datetime import *; print(int((datetime.today() + timedelta(days=0)).timestamp()) * 1000)') AWS CLIʹݕࡧύλʔϯ/ݕࡧൣғΛࢦఆ͢Δ aws logs filter-log-events \ --filter-patten 'ERROR' \ --start-time "${START_TS}" \ --end-time "${STOP_TS}" ... 11

Slide 12

Slide 12 text

UNIXλΠϜελϯϓͷม׵ํ๏ • dateίϚϯυΛ࢖͏ • LinuxͱmacOSͰίϚϯυͷॻ͕ࣜҧͬͯࠞཚ͢Δ → ࢖Θͳ͘ͳͬͨ • LLݴޠΛ࢖͏ • ຖճಉ͡Α͏ͳϫϯϥΠφʔॻ͘ → ΊΜͲ͍ • WEBαʔϏεΛ࢖͏ • ϒϥ΢β։͍ͯίϐϖ → ΊΜͲ͍ → πʔϧ࡞੒ͷ୊ࡐʹͪΐ͏Ͳྑ͍ʂ 12

Slide 13

Slide 13 text

πʔϧͷར༻Πϝʔδ 3೔લʙࡢ೔·ͰͷϩάΛݕࡧ͢Δ৔߹ • લ४උͳ͠ • ίϚϯυ࣮ߦ aws logs filter-log-events \ --filter-patten 'ERROR' \ --start-time $(my-cli --base today --delta -3day) \ --end-time $(my-cli --base today) ... 13

Slide 14

Slide 14 text

࣮૷ʹ͍ͭͯ ࣮૷ํ਑ • Ͱ͖Δ͚ͩϥΠϒϥϦʹཔΔ • ଍Γͳ͍ͱ͜Ζ͚ͩࣗ෼Ͱ࣮૷͢Δ ػೳ • ೔࣌ࢦఆ → UNIXλΠϜελϯϓ • UNIXλΠϜελϯϓ → ೔࣌දه 14

Slide 15

Slide 15 text

ॲཧ֓ཁ • ίϚϯυϥΠϯҾ਺ղੳ • ೔࣌σʔλΛੜ੒ • ೔࣌ͷࠩ෼Λద༻ ($medeltaతͳ) • ݁Ռग़ྗ 15

Slide 16

Slide 16 text

ॲཧ֓ཁͱϥΠϒϥϦͷରԠ • ίϚϯυϥΠϯҾ਺ղੳ → clap-rs • ೔࣌σʔλੜ੒ → chrono • ೔࣌ͷࠩ෼Λద༻ (/medeltaతͳ) → ֘౰ͳ͠ • ݁Ռग़ྗ → ඪ४ग़ྗɺϥΠϒϥϦෆཁ 16

Slide 17

Slide 17 text

ίϚϯυϥΠϯҾ਺ղੳ (clap-rs) 17

Slide 18

Slide 18 text

೔࣌σʔλੜ੒ (chrono) h"ps:/ /github.com/chronotope/chrono READMEΑΓҾ༻ use chrono::prelude::*; let utc: DateTime = Utc::now(); // e.g. `2014-11-28T12:45:59.324310806Z` let local: DateTime = Local::now(); // e.g. `2014-11-28T21:45:59.324310806+09:00` use chrono::prelude::*; use chrono::offset::LocalResult; let dt = Utc.ymd(2014, 7, 8).and_hms(9, 10, 11); // `2014-07-08T09:10:11Z` // July 8 is 188th day of the year 2014 (`o` for "ordinal") assert_eq!(dt, Utc.yo(2014, 189).and_hms(9, 10, 11)); // July 8 is Tuesday in ISO week 28 of the year 2014. assert_eq!(dt, Utc.isoywd(2014, 28, Weekday::Tue).and_hms(9, 10, 11)); 18

Slide 19

Slide 19 text

enumͷػೳ֦ு (strum) h"ps:/ /github.com/Peternator7/strum READMEΑΓҾ༻ // You need to bring the type into scope to use it!!! use strum::IntoEnumIterator; #[derive(EnumIter,Debug)] enum Color { Red, Green { range:usize }, Blue(usize), Yellow, } // It's simple to iterate over the variants of an enum. fn debug_colors() { for color in Color::iter() { println!("My favorite color is {:?}", color); } } 19

Slide 20

Slide 20 text

࣮૷ͯ͠Έͨ h"ps:/ /github.com/yoshihitoh/ut-cli $ tokei ------------------------------------------------------------------------------- Language Files Lines Code Comments Blanks ------------------------------------------------------------------------------- BASH 2 43 30 2 11 Markdown 1 177 177 0 0 Rust 25 2757 2312 35 410 TOML 1 26 24 0 2 ------------------------------------------------------------------------------- Total 29 3003 2543 37 423 ------------------------------------------------------------------------------- 20

Slide 21

Slide 21 text

ࢼͯ͠ΈΔ ೔࣌දه → UNIXλΠϜελϯϓ 3೔લʙ౰೔·Ͱ $ ut generate --base today --delta -3day 1567954800 $ ut generate --base today --delta -0day 1568214000 ࢦఆͨ͠೔࣌ $ ut generate --ymd 20190913 --hms 123456 1568345696 21

Slide 22

Slide 22 text

ࢼͯ͠ΈΔ UNIXλΠϜελϯϓ → ೔࣌දه $ ut parse $(ut generate --ymd 20190913 --hms 123456) 2019-09-13 12:34:56 (+09:00) # ଞͷίϚϯυͱൺֱ $ date -r $(ut generate --ymd 20190913 --hms 123456) 2019೥ 9݄13೔ ༵ۚ೔ 12࣌34෼56ඵ JST 22

Slide 23

Slide 23 text

ଞͷίϚϯυϥΠϯͱ࿈ಈͤ͞Δ aws logs filter-log-events \ --filter-pa1en 'ERROR' \ --start-6me $(ut -p ms generate --base today --delta -3day) \ --end-6me $(ut -p ms generate --base today) ... 23

Slide 24

Slide 24 text

Ͳ͏΍ͬͯެ։͢Δ͔ ެࣜΨΠυ΍ϒϩάهࣄΛࢀߟʹcrates.ioʹެ։͢Δ - Publishing on crates.io | The Cargo Book - RustͷύοέʔδΛcrates.ioʹొ࿥͢Δ | κeenͷHappy Hacκing Blog 24

Slide 25

Slide 25 text

ެ։લͷ४උ 1. Cargo.tomlʹஶऀ/ϦϙδτϦͷ৘ใΛ௥ه 2. README࡞੒ (MarkdownܗࣜͰOK) 3. crates.ioͷΞΧ΢ϯτొ࿥ 4. cargo login ͰAPIΩʔΛઃఆ 25

Slide 26

Slide 26 text

ެ։ 1. cargo package 2. cargo publish ͜Ε͚ͩʂΊͬͪΌ؆୯ 26

Slide 27

Slide 27 text

·ͱΊ • ࣮ࡍʹॻ͍ͯΈΔͱֶͼ͕ଟ͍ • ΤϥʔϋϯυϦϯά • ੩తσΟεύονɾಈతσΟεύον͋ͨΓ • ศརͳϥΠϒϥϦ͕ଟ͍ • cargoΊͬͪΌศར • Ϗϧυઃఆͳ͠Ͱ͍͚Δ͜ͱ͕ଟ͍ • ؆୯ʹcrates.ioʹެ։Ͱ͖Δ 27

Slide 28

Slide 28 text

͓͠·͍ 28