ถ้าต้องการทำอะไรใน Ruby น่าจะมี gem สำหรับมัน แท้จริงมีสิบๆ ตัว บางตัว elegant, featureful, well-maintained บางตัวเขียนแก้ use case ครั้งเดียว เลือกมาก ตอนที่คุณ後悔เพิ่ม gem ในโปรเจกต์ มันปวดเมื่อเปลี่ยนกลับ
สถิติ
ตอนต้องการ library แก้ปัญหา ผมเริ่มที่ Ruby Toolbox วิธีดีได้ list gems ใน category (เช่น "Subscription Management") พร้อม:
มีกี่คนใช้?
Gems ยอดนิยมมักนิยมเพราะเหตุผล และง่ายขอช่วยเหลือถ้าทุกคน用 gem เดียวกัน
อัปเดตล่าสุด/บ่อยแค่ไหน?
Gem ได้ consistent updates? หรือ Rails 3.2 compatibility upgrade ยังค้างใน PR queue? ถ้า release ล่าสุดปีๆ ไป ข้ามไปก่อน จะไม่ compatible กับ app
กับ gems จาก Ruby Toolbox กรอง 2 เกณฑ์แรก ควรได้ list gems ที่ actively considering Ruby Toolbox ให้ links ไป source, docs, website, bug tracker ที่ต้องการต่อ
โค้ด & documentation
Gem documented ดีไหม?
เช็ค website ถ้ามี Docs ดีไหม? มี RDoc? หาคำตอบได้ตอนต้องการไหม?
Well-tested ไหม?
ดู tests มี
test/หรือspec/directory ไหม? มี tests ไปกว่าtest_truth? Author จะรู้ไหมถ้า cause regression?ดู issues และ pull requests
Bugs fix เร็วไหม? มี discussion บน bugs/PRs และ fix ไป? หรือแค่นั่งค้าง?
ค้นหาชื่อ gem บน Google, StackOverflow, reddit
คนพูดยังไง? Gem ไหน recommended ไหน discouraged?
ค้น GitHub หา classes ที่ gem provide
ใช้ใน real-world apps ยังไง ดูง่ายไหม? หรือ devs อื่นต้อง hack around ปัญหาใน gem?
จุดนี้ควรเหลือ candidates เล็กน้อย
Touchy-feely stuff
เกณฑ์เหล่านี้ subjective นิดหน่อย เพราะต้องหา gem สำหรับ โปรเจกต์คุณ แตพลาดตรงนี้ จะ後悔ภายหลัง
จาก examples ใน docs library รู้สึก Ruby-ish ไหม?
用 Ruby idioms? หรือรู้สึกเขียน Java หรือ PHP? เกิดบ่อยมากกับ API wrappers
สร้างจากชิ้นเล็กๆ ที่ทำงานร่วมกันดีไหม?
用 objects ที่ author ให้ สร้างสิ่งที่ author ไม่คิดถึงได้ไหม? เพราะคุณอาจอยากทำ
Gem อยู่ใน dependencies ของ gem อื่นที่อยู่ในโปรเจกต์แล้วไหม?
Bonus ประหยัด integration time และรู้ว่าไม่ต้องสู้ Bundler versioning
Gem assume เกี่ยว app คุณไหม? App คุณ fit assumptions และจะ fit ตลอดไหม?
Gems บางตัวอย่าง ActiveResource assume API ของ server ที่คุย Others เช่น ResourceController assume controller จะทำอะไร Gems ที่ assume ทำให้เร็วและโค้ด simple ตระหว่าง assumptions hold แตถ้า assumptions incompatible กับ app คุณจะใช้วันๆ monkey patch, debug, และสุดท้ายถอด gem ออก
Whoa, เยอะมาก
ยepad เกณฑ์เยอะเลือก best gem และปกติไม่ต้องผ่านทั้งหมด เยอะแค่เข้า Ruby Toolbox เลือก gem ยอดนิยม
แตมี gems ที่กลายเป็น core ของ app HTTP libraries, database libraries หรืออะไรที่สัญญาทำ controllers clean สิ่งเหล่านี้ worth taking extra time ให้แน่ใจว่า gems เหล่านี้ clean, well-maintained, well-documented และ fit mental model ว่าควรทำงานยังไง
ผมรวบรวมเกณฑ์ทั้งหมดใน Google Spreadsheet ตอนต้องเลือกจาก gems เยอะที่ดูเหมือนกัน สามารถเปรียบเทียบง่าย ดาวน์โหลดได้ที่นี่