บทที่ 02 / Monorepo
Monorepo vs Polyrepo
เปรียบเทียบการรวมหลาย project กับการแยก repository ออกจากกัน
เปรียบเทียบโครงสร้าง
Polyrepo แยกแต่ละ application หรือ package ไว้คนละ repository ส่วน Monorepo รวมไว้ใน repository เดียว ทั้งสองแบบใช้สร้าง product จริงได้ ไม่มีรูปแบบใดชนะทุกสถานการณ์
| ประเด็น | Monorepo | Polyrepo |
|---|---|---|
| Source code | อยู่ใน repository เดียว | แยกตาม repository |
| การเปลี่ยนแปลงข้าม app | ทำใน pull request เดียวได้ | ต้องประสานหลาย repository |
| Dependency version | ควบคุมร่วมกันง่ายกว่า | แต่ละ repo อาจ drift |
| Boundary | ต้องออกแบบ package boundary ให้ดี | repository เป็น boundary ที่แข็งกว่า |
| CI | ต้องเลือก task ตาม package ที่ได้รับผลกระทบ | แยก pipeline ตาม repo ได้ง่าย |
วิธีเลือกโดยไม่ใช้คำตอบสำเร็จรูป
ให้เริ่มจากการถามว่า code ชุดนี้มี product ownership ร่วมกันหรือไม่ ทีมต้องเปลี่ยนหลายส่วนเป็น transaction เดียวหรือไม่ และทีมพร้อมดูแล dependency graph ร่วมกันหรือไม่
คำถามก่อนเลือก
01
มีการเปลี่ยนแปลงข้าม app บ่อยหรือไม่
ถ้ามีบ่อย Monorepo ช่วยลดการประสานงานและ version mismatch ได้
02
ต้องการแยกสิทธิ์และวงจร release แข็งแค่ไหน
ถ้าแต่ละทีมมี ownership และ release policy แยกชัด Polyrepo อาจเหมาะกว่า
03
มี tooling รองรับการจัดการ graph หรือยัง
Monorepo ที่ไม่มีคำสั่งมาตรฐานจะกลายเป็น folder ใหญ่ที่ดูแลยาก