Slide 1

Slide 1 text

Swi!Ͱॻ͍ͨCLIπʔϧΛRustͰ ॻ͖௚͠·ͨ͠ RustͷLTձʂ Rustೖ໳ऀͷू͍ #5 Sep 5, 2018 Toshihiro Suzuki © Toshihiro Suzuki 2018 1

Slide 2

Slide 2 text

whoami ླ໦ ढ़༟ (@toshi0383 / τογʔ) 2011- SRAͱ͍͏ձࣾ UnixͰJava 2014- ωΫετεέʔϓͱ͍͏ձࣾͰiOSσϏϡʔ, DRMΤʔδΣϯτSDK΋ͪΐͬͱ͚ͩܦݧ. 2017- AbemaTV join. iOSDCͰLTͨ͠ΓɺtvOSΞυϕϯτΧϨϯμʔओ࠵ͨ͠Γ. 2018- ಈըμ΢ϯϩʔυػೳΛ࣮૷. ݱࡏ͸ετϦʔϛϯάΫϥΠΞϯτνʔϜͰಈըࢹௌମݧ޲্ ศརͳπʔϧΛ࡞ͬͯ։ൃΛޮ཰Խ͢Δͷ͕झຯ ϨʔγϯάΧʔτܦݧऀ, GT SPORT, F1 Rustྺ1ϲ݄͘Β͍ (ॳ৺ऀͰ͢ʂ) © Toshihiro Suzuki 2018 2

Slide 3

Slide 3 text

Swi!Ͱॻ͍͍ͯͨπʔϧ cmdshelf © Toshihiro Suzuki 2018 3

Slide 4

Slide 4 text

cmdshelfͱ͸ εΫϦϓτϚωʔδϟʔ, ίϚϯυϥϯφʔ — scriptΛஔ͍ͨgit repoΛremoteͱͯ͠ొ࿥ — cmdshelf run hoge/bar.sh ͱ࣮ͯ͠ߦͰ͖Δ — $PATH ͷઃఆ͕ෆཁ σΟϨΫτϦͰωʔϜεϖʔεΛ੾ΕΔ — iOS/tvOSνʔϜؒͷڞ௨scriptӡ༻͕՝୊ͩͬͨ © Toshihiro Suzuki 2018 4

Slide 5

Slide 5 text

ઌि·ͰSwi! (ͱC) Ͱ͕ͨ͠.. © Toshihiro Suzuki 2018 5

Slide 6

Slide 6 text

RustʹແࣄҠߦ׬ྃ͠·ͨ͠ ! © Toshihiro Suzuki 2018 6

Slide 7

Slide 7 text

ͳͥRustʹҠߦͨ͠ͷ͔ ʮͦΕͳΓʹStar ⭐ ΋͍͖ͭͯͨ͠ɺͦΖͦΖͪΌΜͱcross- platformରԠ͍ͨ͠ͳʔʯ — Swiftͩͱ΄΅AppleΤίγεςϜͰ͔͠ಈ͔ͳ͍ɻ — Swift͸ΤίγεςϜతʹCLIπʔϧॻ͘ͷʹ޲͍ͯͳ͍ؾ͕ ͖ͯͨ͠ɻ(ޙड़) ݸਓతʹΑ͘࢖͍ͬͯΔ sharkdp/fd ͕RustͰॻ͔Ε͍ͯͯɺ લ͔ΒRust࢖ͬͯΈ͍ͨͱࢥ͍ͬͯͨɻ © Toshihiro Suzuki 2018 7

Slide 8

Slide 8 text

࣮ࡍʹRustͰॻ͍ͯΈͯΑ͔ͬͨ ͱ͜Ζ © Toshihiro Suzuki 2018 8

Slide 9

Slide 9 text

(ୈҰҹ৅) Cargo.toml؆ܿͰྑͦ͞͏ɻ Package.swift, build.gradle, Fastfile ͳͲɺߴػೳͳઃఆ ϑΝΠϧʹ͸ίʔυΛॻ͍ͯ͠·͍ෳࡶԽ͕ͪ͠ɻ ͦΕ͕Ͱ͖ͳ͍ͷ͕ྑͦ͞͏ɻ > Why cargo use toml? > It's basically the least terrible option © Toshihiro Suzuki 2018 9

Slide 10

Slide 10 text

֎෦ίϚϯυ࣮ߦͷ࣮૷͕͠΍͍͢ ίϚϯυ࣮ߦ͸ cmdshelf ʹͱͬͯ͸৺ଁ෦෼ std::process::Command let output = if cfg!(target_os = "windows") { Command::new("cmd") .args(&["/C", command]) .output() } else { Command::new("sh") .arg("-c") .arg(command) .output() }; © Toshihiro Suzuki 2018 10

Slide 11

Slide 11 text

Swi!ͩͱ࣮͸͜ͷล͕Ұ൪ͭΒ͍ Foundation͔ΒPOSIXܥͷAPI͕͍ͭͷؒʹ͔Ұ෦remove͞ Ε͍ͯͨࣄ݅ɻFoundation.ProcessΛ࢖͑ͱͷ͜ͱɻ Foundation.Process͸ΠϯλʔϑΣʔε͕Θ͔ΓͮΒ͘ඪ४ ೖग़ྗͷڍಈΛҙਤ௨Γ࣮૷Ͱ͖ͣɺ݁ہpopen΍pcloseΛC Ͱ࠶࣮૷ ! © Toshihiro Suzuki 2018 11

Slide 12

Slide 12 text

CLIϫʔΩϯάάϧʔϓ ! ࠓ೥(2018)3݄ʹΩοΫΦϑ Announcing the CLI Working Group "Command Line Application in Rust" (CLAIR) book! (WIP) CLIπʔϧ࣮૷ͷΨΠυϥΠϯ΍υΩϡϝϯτ͕ࡦఆ͞Ε͍ͯ Δɻ ࠓޙͷൃలʹظ଴͕࣋ͯͦ͏ɻ © Toshihiro Suzuki 2018 12

Slide 13

Slide 13 text

CLI Dev UX͕ྑͦ͞͏ © Toshihiro Suzuki 2018 13

Slide 14

Slide 14 text

CLIπʔϧ։ൃऀ໨ઢͰͷSwi!ͱͷൺֱ(׬શʹओ؍) ػೳ Swi! Rust ։ൃ؀ڥ Xcode, vim vim ύοέʔδ؅ཧ SwiftPM Cargo ύοέʔδఆٛ Package.swift Cargo.toml ઃఆϑΝΠϧ yml toml(?) ύοέʔδϚωʔδϟͷman ϖʔδαϙʔτ ͳ͍͢͠Δؾ΋ͳͦ͞͏ ͳ͍͚Ͳrfcͱͯٞ͠࿦͞Εͯ ͍Δ ֎෦ίϚϯυ࣮ߦ Foundation.Process or ඇਪ ঑ͳPOSIX API(ڪා) std::process::Command © Toshihiro Suzuki 2018 14

Slide 15

Slide 15 text

࣮૷ͰϋϚͬͨͱ͜Ζ © Toshihiro Suzuki 2018 15

Slide 16

Slide 16 text

τϨΠτΦϒδΣΫτฦͤ·ͤΜ໰୊ — impl Runnable ฦͤ·ͤΜʂ — Box ͳΜͩ͜Ε © Toshihiro Suzuki 2018 16

Slide 17

Slide 17 text

String ͷlifetime parameter? pub struct CommandEntry<'a> { pub remote: &'a str, pub fullpath: String, pub path: &'a str, // fullpathͷҰ෦ } ॳظԽ࣌ʹ fullpath ͱ path ͷੜଘظؒΛඥ͚ͮΔ͜ͱ͕Ͱ ͖ͣίϯύΠϧ௨Βͣ ! © Toshihiro Suzuki 2018 17

Slide 18

Slide 18 text

String ͷlifetime parameter? ຖճܭࢉͤͯ͞ճආ pub struct CommandEntry<'a> { pub remote: &'a str, pub fullpath: String, } impl<'a> CommandEntry<'a> { pub fn path(&self) -> &str { ... } } ͍͍ํ๏͋Ε͹ͥͻڭ͍͑ͯͩ͘͞ © Toshihiro Suzuki 2018 18

Slide 19

Slide 19 text

٤ۓͷ՝୊ © Toshihiro Suzuki 2018 19

Slide 20

Slide 20 text

٤ۓͷ՝୊ ΫϩεϓϥοτϑΥʔϜରԠ © Toshihiro Suzuki 2018 20

Slide 21

Slide 21 text

٤ۓͷ՝୊ ΫϩεϓϥοτϑΥʔϜରԠ Windows࣋ͬͯͳ͍͠ɺmacOSҎ֎΄ͱΜͲ৮ͬͨ͜ͱͳ ͍ɻ Έͳ͞ΜͲ͏ͯ͠Δͷʁ © Toshihiro Suzuki 2018 21

Slide 22

Slide 22 text

ಉٙ͡໰Λ͍࣋ͬͯΔਓ͕ͨ·ͨ·CLI-WGͷGi!erͰ࣭໰͠ ͯͨ © Toshihiro Suzuki 2018 22

Slide 23

Slide 23 text

CLI-WGతʹ͸ͪ͜ΒͰٞ࿦͞Ε͍ͯΔ໛༷ɻ - rust-lang-nursery/cli-wg#8 ͱΓ͋͑ͣ japaric/trust Ͱ֤ϓϥοτϑΥʔϜ޲͚ͷόΠφ Ϧ͸࡞Εͦ͏ʁ © Toshihiro Suzuki 2018 23

Slide 24

Slide 24 text

഑෍Ҏલʹ ϑΝΠϧύε۠੾จࣈͷߟྀ๨Εͯͨ path.split("/") => ࡢ೔ରԠ͠·ͨ͠ɻ ଞʹ΋͍Ζ͍ΖରԠඞཁͳͷ͔΋ɻ © Toshihiro Suzuki 2018 24

Slide 25

Slide 25 text

summary — Rust͸CLIπʔϧͷDev UX͕ྑͦ͞͏ɻ — ൃද·ͰʹҠߦؒʹ߹ͬͯΑ͔ͬͨɻ — ϓϧϦΫ׻ܴɻಛʹɺ৽ϩΰඳ͍ͯ͘ΕΔਓืू © Toshihiro Suzuki 2018 25

Slide 26

Slide 26 text

Toshihiro Suzuki ! Twitter: @toshi0383 GitHub: @toshi0383 Qiita: @toshi0383 Email: [email protected] © Toshihiro Suzuki 2018 26