社内勉強会でCUIについて話す時用の資料
GUI is not fast enough!!Toshikazu Ohashi
View Slide
About me• iRidge No.1 Vimmer(1st among 1people)• My kindle library 6000 over• color schema of this slide is[molokai]
ӳޠ͜͜·Ͱ
ൃදͷલʹ֬ೝͰ͢• օ͞ΜීஈCLIΛͬͯ·͔͢ʁ1.9ׂํCLIΛ৮ͬͯΔ2.ඞཁ͕͋ΕCLIํ͕ͳ͘৮Δ3.CLIͳͲݟͨ͘৮Γͨ͘ͳ͍ɻͿͬͪΌ͚ؾ࣋ͪѱ͍
ΞδΣϯμ• 1. ͳΜͰCLIͳΜͯͬͯΜͷʁϚκͳͷʁ• 2. ࠓ͔ΒͰ͖ΔCLIվળTIPS• 2-1. ڧྗͳγΣϧΛ͓͏• 2-2. ՃίϚϯυ/ϓϥάΠϯͰշదͳࣄΛ• 2-3. ϙʔλϓϧͳڥͰ͍ͭͰύϫϑϧ• 3. ·ͱΊ
• 1. ͳΜͰCLIͳΜͯͬͯΜͷʁϚκͳͷʁ• 2. ࠓ͔ΒͰ͖ΔCLIվળTIPS• 2-1. ڧྗͳγΣϧΛ͓͏• 2-2. ՃίϚϯυ/ϓϥάΠϯͰշదͳࣄΛ• 2-3. ϙʔλϓϧͳڥͰ͍ͭͰύϫϑϧ• 3. ·ͱΊ
ͦͦલఏ͕ҧ͏• GUI୭Ͱ؆୯ʹ͑ΔΑ͏ʹɺϢʔβʹ༩͑ΔબࢶΛͱͯগͳ͘ɺڧྗͳͷʹ͢Δ• CLI(ͱ͍͏͔UNIX)ͦͦॳ৺ऀΛड͚ೖΕΔͭΓͳͲͳ͍ɻʮԿΛ͍ͯ͠Δ͔Θ͔Βͳ͍ͷͳΒɺ͜͜ʹ͍Δ͖Ͱͳ͍ʯ͕ઃܭࢥ
ͳΜͰCLIͳΜͯͬͯΜͷʁ• CLI৭ʑ͍• ىಈ͕͍• Ϩεϙϯε͕͍• શ෦CLIͰΕΓସ͑ͳ͠• GITDBૢ࡞ςετΤσΟοτͯ̍͢ը໘• ڴҖͷ֦ுੑ• GUIͰͰ͖ͯCLIʹͰ͖ͳ͍͜ͱͳ͍
CLIࢥߟΛૢ࡞ʹ݁͢Δ• GUIͳΒ• ૢ࡞͍ͨͬ͠!• ରԠ͢ΔιϑτΣΞΛىಈ͢Δɻ·ͨΟϯυΓସ͑• ϝχϡʔΛ୳͢• ૢ࡞Λ࣮ߦ͢Δ• CLIͳΒ• ૢ࡞͍ͨͬ͠!• ରԠ͢ΔίϚϯυΛ࣮ߦ͢Δ
σϝϦοτ• ֶशίετ͕ߴ͍…ͨͩͻͨ͢Βʹߴ͍• ίϚϯυΛ֮͑ͳ͍ͱԿͰ͖ͳ͍• ઃఆϑΝΠϧ͕ࠇຐज़• shell scriptΛจॻ͘ͱՄಡੑ͕͑Β͍͜ͱʹ• தಟੑ͕ߴ͍• Կނ͔ೋݴʹVimͬͯݴͬͯΔɻφϯσ
Ϛκͳͷʁ
ϋΠ
ಥવͰ͕͢͜͜ͰΫΠζͰ͢
Q.͜ͷࣈͳΜͰ͠ΐ͏͔ʁ2517
A.CLIͷઃఆߦ(2017/09/23࣌)
Ͳ͏ͯ͜͠͏ͳΔ·Ͱ์͓͍ͬͯͨΜͩ• લ৬Excel৬ਓ• GeekͬΆ͍͜ͱΛͨͯ͘͠3ҐCLIΛ͍͡Δ• ͜ͷ࣌ͰઃఆϑΝΠϧʹ+200ίϛοτ• ϑϦʔμϜͳڥͳͷͰCLIͱVimͰࣄ͢Δ• ͜ͷ࣌ͰઃఆϑΝΠϧʹ+200ίϛοτ• ࣾೋපΛ͜͡ΒͤΔ
CLIࣗͷ෦ͷΑ͏ͳͷͰ͋Δ• ๛͔ͳੜ׆ͷͨΊɺࣗવͱՈ۩ͷஔΛߟ͑ͨΓɺศརͳಓ۩ՈిΛἧ͑ͨΓ͢Δͷָ͍ͬͯ͠• CLIಉ͡ɻ๛͔ͳੜ׆ͷͨΊͷΧελϚΠζ• Α͘͏ίϚϯυʹΤΠϦΞεషΔ• ΑΓศརʹ͏ͨΊʹ৽͍͠ϓϥάΠϯπʔϧΛἧ͑Δ
ͪΐͬͱͣͭͰ͍͍• Small is beautiful.(খ͍͞ͷඒ͍͠)• CLIͷ͍͍ͱ͜Ζʑͷͪΐͬͱͨ͠ෆຬΛঃʑʹվળͰ͖Δ͜ͱ• ͨͬͨҰߦͷઃఆ͕ܶతͳվળΛͨΒ͢
·ͣ͜͏͍͏λʔϛφϧͱΦαϥό͠·͠ΐ͏
ZSH• ͭΑ͍Shell• ิ͕ศརʹͳΔ• ϓϥάΠϯʹΑΔΧελϚΠζੑ͕ߴ͍• ࢀߟ[ͷZSH](http://news.mynavi.jp/column/zsh/)
ิ• σϑΥϧτͷิ͕طʹศར• BashͷΑ͏ʹҰҙͰͳͯ͘ิ͢Δ• GitͷαϒίϚϯυϑϥά·Ͱิ͢Δ
DEMO
ώετϦ• ҰଧͪࠐΜͩίϚϯυͳͧೋଧͭͷ͔• ͱʹ͔͘ώετϦΛͨͲΔػೳ͕ͭΑ͍
ϓϩϯϓτ• ϓϩϯϓτΛ͍͡ΔͱͦΕ͚ͩͰޮ্͕͕Δ• ΧϨϯτσΟϨΫτϦͲ͔͜• ݱࡏGitͷϒϥϯνԿ͔• Vim͕όοΫάϥϯυͰಈ͍͍ͯΔ͔
# ݱࡏͷϒϥϯνͳ͓εςʔλεʹΑΓࡾ৭ʹมԽ: staged͋Γԫ: change͋Γ: changeͳ͠εςʔλεදࣔॏ͗ͯͬͨ͢
# VimͷδϣϒόοΫάϥϯυͰVim͕ಈ͍͍ͯͨΒVimͱදࣔ
# Line EditorͷϞʔυVimͱಉ༷ͷૢ࡞͕Ͱ͖ΔΑ͏ʹΧελϚΠζ͍ͯ͠ΔͷͰϞʔυ͕͋ΔࠓͷϞʔυΛ֬ೝͰ͖Δ
# ΧϨϯτσΟϨΫτϦ
͓͠ͳ͕͖• zsh-syntax-highlighting• zsh-autosuggestions• zsh-completions• fzf• enhancd• ghq• tig
zsh-syntax-highlighting• syntax highlight is GOT !!• γϯλοΫε͕ద༻͞ΕΔɻͨͩͦΕ͚ͩ• ͦΕ͚ͩͰޡૢ࡞͕֨ஈʹݮΔ
zsh-autosuggestions• ώετϦ͕ߋʹڧྗʹͳΔ• ώετϦͷ༰ΛࣗಈతʹαδΣετ͢Δ• ίϚϯυଧ伴ˠώετϦద༻ͷஅ͕ʹͳΔ
·ͱΊͯDEMO
fzf• fuzzy matcher(;͊͡ʔ·ͬͪΌʔ)ͱ͔͍ΘΕΔͭɻଟ͘ͷྨࣅπʔϧ͕᛭ୖຏ͢ΔCLIπʔϧͷҰେδϟϯϧͰ͋Δɻ΄͔ʹpecoͱ͔͋Δ• stdinΛϦετදࣔ͢Δ• ೖྗΩʔϫʔυͰϚονϯά͢Δ• બ߲ͨ͠Λstdoutʹ͢• ͨͩͦΕ͚ͩͷπʔϧɻ߇͑ΊʹݴͬͯGOT
fzfͭΑ͍• ͓Θ͔Γ͍͚ͨͩͨͩΖ͏͔ʁ• fzfCLIૢ࡞ʹ͓͚ΔબͷखॱΛݶΓͳ͘ߴԽ͢Δɻ• Ұཡදࣔ(ex:ϒϥϯνҰཡදࣔ)• ୳͢(ex:େྔͷϒϥϯν͔ΒͰݟ͕ͯ͢͞)• ૢ࡞ରʹίϚϯυ࣮ߦ(ex:ϒϥϯνΛνΣοΫΞτ)• ͔͠ΧελϚΠζ࣍ୈͰԿʹͰద༻Մೳ
enhancd• CLIૢ࡞ʹ͓͍ͯ࠷࣮ߦ͞ΕΔίϚϯυͱ[cd]ͳ͍͠[ls]Ͱ͋ΔɻҟೝΊͳ͍• [cd]ͷޮԽ==CLIͷޮԽ• લड़ͨ͠fzfΛ׆༻ํ๏ͷதͰ࠷༗༻ͳͷͷҰͭ
ghq• ۀΛ͍ͯ͠Εཧ͢ΔgitϦϙδτϦ૿͑ଓ͚Δ• 20~30ͷϦϙδτϦΛ͖Ε͍ʹஔ͢Δͷ໘• Golangͷ͓࡞๏ʹैͬͯ؆୯ɺ͖Ε͍ʹϦϙδτϦཧ͕Ͱ͖Δ• $GOPATH/src/{domain}/{user}/{repo}
tig• CLIͷgitΫϥΠΞϯτ• CLIͰgitૢ࡞͍ͯ͠ΔΞφλɻtigΛΘͳ͍ͳΜͯਓੜͷଛ͍ͯ͠·͢Α• ͍ɻͦͯ͠syntax highlight is GOT• add, resetʹΑΔstage/unstageૢ࡞͕2ഒ• log, blameʹΑΔௐ͕ࠪ2ഒ• ΧελϚΠζ͢Εrebase -i 2ഒ
͜͜·Ͱฉ͍ͯͲ͏ࢥ͍·͔ͨ͠ʁ
ઃఆ/ΠϯείେਿwwwϦϞʔταʔόʹSSHͨ͠ͱ͖ͱ͔PCม͑ͨͱ͖Ͳ͏͢ΜͩΑwww
ͱ͔ࢥ͍ͬͯ·͢Ͷʁ
dotfilesۦಈ։ൃ• CLIͷઃఆͯ͢ςΩετϑΝΠϧ• ͭɾ·ɾΓɻͯ͢όʔδϣϯཧͰ͖Δ• ୭͕ݴ͔ͬͨdotfiles• GitHubʹͨͯ·͢dotfilesϦϙδτϦ• [.̋̋rc]ͥΜͿೖΕͯ• git clone ͢ΓΌ͜ΜʹͪΘ
zplug• zshͷϓϥάΠϯϚωʔδϟ• zshͷϓϥάΠϯ͔ΒzshrcͰ༻͍ͯ͠ΔCLIπʔϧʹࢸΔ·ͰΠϯετʔϧՄೳ• zsh͕ىಈͨ͠ॠؒʹઃఆϑΝΠϧͷϓϥάΠϯΛͯ͢Πϯετʔϧ• ͿͬͪΌ্͚ڃऀ͖͔ͩΒɺ·ͣprezto͋ͨΓ͔Β࢝Ίͨ΄͏͕Α͛͞
make• dotfilesͷߏཧmakeͰΔ• make͍͍ͩͨͷOSʹඪ४උ• chefΒansibleΒେڼͳπʔϧdotfilesʹෆཁ
͋ΕͲ͜Ͱ͋Ζ͏ͱϘΫͷ͔Μ͕͍͖͑ͨ͞ΐ͏ͷCLI͕͑Δ
·ͱΊ• CLIࢥߟͱ݁ͯ͠ίϚϯυ࣮ߦ͕Ͱ͖Δ͔Βɺͱͱͷ࣮ߦͱ͍͋·ͬͯ৭ʑ͍• ΧελϚΠζͰͤʹͳΕΔɻʑͷগ͠ͷվળΛঃʑʹ͍ͬͯ͜͏࿔͘Γଓ͚Εख์ͤͳ͘ͳΔ• CLIઃఆϙʔλϒϧʹ࣋ͪ͜ͼՄೳ• ई͕ͨΒͳ͗ͯ͢Vim·ͰͨͲΓண͚ͳ͔ͬͨ
Let’s enjoy CLI!!