Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コマンドラインツールについて語るときに僕の語ること #yapcasia

コマンドラインツールについて語るときに僕の語ること #yapcasia

taichi nakashima

August 29, 2014
Tweet

More Decks by taichi nakashima

Other Decks in Technology

Transcript

  1. What I Talk about
    When I Talk about CLI Tool
    ίϚϯυϥΠϯπʔϧʹ͍ͭͯޠΔͱ͖ʹ๻ͷޠΔ͜ͱ
    https://www.flickr.com/photos/36247316@N00/3108399560

    View Slide

  2. I’m Taichi Nakashima
    @deeeet tcnksm
    https://www.flickr.com/photos/flcherb/7781533580

    View Slide

  3. https://www.flickr.com/photos/flcherb/7781533580

    View Slide

  4. https://www.flickr.com/photos/flcherb/7781533580

    View Slide

  5. https://www.flickr.com/photos/flcherb/7781533580

    View Slide

  6. What I Talk about
    When I Talk about CLI Tool
    ίϚϯυϥΠϯπʔϧʹ͍ͭͯޠΔͱ͖ʹ๻ͷޠΔ͜ͱ
    https://www.flickr.com/photos/36247316@N00/3108399560

    View Slide

  7. ຊൃදʹ͸ݸਓతͳࢥ૝ؚ͕·Ε͍ͯ·͢
    Warning
    https://www.flickr.com/photos/flcherb/7781533580

    View Slide

  8. ຊൃදʹ͸Perlͷ࿩ؚ͕·Ε͍ͯ·ͤΜ
    Warning
    ͨͩɼ͋ΒΏΔݴޠͰ࣮ݱՄೳͳ࿩Λ͠·͢
    https://www.flickr.com/photos/flcherb/7781533580

    View Slide

  9. Background
    https://www.flickr.com/photos/flcherb/7781533580

    View Slide

  10. https://www.flickr.com/photos/flcherb/7781533580
    ੈͷதʹ͸
    ྑ͍$-*πʔϧͱ
    ͦ͏Ͱͳ͍πʔϧ͕͋Δ

    View Slide

  11. https://www.flickr.com/photos/flcherb/7781533580
    ͦͷࠩ͸୯७ͳ͜ͱΛ
    ࣮ફ͢Δ͜ͱͰॖΊΔ
    ͜ͱ͕Ͱ͖Δ
    ౰ͨΓલա͗ͯ͋·ΓޠΒΕͳ͍

    View Slide

  12. https://www.flickr.com/photos/flcherb/7781533580
    ࣗ෼͸ԿΛ࣮ફ͍ͯ͠Δ͔ʁ

    View Slide

  13. طʹ࡞͍ͬͯΔͻͱ
    https://www.flickr.com/photos/flcherb/7781533580
    ࡞ͬͨ͜ͱͳ͍ͻͱ
    → ݟ௚͠ͷػձʹ
    → ͙͢ʹΤσΟλΛ։͚ΔΑ͏ʹ

    View Slide

  14. lྑ͍z$-*πʔϧͱ͸ʁ
    ͍͔ʹlྑ͍z$-*πʔϧΛ࡞Γ࢝ΊΔ͔ʁ
    What is “Good” CLI tool ?
    How to start to create “Good” CLI tool ?
    https://www.flickr.com/photos/36247316@N00/3108399560

    View Slide

  15. lྑ͍z$-*πʔϧͱ͸ʁ
    ͍͔ʹlྑ͍z$-*
    What is “Good” CLI tool ?
    How to start to create “Good” CLI tool ?
    https://www.flickr.com/photos/36247316@N00/3108399560

    View Slide

  16. #1 ͭͷ͜ͱʹूத͍ͯ͠Δ
    ௚ײతʹ࢖͑Δ
    ଞͷπʔϧͱ࿈ܞͰ͖Δ
    ར༻Λॿ͚ͯ͘ΕΔ
    ద੾ͳσϑΥϧτ஋Λ࣋ͪઃఆ΋Ͱ͖Δ
    ۤ௧ͳ͘ΠϯετʔϧͰ͖Δ
    ͙͢ʹվमͰ͖Δ
    #2
    #3
    #4
    #5
    #6
    #7
    https://www.flickr.com/photos/36247316@N00/3108399560

    View Slide

  17. Good CLI Tool #1
    Keep It Simple, Stupid !
    ͭͷ͜ͱʹूத͍ͯ͠Δ
    https://www.flickr.com/photos/110382334@N05/11302995614

    View Slide

  18. https://www.flickr.com/photos/110382334@N05/11302995614

    View Slide

  19. খ͍͞΋ͷ͸ඒ͍͠
    4NBMMJTCFBVUJGVM
    ͭͷϓϩάϥϜʹ͸
    ͭͷ͜ͱΛ͏·͘΍ΒͤΔ
    .BLFFBDIQSPHSBNEPPOFUIJOHXFMM
    https://www.flickr.com/photos/110382334@N05/11302995614

    View Slide

  20. https://www.flickr.com/photos/110382334@N05/11302995614
    ̎ͭҎ্ͷ͜ͱΛ΍Ζ͏ͱ
    ͢Δ͚ͩͰෳࡶ౓͸૿͢
    ཧղͰ͖ͳ͍ɾशಘͰ͖ͳ͍
    ϝϯςφϯεͰ͖ͳ͍

    View Slide

  21. Good CLI Tool #2
    Intuitive UI/UX
    ௚ײతʹ࢖͑Δ
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  22. $-*πʔϧʹ΋6*69
    $-*πʔϧͷྺ࢙͸௕͍
    ׳श͕ଘࡏ͢Δ
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  23. Command Pattern
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  24. > grep —i -C 4 "some string" /tmp
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  25. > grep —i -C 4 "some string" /tmp
    &YFDVUBCMF
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  26. > grep —i -C 4 "some string" /tmp
    &YFDVUBCMF
    0QUJPOT
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  27. > grep —i -C 4 "some string" /tmp
    &YFDVUBCMF
    0QUJPOT "SHVNFOUT
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  28. > git --no-pager push -v origin master
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  29. > git --no-pager push -v origin master
    &YFDVUBCMF
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  30. > git --no-pager push -v origin master
    &YFDVUBCMF
    $PNNBOE
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  31. > git --no-pager push -v origin master
    &YFDVUBCMF
    (MPCBM
    0QUJPOT
    $PNNBOE
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  32. > git --no-pager push -v origin master
    &YFDVUBCMF
    (MPCBM
    0QUJPOT
    $PNNBOE
    $PNNBOE
    0QUJPOT
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  33. > git --no-pager push -v origin master
    &YFDVUBCMF
    (MPCBM
    0QUJPOT
    $PNNBOE
    $PNNBOE
    0QUJPOT
    "SHVNFOUT
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  34. Option Pattern
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  35. > grep —i -C 4 "some string" /tmp
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  36. > grep —i -C 4 "some string" /tmp
    4XJUDI
    Ҿ਺Λ൐Θͳ͍
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  37. > grep —i -C 4 "some string" /tmp
    4XJUDI
    Ҿ਺Λ൐Θͳ͍
    'MBH
    Ҿ਺Λ൐͏
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  38. > grep —i
    > grep --ignore-case
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  39. > grep —i
    > grep --ignore-case
    4IPSU
    ߴ଎ʹ࢖͏ͨΊʹ
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  40. > grep —i
    > grep --ignore-case
    4IPSU
    -POH
    ߴ଎ʹ࢖͏ͨΊʹ
    ՄಡੑΛߴΊΔ
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  41. (/6ඪ४ΠϯλʔϑΣʔε
    cf. https://www.gnu.org/prep/standards/html_node/
    Command_002dLine-Interfaces.html
    https://www.flickr.com/photos/hindrik/5568789280

    View Slide

  42. https://www.flickr.com/photos/hindrik/5568789280
    My Interface design

    View Slide

  43. https://www.flickr.com/photos/hindrik/5568789280
    ࠷΋΍Γ͍ͨ͜ͱΛ࠷΋؆୯ʹ
    Φϓγϣϯ͕ඞཁͳΒShortΦϓγϣϯΛ४උ͢Δ
    σϑΥϧτͰഁյతૢ࡞Λ͠ͳ͍
    ର࿩ΠϯλʔϑΣʔεΛආ͚Δ
    LongΦϓγϣϯΛ४උ͢Δ e.g., —force
    ࣗಈԽͷ๦͛ʹͳΔ

    View Slide

  44. Good CLI Tool #3
    Play well with others
    ଞͷπʔϧͱ࿈ܞͰ͖Δ
    https://www.flickr.com/photos/alexsk/3251194325

    View Slide

  45. $-*πʔϧ͸ଞͷεΫϦϓτ
    ͔Βݺͼग़͞ΕΔ
    4IFMMTDSJQU΍$SPO $IFG %PDLFSpMF
    https://www.flickr.com/photos/alexsk/3251194325

    View Slide

  46. Exit Code
    https://www.flickr.com/photos/alexsk/3251194325

    View Slide

  47. exit 0 exit 1
    nonzero
    ੒ޭ ࣦഊ
    https://www.flickr.com/photos/alexsk/3251194325

    View Slide

  48. Output Stream
    https://www.flickr.com/photos/alexsk/3251194325

    View Slide

  49. stdout stderr
    Τϥʔϝοηʔδ
    ϑΝΠϧʹॻ͖ग़͍ͨ͠
    ύΠϓͰ౉͍ͨ͠
    https://www.flickr.com/photos/alexsk/3251194325
    ඪ४Τϥʔ
    ඪ४

    View Slide

  50. Good CLI Tool #4
    Documentation
    ར༻Λॿ͚ͯ͘ΕΔ
    https://www.flickr.com/photos/jjpacres/3293117576

    View Slide

  51. υΩϡϝϯτ΍6TBHF͕
    ଘࡏ͠ͳ͍πʔϧͳͲ
    ୭΋࢖͍ͨ͘ͳ͍
    ར༻౓ʹ߹ΘͤͨυΩϡϝϯτΛ४උ͢Δ
    https://www.flickr.com/photos/jjpacres/3293117576

    View Slide

  52. Document Pattern
    https://www.flickr.com/photos/jjpacres/3293117576

    View Slide

  53. ར༻ස౓
    https://www.flickr.com/photos/jjpacres/3293117576

    View Slide

  54. ར༻ස౓
    3&"%.&NE
    ࢖͏͔൱͔Λ൑அ͢Δ
    https://www.flickr.com/photos/jjpacres/3293117576

    View Slide

  55. ར༻ස౓
    3&"%.&NE
    6TBHF
    ࢖͏͔൱͔Λ൑அ͢Δ
    πʔϧΛಈ͔ͨ͢Ίʹ
    ࠷௿ݶ஌Δ΂͖
    ࢖͍ํΛཧղ͢Δ
    IFMQI
    https://www.flickr.com/photos/jjpacres/3293117576

    View Slide

  56. ར༻ස౓
    3&"%.&NE
    6TBHF
    .BO
    ࢖͏͔൱͔Λ൑அ͢Δ
    πʔϧΛಈ͔ͨ͢Ίʹ
    ࠷௿ݶ஌Δ΂͖
    ࢖͍ํΛཧղ͢Δ
    ෳࡶͳྫ΍
    ΑΓॊೈʹ࢖͏ͨΊ
    ͷΦϓγϣϯΛൃݟ͢Δ
    IFMQI
    https://www.flickr.com/photos/jjpacres/3293117576

    View Slide

  57. Good CLI Tool #5
    Configurable
    ద੾ͳσϑΥϧτ஋Λ࣋ͪ
    ઃఆ΋Ͱ͖Δ
    https://www.flickr.com/photos/dwilkin/12153072866

    View Slide

  58. ϢʔβʹແବͳೖྗΛ
    ͤ͞ͳ͍
    https://www.flickr.com/photos/dwilkin/12153072866

    View Slide

  59. ϢʔβʹແବͳೖྗΛ
    ͤ͞ͳ͍
    ͕ ޷͖ʹઃఆ΋Ͱ͖Δ
    https://www.flickr.com/photos/dwilkin/12153072866
    શһΛຬ଍ͤ͞Δ͜ͱ͸Ͱ͖ͳ͍

    View Slide

  60. Configuration Pattern
    https://www.flickr.com/photos/dwilkin/12153072866

    View Slide

  61. ༏ઌ౓
    https://www.flickr.com/photos/dwilkin/12153072866

    View Slide

  62. ༏ઌ౓
    σϑΥϧτ஋
    https://www.flickr.com/photos/dwilkin/12153072866

    View Slide

  63. ༏ઌ౓
    σϑΥϧτ஋
    ઃఆϑΝΠϧ
    ਓ͕ؒಡΊΔ΋ͷ(json/YAML/DSL/HCL)
    https://www.flickr.com/photos/dwilkin/12153072866

    View Slide

  64. ༏ઌ౓
    σϑΥϧτ஋
    ઃఆϑΝΠϧ
    ؀ڥม਺
    ਓ͕ؒಡΊΔ΋ͷ(json/YAML/DSL/HCL)
    https://www.flickr.com/photos/dwilkin/12153072866

    View Slide

  65. ༏ઌ౓
    σϑΥϧτ஋
    ઃఆϑΝΠϧ
    ؀ڥม਺
    ΦϓγϣϯҾ਺
    ਓ͕ؒಡΊΔ΋ͷ(json/YAML/DSL/HCL)
    https://www.flickr.com/photos/dwilkin/12153072866

    View Slide

  66. Good CLI Tool #6
    Painless Installation
    ۤ௧ͳ͘ΠϯετʔϧͰ͖Δ
    https://www.flickr.com/photos/midorisyu/752223850

    View Slide

  67. ର৅Ϣʔβʹ߹ͬͨ
    Πϯετʔϧํ๏
    .BDϢʔβʹ͸ʁ1FSMϢʔβʹ͸ʁ
    https://www.flickr.com/photos/midorisyu/752223850

    View Slide

  68. 1 Command Install
    https://www.flickr.com/photos/midorisyu/752223850

    View Slide

  69. > brew install
    > apt-get install
    > yum install
    > cpan
    > gem install
    > pip install
    https://www.flickr.com/photos/midorisyu/752223850

    View Slide

  70. Good CLI Tool #7
    maintainable
    ͙͢ʹվमͰ͖Δ
    https://www.flickr.com/photos/damski/7045068945

    View Slide

  71. Τϥʔ͸ඞͣىΔ
    ى͖ͨͱ͖ʹԿ͕ىͬͯΔ͔
    ৄࡉ͕֬ೝͰ͖Δ
    ιʔεΛݟͣʹԿ͕ىͬͯΔ͔Θ͔Δ
    ιʔεͷͲ͜Λ௚ͤ͹Α͍͔Θ͔Δ
    https://www.flickr.com/photos/damski/7045068945

    View Slide

  72. DEBUG Option
    https://www.flickr.com/photos/damski/7045068945

    View Slide

  73. > tool --debug
    Φϓγϣϯ
    https://www.flickr.com/photos/damski/7045068945

    View Slide

  74. > tool --debug
    > export DEBUG=1
    > tool
    Φϓγϣϯ
    ؀ڥม਺
    ։ൃऀ޲͚
    https://www.flickr.com/photos/damski/7045068945

    View Slide

  75. #1 ͭͷ͜ͱʹूத͍ͯ͠Δ
    ௚ײతʹ࢖͑Δ
    ଞͷπʔϧͱ࿈ܞͰ͖Δ
    ར༻Λॿ͚ͯ͘ΕΔ
    ద੾ͳσϑΥϧτ஋Λ࣋ͪઃఆ΋Ͱ͖Δ
    ۤ௧ͳ͘ΠϯετʔϧͰ͖Δ
    ͙͢ʹվमͰ͖Δ
    #2
    #3
    #4
    #5
    #6
    #7
    https://www.flickr.com/photos/36247316@N00/3108399560

    View Slide

  76. lྑ͍z$-*
    ͍͔ʹlྑ͍z$-*πʔϧΛ࡞Γ࢝ΊΔ͔ʁ
    What
    How to start to create “Good” CLI tool ?
    https://www.flickr.com/photos/36247316@N00/3108399560

    View Slide

  77. #1 ͲΜͳπʔϧΛ࡞Δ͔ߟ͑Δ
    ݴޠΛબͿ
    3&"%.&NEΛॻ͘
    #2
    #3
    https://www.flickr.com/photos/36247316@N00/3108399560
    ߴ଎ʹϓϩτλΠϓΛͭ͘Δ %&.0

    #4

    View Slide

  78. How to start #1
    Chance
    ͲΜͳπʔϧΛ࡞Δ͔ߟ͑Δ
    https://www.flickr.com/photos/cleopold73/3677296594

    View Slide

  79. $-*πʔϧͷ
    ॳظিಈ
    ෳࡶͳ࡞ۀΛࣗಈԽ͍ͨ͠
    ͋ΔλεΫͷੜ࢈ੑΛߴΊ͍ͨ
    "1*ͷ$-*ΫϥΠΞϯτཉ͍͠
    ʜ https://www.flickr.com/photos/cleopold73/3677296594

    View Slide

  80. ͍͖ͳΓෳࡶͳ͜ͱΛ͠ͳ͍
    !
    ͭͷ͜ͱʹूத͢Δ
    Good CLI Tool #1
    https://www.flickr.com/photos/cleopold73/3677296594

    View Slide

  81. ໰୊ͷҰ෦Λղܾ͢Δ͚ͩͰΑ͍
    !
    ଞͷπʔϧͱ࿈ܞͰ͖Δ
    Α͏ʹ͢Δ
    Good CLI Tool #3
    https://www.flickr.com/photos/cleopold73/3677296594

    View Slide

  82. How to start #2
    Programming language
    ݴޠΛબͿ
    https://www.flickr.com/photos/8153468@N04/2668229310

    View Slide

  83. ݴޠબ୒͸
    πʔϧͷ഑෍ํ๏ʹ௚݁͢Δ
    !
    ۤ௧ͳ͘Πϯετʔϧ
    ͯ͠΋Β͏͜ͱΛߟ͑Δ
    Good CLI Tool #6
    https://www.flickr.com/photos/8153468@N04/2668229310

    View Slide

  84. (P
    ͋ΒΏΔϓϥοτϑΥʔϜ
    ͷϢʔβΛର৅ʹ
    1FSM
    Perl mongerΛର৅ʹ
    SVCZ
    rubyistΛର৅ʹ
    https://www.flickr.com/photos/8153468@N04/2668229310
    ˠόΠφϦμ΢ϯϩʔυͰ
    ˠHFNͰ
    ˠDQBOͰ

    View Slide

  85. How to start #3
    README Driven Development
    3&"%.&NEΛॻ͘
    https://www.flickr.com/photos/alessiorr/14144160337

    View Slide

  86. README Driven Development
    https://www.flickr.com/photos/alessiorr/14144160337

    View Slide

  87. ίʔυΛॻ͘લʹ
    3&"%.&NEΛॻ͘
    ໊લΛߟ͑Δɼ
    $-*πʔϧ͕ԿΛ͢Δ΋ͷͳͷ͔Λߟ͑Δɼ
    $-*πʔϧͷΠϯλʔϑΣʔε ࢖͍ํ
    Λߟ͑Δ
    https://www.flickr.com/photos/alessiorr/14144160337

    View Slide

  88. ࣗ෼͕ԿΛ࡞Γ͍ͨͷ͔
    ੔ཧ্ͨ͠Ͱ࡞Γ࢝ΊΒΕΔ
    https://www.flickr.com/photos/alessiorr/14144160337

    View Slide

  89. View Slide

  90. Ϣʔβࢹ఺ͰσβΠϯͰ͖Δ
    https://www.flickr.com/photos/alessiorr/14144160337

    View Slide

  91. ൪ςϯγϣϯ͕ߴ͍ͱ͖ʹ
    υΩϡϝϯτ͕ॻ͚Δ
    ࡞ΓऴΘͬͨޙʹυΩϡϝϯτΛ੔උ͢Δ
    ͷ͸͠ΜͲ͍ʜ
    https://www.flickr.com/photos/alessiorr/14144160337

    View Slide

  92. NAME
    ====
    !
    ## Description
    !
    ## Usage
    !
    ## VS.
    https://www.flickr.com/photos/alessiorr/14144160337

    View Slide

  93. ස౓͕ߴ͍ͳΒͰ͖Δ͚ͩ
    ୹໊͍લΛ෇͚Δ
    ස౓͕௿͍ͳΒ
    આ໌తͳ໊લΛ෇͚Δ
    = ίϚϯυ໊
    NAME
    ====
    !
    ## Description
    !
    ## Usage
    !
    ## VS.
    ໊લ
    https://www.flickr.com/photos/alessiorr/14144160337

    View Slide

  94. ͜Ε͸ͲΜͳπʔϧͳͷ͔ʁ
    ͭͷ͜ͱʹूத͍ͯ͠Δ
    Good CLI Tool #1
    = ୹͘؆ܿͳઆ໌͕ॻ͚Δ
    NAME
    ====
    !
    ## Description
    !
    ## Usage
    !
    ## VS.
    આ໌
    https://www.flickr.com/photos/alessiorr/14144160337

    View Slide

  95. ΠϯλʔϑΣʔεͷఆٛ
    ௚ײతʹ࢖͑Δ
    Good CLI Tool #2
    Ϣʔβͷࢹ఺Ͱ
    ࠷΋΍Β͍ͤͨ͜ͱΛ
    ࠷΋؆୯ʹͰ͖ΔΑ͏ʹ
    NAME
    ====
    !
    ## Description
    !
    ## Usage
    !
    ## VS.
    ࢖͍ํ
    https://www.flickr.com/photos/alessiorr/14144160337

    View Slide

  96. ൺֱ
    ଞͷπʔϧͱͷൺֱ
    NAME
    ====
    !
    ## Description
    !
    ## Usage
    !
    ## VS.
    ࣅͨΑ͏ͳπʔϧ͸ଘࡏ͢Δ
    શ͘ಉ͡΋ͷΛ࡞ͬͯ΋
    ҙຯͳ͍
    ࣅͨπʔϧͱൺ΂ͯ!
    Կ͕༏Ε͍ͯΔͷ͔Λߟ͑Δ!
    → πʔϧͷಛ௃ʹͳΔ
    https://www.flickr.com/photos/alessiorr/14144160337

    View Slide

  97. όοδ
    όοδͷ४උ
    = CI as a Service ͷઃఆ
    = ͸͡Ί͔Βςετ؀ڥΛ!
    ४උ͢Δ
    ςετ݁ՌΛϢʔβʹ
    ݟͤଓ͚Δ͜ͱͰ
    ςετΛॻ͘Ϟνϕʔγϣϯ
    Λอͪଓ͚Δ
    NAME
    ====
    !
    ## Description
    !
    ## Usage
    !
    ## VS.
    https://www.flickr.com/photos/alessiorr/14144160337

    View Slide

  98. https://www.flickr.com/photos/sergiu_bacioiu/4664215911
    How to start #4
    ߴ଎ʹϓϩτλΠϓΛ࡞Δ
    Build a prototype as soon as possible

    View Slide

  99. https://www.flickr.com/photos/sergiu_bacioiu/4664215911

    View Slide

  100. https://www.flickr.com/photos/sergiu_bacioiu/4664215911

    View Slide

  101. LIVE
    https://www.flickr.com/photos/sergiu_bacioiu/4664215911

    View Slide

  102. (PݴޠΛ࢖ͬͯ
    $-*πʔϧΛ࡞੒ɼ
    ΫϩείϯύΠϧͯ͠
    (JUIVCʹϦϦʔεʂ
    https://www.flickr.com/photos/sergiu_bacioiu/4664215911

    View Slide

  103. (PݴޠΛ࢖ͬͯ
    $-*πʔϧΛ࡞੒ɼ
    ΫϩείϯύΠϧͯ͠
    (JUIVCʹϦϦʔεʂ
    https://www.flickr.com/photos/sergiu_bacioiu/4664215911
    tcnksm/cli-init
    mitchellh/gox
    tcnksm/ghr
    codegansta/cli

    View Slide

  104. #1 ͭͷ͜ͱʹूத͍ͯ͠Δ
    ௚ײతʹ࢖͑Δ
    ଞͷπʔϧͱ࿈ܞͰ͖Δ
    ར༻Λॿ͚ͯ͘ΕΔ
    ద੾ͳσϑΥϧτ஋Λ࣋ͪઃఆ΋Ͱ͖Δ
    ۤ௧ͳ͘ΠϯετʔϧͰ͖Δ
    ͙͢ʹվमͰ͖Δ
    #2
    #3
    #4
    #5
    #6
    #7
    https://www.flickr.com/photos/36247316@N00/3108399560

    View Slide

  105. #1 ͲΜͳπʔϧΛ࡞Δ͔ߟ͑Δ
    ݴޠΛબͿ
    3&"%.&NEΛॻ͘
    #2
    #3
    https://www.flickr.com/photos/36247316@N00/3108399560
    ߴ଎ʹϓϩτλΠϓΛͭ͘Δ %&.0

    #4

    View Slide