OOZOU
ติดต่อเรา
กลับไปหน้า TIL
ruby

รัน rubocop ก่อน commit

13 ตุลาคม 2563

บทนำ

Git hooks ทรงพลังมากสำหรับการทำงานแบบอัตโนมัติและการบังคับใช้มาตรฐานการเขียนโค้ดใน Git repository หนึ่งใน use case ที่พบบ่อยของ Git hooks คือการรัน test อัตโนมัติและเครื่องมือวิเคราะห์โค้ดก่อนที่จะยอมให้ commit ผ่านได้ ในบทความนี้เราจะพูดถึง pre-commit hook วิธีข้ามมัน และวิธีตั้งค่า pre-commit hook เพื่อรัน Rubocop ซึ่งเป็นเครื่องมือวิเคราะห์โค้ด Ruby

Rubocop คืออะไร?

Rubocop คือเครื่องมือ static code analysis สำหรับ Ruby ที่ตรวจสอบโค้ดทั้งเรื่อง style และปัญหาด้านความปลอดภัย เป็นเครื่องมือยอดนิยมในหมู่นักพัฒนา Ruby เพื่อให้แน่ใจว่าโค้ดเป็นไปตาม Ruby style guide และ best practice ต่าง ๆ Rubocop สามารถรันด้วยมือได้ แต่การผูกมันเข้ากับ pre-commit hook จะช่วยให้โค้ดถูกตรวจสอบโดยอัตโนมัติก่อนทุก commit

คัดลอกโค้ดนี้ไปไว้ใน .git/hooks/pre-commit (ลบ .sample ออก)

#!/usr/bin/env ruby

require 'english'
require 'rubocop'

ADDED_OR_MODIFIED = /A|AM|^M/.freeze

changed_files = `git status --porcelain`.split(/\n/).
    select { |file_name_with_status|
      file_name_with_status =~ ADDED_OR_MODIFIED
    }.
    map { |file_name_with_status|
      file_name_with_status.split(' ')[1]
    }.
    select { |file_name|
      File.extname(file_name) == '.rb'
    }.join(' ')

system("rubocop #{changed_files}") unless changed_files.empty?

exit $CHILD_STATUS.exitstatus

ทำให้ไฟล์รันได้

$ chmod +x .git/hooks/pre-commit

เท่านี้ก็พร้อมใช้งาน จากนี้ไปมันจะรัน rubocop กับการเปลี่ยนแปลงของคุณ และจะไม่ยอมให้ commit จนกว่าคุณจะแก้ offence ที่พบ

จะข้าม pre-commit ได้อย่างไร? แค่ส่ง -n ให้ git commit

$ git commit -n -m "[hotfix] blah blah"

Pre-Commit Hook คืออะไร?

pre-commit hook คือ Git hook ฝั่ง client ที่รันก่อนที่ commit จะถูกสร้าง มันคือสคริปต์ที่ทำได้หลายอย่าง เช่น รัน test อัตโนมัติ ตรวจสอบ style ของโค้ด หรือบังคับใช้มาตรฐานการเขียนโค้ด ถ้า pre-commit hook ล้มเหลว commit นั้นจะถูกยกเลิก และคุณต้องแก้ปัญหาก่อนจะ commit ใหม่อีกครั้ง

ทำไมต้องรัน Rubocop ก่อน Commit

การรัน Rubocop ก่อน commit มีข้อดีหลายอย่าง:

  • คุณภาพโค้ด: Rubocop ตรวจสอบโค้ดทั้งเรื่อง style และปัญหาด้านความปลอดภัย ทำให้ codebase สม่ำเสมอและปลอดภัย
  • ประหยัดเวลา: การรัน Rubocop โดยอัตโนมัติก่อน commit ช่วยให้จับปัญหาได้ตั้งแต่เนิ่น ๆ และไม่ต้องเสียเวลา debug ทีหลัง
  • การทำงานร่วมกัน: การบังคับใช้มาตรฐานการเขียนโค้ดผ่าน pre-commit hook ช่วยส่งเสริมการทำงานร่วมกันและความสม่ำเสมอในทีม

วิธีตั้งค่า pre-commit hook

  1. ติดตั้ง Rubocop และเครื่องมือ pre-commit hook ที่คุณเลือก (เช่น Husky หรือ Pre-commit)
  2. สร้างไฟล์ใหม่ชื่อ pre-commit ในไดเรกทอรี .git/hooks
  3. เพิ่มคำสั่ง Rubocop ลงในไฟล์ pre-commit เช่น rubocop -a
  4. ทำให้ไฟล์ pre-commit รันได้ด้วยการรัน chmod +x .git/hooks/pre-commit
  5. ทดสอบ pre-commit hook ด้วยการรัน git commit -m “Test commit”

หมายเหตุ: ถ้าต้องการข้าม pre-commit hook ชั่วคราว ให้ใช้ตัวเลือก --no-verify กับคำสั่ง git commit เช่น git commit -m “Test commit” --no-verify

เพิ่มเติมเกี่ยวกับ ruby

ruby30 เมษายน 2564

ทำให้วางโค้ด Ruby หลายบรรทัดใน Pry ได้เมื่อใช้ leading dot notation

ตอนนี้เราใช้ leading dot notation กันบ่อยมาก เช่น

ruby14 ตุลาคม 2563

Heredoc แบบไม่มี interpolation

บางครั้งคุณอาจอยากใช้ Heredoc ของ Ruby แบบไม่มี interpolation ('#{....}') ซึ่งทำได้โดยใส่ dash เดี่ยวรอบ keyword ของคุณ:

ruby13 ตุลาคม 2563

สร้าง hashtable ระดับกลางให้อัตโนมัติใน Ruby

hashtable ระดับกลางทั้งหมดจะถูกสร้างขึ้นให้เองโดยอัตโนมัติ

มีโปรเจกต์ในใจ?

เรายินดีรับฟังสิ่งที่คุณกำลังสร้าง

เริ่มต้นสนทนาhello@oozou.com
OOZOU Logo

กรุงเทพฯ · สิงคโปร์ · ฮ่องกง

X
Facebook
Instagram
LinkedIn

บริการ

  • พัฒนาเว็บ
  • เอเจนต์ AI และ Generative AI
  • พัฒนาแอปมือถือ
  • วิศวกรรมและวิเคราะห์ข้อมูล
  • UI/UX และการออกแบบผลิตภัณฑ์
  • การเปลี่ยนผ่านสู่ดิจิทัล

บริษัท

  • เกี่ยวกับเรา
  • ร่วมงานกับเรา
  • บล็อก
  • กรณีศึกษา
  • Today I Learned
  • ติดต่อเรา

เพิ่มเติม

  • อุตสาหกรรม
  • เครือข่ายพันธมิตร
© 2026 OOZOU สงวนลิขสิทธิ์
นโยบายความเป็นส่วนตัวจรรยาบรรณนโยบาย ABAC