จัดการ PHP Coding Standard ใน Sublime ด้วย PHP Code Sniffer

Nutchalum Kitpongsai
THiNKNET Engineering
3 min readNov 16, 2016

--

ปัญหาที่พบบ่อยมากๆในวงการ Developer ในบ้านเราอย่างหนึ่งคือ มองไม่เห็นถึงความสำคัญของเจ้าตัว Coding Standard เท่าที่ควร จะดีขึ้นหรือปล่าว ถ้ามีเครื่องมือมาช่วยจัดการ ?

หลายๆคนมองว่าไม่เห็นจำเป็นเลย เพราะแค่เขียน code ให้มันทำงานได้ก็พอแล้วนี่คำตอบนี้ไม่ผิดครับถ้าทำงานคนเดียว แต่ถ้าทำงานร่วมกันคนอื่นละ? แน่นอนว่ามนุษย์เราแต่ละคนย่อมมีสไตล์ที่แตกต่างกัน การใช้ชีวิตอยู่ร่วมกันในสังคมจึงต้องมีสิ่งที่เรียกว่ากฏหมาย เพื่อให้ทุกคนสามารถใช้ชีวิตอยู่ร่วมกันได้

แน่นอน Developer ก็เช่นกันถ้าจะให้ทำงานร่วมกันได้ ก็ควรจะเขียน code ในรูปแบบและทิศทางเดียวกัน เพื่อให้ง่ายต่อการ maintenance, refactor, code review, etc.

PHP Coding Standard คืออะไร มีกี่รูปแบบ

PHP Coding Stadard ปัจจุบันมีอยู่ประมาณ 17 แบบด้วยกัน แต่ที่ Accept แล้วมีอยู่เพียง 5 แบบเท่านั้น สามารถเข้าไปดูรายละเอียดได้ตาม link ด้านล่างเลย

PHP Code Sniffer คืออะไร ?

เป็น binary file ตัวนึงที่ไว้ใช้ตรวจสอบ PHP Coding Standard ภายในไฟล์ของเราว่าเป็นไปตามกฏหรือไม่ และแน่นอนว่าจำเป็นต้องมี binary ตัวนี้อยู่ในเครื่องก่อน ซึ่งใน github ได้มีวิธีลงแบบต่างๆให้ดู แต่ผมขอยกวิธีใช้ curl มาเป็นตัวอย่าง

curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar
mv phpcs.phar /usr/local/bin/phpcs

ทดสอบการทำงานของ phpcs ผ่าน project ที่เขียนขึ้นมาเอง

ตัวอย่าง code ที่ตรวจสอบพบว่าผิด coding standard PSR-2 (default)

สังเกตุผลลัพธ์ที่ได้ผ่านหน้า console จะพบว่ามี error ที่บอกจุดและข้อผิดพลาดอย่างชัดเจน

Integrate กับ Sublime Text Editor

แน่นอนว่าเราคงไม่อยากมานั่ง run คำสั่งทุกครั้งที่ต้องการจะตรวจสอบ เราคงอยากจะใช้ชีวิตสบายๆ แบบพิมพ์ไปตรวจไปใน Sublime ซึ่งจริงๆแล้วมี Configuration ให้ลองเล่น ลองใช้เยอะมาก แต่ผมจะขอยกตัวอย่างแค่ตรวจสอบเวลากด save file
แล้วแสดง errors log พร้อมทั้ง highlight บริเวณที่ผิด (ลูกเล่นอื่นๆ หาอ่านเพิ่มเติมได้จาก github ของเจ้าตัวเลย)

เริ่มต้นเลยโดยการลง Sublime Package ผ่าน Package Control ที่ชื่อว่า Phpcs

phpcs สังเกตุได้ว่า install จาก github ด้านบน

จากนั้นเราก็ต้องทำการ config เล็กๆน้อย ของผมเลือกที่จะทำใน user settings ของตัว package เองเลย เมื่อเปิดไฟล์ที่ถูกต้องแล้ว copy & paste options จากด้านล่างไปลองใช้งานได้เลยครับ

ตำแหน่งของไฟล์ settings ที่เราจะทำการใส่ option ต่างๆลงไป
{
"extensions_to_execute":
[
"php"
],
"phpcs_additional_args":
{
"--standard": "PSR2",
"-n": ""
},
"phpcs_executable_path": "/usr/local/bin/phpcs",
"phpcs_execute_on_save": true,
"phpcs_linter_command_on_save": false,
"phpcs_linter_regex": "(?P<message>.*) on line (?P<line>\\d+)",
"phpcs_linter_run": true,
"phpcs_outline_for_errors": true,
"phpcs_php_path": "/usr/local/bin/php",
"phpcs_show_errors_in_status": true,
"phpcs_show_errors_on_save": true,
"phpcs_show_gutter_marks": true,
"phpcs_show_quick_panel": true,
"show_debug": true
}

ทดลองใช้งาน

ทดสอบใช้งานจริงกันเลยดีกว่า เริ่มจากเขียน php ขึ้นมาสักไฟล์

ตัวอย่างไฟล์ php ที่เขียนขึ้นมาเพื่อทดสอบ

จากนั้นกดเซฟไฟล์นั้นดู และสังเกตุผลลัพธ์ที่ได้ จะมี log โผล่ขึ้นมาให้อ่านโจ่งแจ้งไปเลย ก็เห็นกันชัดๆ ณ จุดนั้นไปเลยว่าเราผิดอะไรจุดไหนบ้าง

ผลลัพธ์หลังการกดเซฟ จะมี log ขึ้นมาให้อ่านว่าจบรรทัดไหนที่ผิด standard

แล้วถ้าเราคิดค้น Standard ขึ้นมาเองนอกเหนือจาก PSR เบื้องต้นละ ?

สามารถทำได้เช่นกันครับ โดยการเขียน standard ของเราให้อยู่ในรูปของ .xml ซึ่งจะอยู่ในรูปของ syntax key:value เป็นส่วนใหญ่ เนื่องจากเป็นวิธีการใช้งานเบื้องต้นเลยไม่ได้ยกตัวอย่างมาให้ดูครับ แต่สามารถหาดูตัวอย่างจากใน internet ได้เลย

เครื่องมือนี้น่าจะช่วยแก้ปัญหาของ Developer หลายๆคนได้อย่างมีประสิทธิภาพ และที่สำคัญยังทำให้ code ของเรามี standard ที่ดีมากยิ่งขึ้น เมื่อมี code ที่ดีแล้วหวังว่าจะช่วยให้อะไรๆก็ตามดีขึ้นไปอีก หากมีข้อสงสัย หรือติดปัญหา สามารถสอบถามได้เลยครับ

ที่สำคัญเวลาใช้ library หรือ plugin หรือใดๆก็ตาม ควรสนับสนุนเจ้าของผลงานด้วยนะครับ (อย่างเช่น github ก็กด star ให้ด้วย)

--

--