$30 off During Our Annual Pro Sale. View Details »

Commit message will never die

Commit message will never die

Rails Developers Meetup 2018: day 1
(https://techplay.jp/event/639872)

Koichi ITO

March 24, 2018
Tweet

More Decks by Koichi ITO

Other Decks in Technology

Transcript

  1. $PNNJUNFTTBHFXJMMOFWFSEJF
    4BU

    3BJMTίϯτϦϏϡʔγϣϯ
    ͔ΒֶΜͩ
    (JU(JU)VCज़
    ҏ౻ߒҰ !LPJD
    FTN
    3BJMT%FWFMPQFST.FFUVQEBZ
    άϥϯτ΢Ωϣ΢α΢ελϫʔ֊

    View Slide

  2. View Slide

  3. View Slide

  4. View Slide

  5. View Slide

  6. View Slide

  7. ࠓ೔ͷ࿩

    View Slide

  8. IUUQTUXJUUFSDPNLPJDTUBUVT

    View Slide

  9. SBJMTSBJMT
    3FNPWFA"4.VMUJCZUFATVOJDPEFUBCMF

    View Slide

  10. View Slide

  11. $POUFYU
    Կނඞཁ͔

    View Slide

  12. $POUFYU
    Կނඞཁ͔
    .FSJU
    ͲΜͳಘ͕

    View Slide

  13. )PX
    ࣮૷ϙΠϯτ

    View Slide

  14. )PX
    ࣮૷ϙΠϯτ
    ࣮ࡍ͸·
    ͩଓ͘

    View Slide

  15. .FTVSF
    ܭଌ

    View Slide

  16. .FTVSF
    ܭଌ
    Ϛʔδͯ͠΋Β͏ͨΊʹඞཁͳ৘ใΛ
    ඞཁͳ͚ͩ٧Ί͍ͯΔ

    View Slide

  17. ŠŠŠŠŠŠŠ౰ͨΓલΛ౰ͨΓલʹ
    Step up your natural commit skill

    View Slide

  18. ,BUB

    View Slide

  19. w5IFTFWFOSVMFTBHBJO
    w.Z3PDL)FSPFTJO
    +BQBO
    w(JU(JU)VCXPSLqPX
    "HFOEB

    View Slide

  20. w5IFTFWFOSVMFTBHBJO
    w.Z3PDL)FSPFTJO
    +BQBO
    w(JU(JU)VCXPSLqPX
    "HFOEB

    View Slide

  21. IUUQTDISJTCFBNTJPQPTUTHJUDPNNJU

    View Slide

  22. 4FQBSBUFTVCKFDUGSPNCPEZXJUIBCMBOLMJOF
    -JNJUUIFTVCKFDUMJOFUPDIBSBDUFST
    $BQJUBMJ[FUIFTVCKFDUMJOF
    %POPUFOEUIFTVCKFDUMJOFXJUIBQFSJPE
    6TFUIFJNQFSBUJWFNPPEJOUIFTVCKFDUMJOF
    8SBQUIFCPEZBUDIBSBDUFST
    6TFUIFCPEZUPFYQMBJOXIBUBOEXIZWTIPX
    5IFTFWFOSVMFTPGBHSFBU(JU
    DPNNJUNFTTBHF

    View Slide

  23. IUUQTQPTUEDDIPXUPXSJUFBHJUDPNNJUNFTTBHF

    View Slide

  24. View Slide

  25. ৺ʹཹΊ͓͍͍ͯͯͩ͘͞
    ͜Ε͸ࠓ·Ͱ΋
    ݴΘΕ͖ͯͨ
    ͣͬͱ
    ͜ͱͰ͢ɻ

    View Slide

  26. कഁ཭

    View Slide

  27. कഁ཭

    View Slide


  28. .JYJO+BQBOFTF

    View Slide



  29. View Slide

  30. w ߦۭ͚ͯॻ͖·͠ΐ͏
    w HJUͷίϛοτϝοηʔδ͸ߦ໨͕
    λΠτϧɺߦ໨Ҏ͕߱ຊจ
    w ߦ໨ΛۭʹͤͣຊจΛॻ͘ͱશͯλ
    Πτϧѻ͍ʹͳΓɺgit --oneline
    ΍tig ίϚϯυͰҰॹͨ͘ʹͳΔ
    λΠτϧͷޙ͸ߦۭ͚ͯຊจΛॻ͘

    View Slide

  31. λΠτϧͷޙ͸ߦۭ͚ͯຊจΛॻ͘
    λΠτϧ
    ߦ໨

    ຊจ
    ߦ໨Ҏ߱

    ۭߦ
    ߦ໨

    View Slide



  32. View Slide

  33. w ࣈ͸໨҆Ͱଟগӽ͑ͯ΋ྑ͍
    w ཁ໿ʹͰ͖ͳ͍΄Ͳ௕͘ͳΔΑ͏Ͱ͋
    Ε͹ͦΕ͸ຊจʹॻ͘͜ͱ
    w ίϛοτϝοηʔδ͸ʮԿނʯΛॻ͘
    ΋ͷ͕ͩλΠτϧ͸ʮԿΛʯͰྑ͍
    λΠτϧΛࣈҎ಺ʹ͓͞ΊΔ

    View Slide



  34. View Slide

  35. w จষͷ࢝Ί͕େจࣈ͸ӳจ๏ͷجຊ
    w lӳจ๏จষઌ಄େจࣈz<ݕࡧ>
    w ೔ຊޠͳΒؾʹ͠ͳ͍ ؔ܎ͳ͍

    λΠτϧͷจ಄Λେจࣈʹ͢Δ

    View Slide



  36. View Slide

  37. w λΠτϧྖҬΛݮΒͤΔ
    w ೔ຊޠͰ΋۟఺͸ෆཁ
    w ۟఺͕ݱΕΔͱಡ఺΋ݱΕ࢝ΊͨΓཁ
    ໿͔Β௕Ίͷઆ໌΁ͱ཭Ε͍ͯ͘
    w ΧϯϚɺಡ఺໨ඪͰ࠷େճΛ໨҆
    ʹ͍ͯ͠Δ
    λΠτϧͷจ຤ʹϐϦΦυΛ෇͚ͳ͍

    View Slide



  38. View Slide

  39. w /"
    w ೔ຊޠͷ৔߹͸ମݴࢭΊ͔༻ݴࢭΊ͔
    ΛͳΔ΂͘౷Ұ͍ͯ͠Δ
    w ݸਓతʹ͸༻ݴࢭΊΛ࢖͍ͬͯΔ
    w ந৅ྫʓʓΛ˚˚͢Δ
    λΠτϧ͸໋ྩ๏Ͱهड़͢Δ

    View Slide



  40. View Slide

  41. w ࣈ͸໨҆Ͱଟগӽ͑ͯ΋ྑ͍
    w 13ͷຊจʹॻ͘಺༰Λه͓ͯ͘͠ͱ
    ྑ͍ ޙड़͢Δ(JU)VCͱͷ࿈ಈྫ

    ຊจ͸ߦ͋ͨΓࣈҎ಺ʹ͓͞ΊΔ

    View Slide



  42. View Slide

  43. w ʮͲͷΑ͏ʹ )PX
    ʯ͸࣮૷ΛಡΊ
    ͹Θ͔Δ
    w ʮԿΛ 8IBU
    ʯ͸ίϛοτϝοηʔ
    δߦ໨ʹλΠτϧͱͯ͠ه͢
    w ʮͳͥ 8IZ
    ʯ͸ίϛοτϝοηʔ
    δߦ໨ͷຊจͱͯ͠ه͢
    ຊจͰ͸ʮͲͷΑ͏ʹʯͰ͸ͳ͘ʮԿ
    ΛʯͱʮͳͥʯΛઆ໌͢Δ

    View Slide

  44. 8IBU
    ԿΛ͢Δ͔

    View Slide

  45. $POUFYU
    Կނඞཁ͔
    8IBU
    ԿΛ͢Δ͔

    View Slide

  46. $POUFYU
    Կނඞཁ͔
    .FSJU
    ͲΜͳಘ͕
    8IBU
    ԿΛ͢Δ͔

    View Slide

  47. $POUFYU
    Կނඞཁ͔
    .FSJU
    ͲΜͳಘ͕
    8IBU
    ԿΛ͢Δ͔
    8IBU

    View Slide

  48. $POUFYU
    Կނඞཁ͔
    .FSJU
    ͲΜͳಘ͕
    8IBU
    ԿΛ͢Δ͔
    8IZ
    8IBU

    View Slide

  49. 5IFTFBSF
    (VJEFMJOFT
    IUUQKBXJLJQFEJBPSHXJLJ&""&""&##&&##"NFEJB'JMF$BOUJOP1MBOJTQIFSFQOH

    View Slide

  50. w5IFTFWFOSVMFTBHBJO
    w.Z3PDL)FSPFTJO
    +BQBO
    w(JU(JU)VCXPSLqPX
    "HFOEB

    View Slide

  51. )FSPFT
    !LBNJQP !ZZBHJ
    !BNBUTVEB
    BOENPSF
    !ZBIPOEB !QPDLF

    View Slide

  52. w ڧͦ͏ͳਓͨͪɻڧͦ͏ͳਓͨͪΛਅ
    ࣅΕ͹ڧ͘ͳΕͦ͏
    w ڧ͍ਓୡ͸ίϛοτϝοηʔδ΋ڧ͍
    w ίʔυ͚ͩͰͳ͘ίϛοτϝοηʔδ
    ΋ެ։͞Εͯͯഎத͔Β,BUBΛֶͿ
    ͜ͱ͕Ͱ͖Δ
    )FSPJTTUSPOH

    View Slide

  53. ,BUB
    28"/
    JO
    2VBMJUZ8JUIPVU"/BNF

    View Slide

  54. w l/PEFTDSJQUJPOQSPWJEFE͸
    ಛʹॳର໘ʹରͯ͠
    ࣦྱz
    w lͳͥͦͷ13ΛϚʔδ͢Δඞཁ͕͋
    Δͷ͔Λॻ͘z
    w l༗ӹͳ৘ใ͸͢΂ͯه͢z
    w l$PTNFUJDDIBOHFͰ͸͋͑ͯ͋
    ·Γॻ͔ͳ͍ ࣭ྔͷରൺ
    z
    )FSPFT໊ݴू ࢲͷίϯύε

    View Slide


  55. lOPEFTDSJQUJPO
    QSPWJEFEzΛ߇͑Δ
    (JU(JU)VC5JQT

    View Slide

  56. #FGPSF
    IUUQTHJUIVCDPNNVSZPJNQMCVPZTQVMM

    View Slide

  57. "GUFS
    IUUQTHJUIVCDPNCCBUTPWSVCPDPQQVMM

    View Slide

  58. w5IFTFWFOSVMFTBHBJO
    w.Z3PDL)FSPFTJO
    +BQBO
    w(JU(JU)VCUJQT
    "HFOEB

    View Slide

  59. My workflow
    before and after

    View Slide

  60. w NBTUFSʹ͍Δ··࡞ۀ
    w ࡞ۀ໨ॲ͕͍ͭͨΒϒϥϯνΛ੾Δ
    w HJUDPNNJU࣌ʹ͸λΠτϧ͚ͩΛ
    ॻ͍ͯίϛοτ
    w 13ͰຊจΛॻ͘
    ʙ೥͘Β͍લͷ࡞ۀϑϩʔ

    View Slide

  61. w ࡞ۀͷཁ໿Λϒϥϯν໊ʹͯ͠ϒϥϯ
    νΞ΢τ
    w λΠτϧͱຊจΛίϛοτ
    w 13͸੔ܗͷΈ
    ݱࡏͷ࡞ۀϑϩʔ

    View Slide

  62. w ࡞ۀͷཁ໿Λϒϥϯν໊ʹͯ͠ϒϥϯ
    νΞ΢τ
    w λΠτϧͱຊจΛίϛοτ
    w 13͸੔ܗͷΈ
    ݱࡏͷ࡞ۀϑϩʔ
    5JQT঺հ

    View Slide

  63. lOPEFTDSJQUJPOQSPWJEFEzΛ߇͑Δ
    ࡞ۀ໨తʹ͍ͭͯϒϥϯν໊Λ෇͚Δ
    ϒϥϯνΛߜΓࠐΊΔΑ͏ʹ͢Δ
    .BSLEPXOΛ࢖ͬͯίϛοτϝοηʔδΛॻ͘
    λΠτϧͱҰॹʹຊจΛॻ͘
    $MPTJOHLFZXPSETΛ׆༻͢Δ
    ؔ࿈͢Δίϛοτ͸TRVBTI͢Δ
    (JU(JU)VCUJQT

    View Slide


  64. ࡞ۀ໨తʹ͍ͭͯ
    ϒϥϯν໊Λ෇͚Δ
    (JU(JU)VC5JQT

    View Slide

  65. w ࡞ۀ ్த
    ͷ͜ͱʹ͍֮ͭͯॻʹͳΔ
    w (JU)VCͰͷλΠτϧΛΠϝʔδ͢Δ
    w Ϛʔδ͞ΕΔࡍʹl.FSHFQVMM
    SFRVFTUGSPNVTFS
    CSBODIOBNFzͱ͍ͬͨײ͡Ͱλ
    ΠτϧʹೖΔͷͰͳΔ΂͘୹ͯ͘͠Δ
    ࡞ۀ໨తʹ͍ͭͯϒϥϯν໊Λ͚ͭΔ

    View Slide

  66. λΠτϧͱϒϥϯν໊ͷ૬ҧ FH

    ϒϥϯν໊

    View Slide

  67. λΠτϧͱϒϥϯν໊ͷ૬ҧ FH

    ϒϥϯν໊

    View Slide

  68. λΠτϧͱϒϥϯν໊ͷ૬ҧ FH

    ϒϥϯν໊

    View Slide

  69. λΠτϧͱϒϥϯν໊ͷ૬ҧ FH

    ϒϥϯν໊

    View Slide

  70. View Slide


  71. ϒϥϯνΛߜΓࠐΊΔΑ͏
    ʹ͢Δ
    (JU(JU)VC5JQT

    View Slide

  72. ϒϥϯν໊ͰߜΓࠐΉ
    alias cb=‘
    git checkout `
    git branch |
    peco |
    sed -e "s/\* //g" |
    awk "{print \$1}"`'
    IUUQTHJUIVCDPNLPJDEPUpMFTCMPCFECECGBCGCEPUTIHJUTI-
    ߜΓࠐΈ༻
    ΤΠϦΞε

    View Slide

  73. ϒϥϯν໊ͰߜΓࠐΉ
    IUUQTHJUIVCDPNLPJDEPUpMFTCMPCFECECGBCGCEPUTIHJUTI-
    QFDPͰߜΓࠐΈ

    View Slide

  74. w LPJDΦϦδφϧ
    w ࡞Γ͔͚ͷϩʔΧϧͷ΋ͷɺੜࣽ͑Ͱ
    ެ։ʹ͸ૣ͗͢Δ
    w ෳ਺ͷ࡞ۀதϒϥϯνΛ࣋ͭϦϙδτ
    ϦͰͷϒϥϯνߜΓࠐΈͷϔϧύʔ
    w ෆඞཁʹόοΫϦϯΫΛ͚ͭͨ͘ͳ͍
    ࡞ۀதϒϥϯνͷ઀಄ࢠʹXJQ@Λ෇͚Δ

    View Slide

  75. XJQ@Ͱ࢝·Δϒϥϯν͸QVTIͰ͖ͳ͍
    #!/bin/sh
    #
    if [ "$(git rev-parse --abbrev-ref HEAD |
    grep '^wip_')" ]; then
    echo "\033[0;31m[ABORT] You cannot push
    a branch whose prefix is \`wip_\`.
    \033[0;39m" 1>&2
    exit 1
    fi
    exit 0
    IUUQTHJUIVCDPNLPJDEPUpMFTDPNNJUGCBCEEDEFGCCEFEGB
    HJUIPPLT
    QSFQVTI

    View Slide

  76. %&.0

    View Slide


  77. .BSLEPXOΛ࢖ͬͯ
    ίϛοτϝοηʔδΛॻ͘
    (JU(JU)VC5JQT

    View Slide

  78. IUUQLPJDIBUFOBCMPHDPNFOUSZHJUDPOpHHMPCBMDPSFDPNNFOUDIBS

    View Slide

  79. w HJUͷσϑΥϧτͩͱɺίϛοτϝοηʔ
    δΛฤू͢ΔΤσΟλͰͷίϝϯτߦ͕
    ʹͳ͍ͬͯΔ
    w ҰํͰ(JU)VCͷ1VMM3FRVFTUͰ
    จॻߏ଄Λ࡞Δ࣌͸.BSLEPXOͱͳ
    ΔͨΊɺݟग़͠ʹ࢖͏͕ίϝϯτߦͱ
    ͯ͠ίϛοτϝοηʔδ͔Βফ͍͑ͯͨ
    ΁Μෆศ
    .BSLEPXOͰॻ͘5JQ

    View Slide

  80. ίϝϯτͷจࣈΛ͔Βมߋ͢Δ
    % git config --global core.commentchar '^'
    ?ʹมߋ͢Δ
    w ΋ͪΖΜ?Ͱͳͯ͘΋ྑ͘ɺϓϥοτϑΥʔ
    ϜͰൺֱతߦ಄ʹ࢖Θͳͦ͞͏ͳ΋ͷΛબͿ
    w ྫ͑͹3VCZͩͱ΍!ͳͲ͸ίϛοτϝο
    ηʔδͰίʔυྫΛه͠͏ΔͷͰ࢖͑ͳ͍

    View Slide

  81. ίϝϯτͷจࣈΛ͔Βมߋ͢Δ
    diff --git a/dot.gitconfig b/dot.gitconfig
    index 07e3ef8..a95eae6 100644
    --- a/dot.gitconfig
    +++ b/dot.gitconfig
    @@ -30,6 +30,7 @@
    branch = auto
    interactive = auto
    [core]
    + commentchar = ^
    editor = emacsclient -nw -a ''
    excludesfile = ~/.gitignore
    [diff]
    % git config --global core.commentchar '^'
    HJUDPOpH΁ͷ௥Ճ

    View Slide


  82. λΠτϧͱҰॹʹຊจΛॻ͘
    (JU(JU)VC5JQT

    View Slide

  83. w 1VMM3FRVFTUʹॻ͘͜ͱΛ͋Β͔͡Ίί
    ϛοτϝοηʔδʹه͢
    w ʮίϛοτˠ13࣌ʹॻ͘ʯͰ͸ͳ͘ʮίϛο
    τ࣌ʹॻ͘ˠ13͸੔ܗ͘Β͍ʯ
    w Ͳ͏ͤॻ͘ͳΒϒϥ΢βͰ͸ͳ͘޷͖ͳΤ
    σΟλͰ
    w NBTUFSQVTI͢Δͱ͖ͱྲྀΕΛม͑ͳ͍
    λΠτϧͱҰॹʹຊจΛॻ͘

    View Slide

  84. HJUDPNNJU࣌ʹΤσΟλฤू͢Δ

    View Slide

  85. 13࣌ʹλΠτϧຊจ͕ຒ·ͬͯΔ

    View Slide


  86. $MPTJOHLFZXPSET
    Λ׆༻͢Δ
    (JU(JU)VC5JQT

    View Slide

  87. w ίϛοτϝοηʔδʹ'JYFT൪߸
    ͳͲؚΉͱ*TTVF΁ͷΫϩʔζ࿈ܞ
    ʹͳΔ
    w طʹڍ͕͍ͬͯΔ*TTVF΁ͷϙΠϯ
    λʹ΋ͳΔར఺͕͋Δ
    $MPTJOH,FZXPSETΛ׆༻͢Δ

    View Slide

  88. IUUQTIFMQHJUIVCDPNBSUJDMFTDMPTJOHJTTVFTVTJOHLFZXPSET
    ༗ޮͳΩʔϫʔυ

    View Slide

  89. 'JYFTͷྫ FH

    *TTVFΛ
    ࢦఆ͍ͯ͠Δ

    View Slide

  90. 'JYFTͷྫ FH

    *TTVFΛ·ͱΊͯ
    ࢦఆ͍ͯ͠Δ

    View Slide

  91. 'JYFTͷྫ FH

    ϦϙδτϦʹΑΓ
    λΠτϧهࡌ

    View Slide


  92. ؔ࿈͢Δίϛοτ͸
    TRVBTI͢Δ
    (JU(JU)VC5JQT

    View Slide

  93. ຬΛ࣋ͯ͠13΁ͷ४උ
    1SPCMFN
    දग़͢Δ໰୊

    View Slide

  94. ຬΛ࣋ͯ͠13΁ͷ४උ
    $POUFYU
    ඞཁͳഎܠ

    View Slide

  95. ຬΛ࣋ͯ͠13΁ͷ४උ
    8IZ
    ରҊͱͷൺֱ
    $POUFYU
    ඞཁͳഎܠ

    View Slide

  96. 0QFOB13

    View Slide

  97. ࢲͷ3VCP$PQྗ͸
    Use ""

    View Slide

  98. View Slide

  99. TRVBTI

    HJUQVTIIFBEG

    View Slide

  100. w ϝϯςφ͸ɺϩʔΧϧͰͷ։ൃ ྫ5%%

    ʹΑΔSFEDPNNJUHSFFO
    DPNNJUSFGBDUPSDPNNJUͷ
    ίϛοτཻ౓ʹ͸ڵຯ͕ͳ͍
    w 13લͷϩʔΧϧ͸࡞ۀΛҰ۠੾Γͨ͠
    ཻ͍౓ɺ13ϚʔδޙͷϦϞʔτ͸มߋ
    ཤྺΛ௥ཻ͍͍ͨ౓ͱͳΔ
    TRVBTI΁ͷࢥߟ

    View Slide

  101. w ϝϯςφϯεͰݫີʹॏཁͳͷ͸ҎԼ
    w ίϛοτͰͭͷมߋཧ༝Ͱ͋Δ͜ͱ
    w ςετίʔυ͕ηοτͰ͋Δ͜ͱ
    w ݁࿦13ϨϏϡʔޙʹTRVBTI͢Δ
    Α͏ٻΊΒΕΔ͕ɺ͜Ε͸ਖ਼͍࢟͠੎
    Ͱ͋Δ
    TRVBTI΁ͷࢥߟ

    View Slide

  102. ͓Ϛʔδ

    View Slide

  103. ϝϯςͷྺ࢙ʹ։ൃ్্ͷ͸ෆཁ
    ίϛοτʹTRVBTIͯ͠
    ෆཁͳίϛοτ͕ݱΕͳ͍

    View Slide

  104. ॱಓ੍উ
    ͍·͋ΔྗͰಊʑͱίϛϡχςΟʹࢀՃ

    View Slide

  105. w SBJMTSBJMTϦϙδτϦ͔Β͸ɺ3BJMTͷίʔ
    υ͚ͩͰͳ͘13ͷग़͠ํ͔Βίϛοτϝο
    ηʔδͷॻ͖ํ΋ֶͿ͜ͱ͕Ͱ͖Δ
    w ಛʹίϯτϦϏϡʔλ࣌୅͔Βίϛολʔ
    ʹͳ͍ͬͯΔ3BJMTίϛολʔͷίϛοτ
    ͸͓खຊʹ͓͢͢Ί ૞ࠪҰ՝՝௕ײ͋Δ

    w ίϛοτϝοηʔδΛ੍͢Δ΋ͷ͸Ϧϙδ
    τϦͷྺ࢙ͷ҆ఆΛ੍͢Δ
    ͓ΘΓʹ

    View Slide

  106. IUUQTUXJUUFSDPNLPJDTUBUVT

    View Slide

  107. 3BJMT044ύονձ ݄࣍։࠵

    View Slide

  108. ࣍ճ݄೔ ݄
    ʙFTNʹͯ
    :PV

    View Slide

  109. View Slide

  110. One more thing…

    View Slide

  111. View Slide

  112. ͋ͱ͸෼͔Γ·͢Ͷʁ
    ࠾༻
    ೥Ҏ্ͷ3BJMTΞϓϦ։ൃͷ࣮੷
    l3BJMT044Λ௨͡੒௕͍ͨ͠ϓϩάϥϚʔz
    @koic·ͰͲ͏ͧ

    View Slide