สร้าง Change Log ง่าย ๆ ด้วย Conventional Commit

Aphipu Nongbualang
ConvoLab
Published in
2 min readMay 3, 2019
Image source: maxpou.fr

นอกจากการตั้งชื่อตัวแปรตอนเขียนโปรแกรมแล้ว สิ่งที่ยากพอ ๆ กันคือ การบอกว่ามีอะไรเปลี่ยนแปลงไปบ้าง จากโค้ดเวอร์ชั่นนึง ไปอีกเวอร์ชั่นนึง

บางคนอาจใช้วิธีที่เรียกว่า Semantic Versioning ที่บอกเป็น MAJOR, MINOR หรือ PATCH change ตามการเข้ากันได้ (compatibility) ของเวอร์ชั่นใหม่กับเวอร์ชั่นเก่า แต่จริง ๆ ใครจะจำได้หละว่าสามเดือนที่ผ่านมา มีอะไรเปลี่ยนแปลงไปบ้าง โดยเฉพาะยิ่งโปรเจ็คใหญ่ ๆ หรือที่เป็น Opensource ยิ่งตอบยากมาก

CHANGELOG.md จึงเป็นตัวช่วยในการช่วยตอบคำถาม ว่าเวอร์ชั่นที่จะ release ใหม่นี้ มีการเปลี่ยนแปลงอะไรไปบ้าง

ซึ่งมันก็คงจะดีถ้าเราไม่ต้องจำว่าเรา commit code อะไรไปบ้างในแต่ละ version แล้วก็เอาไปใส่ใน change log ด้วยมือ ซึ่งเป็นอะไรเหน็ดเหนื่อยและยากลำบากมากสำหรับ developer บางคนเช่นผม

แต่จริง ๆ แล้ว สิ่งที่เราสามารถเอามาสร้าง changelog ได้ง่าย ๆ เลย ก็คือ git history นี่แหละ แต่จะทำยังไงให้มันลื่นไหลเข้ากั๊น เข้ากัน กับ developer แบบเรา ๆ นี่แหละ ต้องทำยังไงบ้างล่ะ

Conventional Commits

อะไรคือ conventional commits? มันก็คือ รูปแบบการ commit code นั่นเองงงง ซึ่งเจ้าวิธีการนี้เองจะช่วยให้เราหยิบ commit history ไปสร้างเป็น change log ได้อย่างง่ายดาย

เรามาดูรูปแบบของเจ้าสิ่งนี้กันเลยดีกว่า

<type>[optional scope]: <description>

[optional body]

[optional footer]

หรือถ้าใครถนัด command line เก๋ๆ ก็ย่อมได้ คือ

git commit -a -m”<type>[optional scope]: <description>”

ประเภท หรือ type ของ commit มีหลายอย่างตั้งแต่

  • feat — เป็นการบอกว่ามี feature ใหม่ใน commit นี้นะ (คล้ายๆกับ MINOR ของ semantic versioning)
  • fix — แก้บัคนั่นแหละ (ประมาณ PATCH )
  • BREAKING CHANGE — คือการเปลี่ยนแปลงครั้งใหญ่นั่นเอง สามารถใช้คู่กับ feature ก็ได้เช่น BREAKING CHANGE: feat: <description> (เทียบประมาณกับ MAJOR)
  • doc — แก้ไขไฟล์เอกสาร เช่น README
  • refactor — การแก้ไขโค้ดเพิ่มให้อ่านง่ายขึ้น หรือเขียนให้ได้ผลเหมือนเดิมแต่วิธีการที่เรียบง่ายขึ้น

scope ใส่เพื่อบอกขอบเขตว่าเรา commit code อะไรไป ควรใส่สั้นๆ สองสามคำ ถ้าได้หนึ่งคำได้ก็ยิ่งดี

ส่วน description เป็นรายละเอียดของ commit เพื่อใช้อธิบาย change

สร้าง Change Log ง่ายๆๆ

เครื่องมือที่จะเสนอนี้ ใช้ conventional commit ที่เราเสนอไปด้านบน หยิบมาสร้าง change log ให้เองเพียงแค่ปลายนิ้วสัมผัสส

นั่นก็คือ standard-version นั่นเองง

วิธีการ install ก็ง่ายๆ เช่นกัน เพียง ( npm install--save-dev standard-version ) จากนั้นก็เพิ่ม script เข้าไปในpackage.jsonเป็นอันจบพิธี

หลังจากนี้ เราก็แค่ run script เพื่อรันคำสั่ง standard-version, เราก็จะได้ทั้ง git tag และ change log สวยๆๆ อย่างอันนี้

ตัวอย่าง change log

ครั้งนี้ผมก็ขอลาไปก่อน หวังว่าโพสนี้จะเป็นประโยชน์ต่อหลายๆคนนะค้าบบบ

--

--