Monorepo มาจากคำว่า mono (หนึ่งเดียว) บวกกับ repo (repository = คลังเก็บข้อมูล)
Monorepo คือการรวบรวมหลายๆโปรเจกต์อยู่ใน repository เดียวกัน รวบรวมทุกอย่างอยู่ในที่เดียว นักพัฒนาสามารถเข้าถึงส่วนต่างๆใน repository ได้ง่าย เป็น single version of truth ที่มี dependency version เดียวในทุกๆโปรเจกต์ ในทางตรงกันข้ามของ monorepo เราจะเรียกว่า polyrepo (หรือ multirepo ) คือการที่แต่ละโปรเจกต์มี repo เป็นของตัวเอง 1 โปรเจกต์ ต่อ 1 repo แต่ละโปรเจกต์แยกจากกันโดยสิ้นเชิง สามารถเลือกใช้ third-party-library ใน repo ของตัวเองได้ตามความเหมาะสมและมีการจัดการ test, build, deploy ที่แตกต่างกัน อาจมีการแชร์ code ระหว่างโปรเจกต์ได้โดยการสร้าง repo กลางสำหรับเป็น share library repo ปัญหาของ polyrepo ที่พบก็คือเมื่อ share library มีการเปลี่ยนแปลงหรืออัพเดตเกิดขึ้น โปรเจกต์อื่นที่มี dependency จะยังไม่อัพเดตทันที ทำให้ version ไม่ตรงกัน ซึ่ง monorepo สามารถช่วยแก้ปัญหาตรงนี้ได้
ปัจจุบันบริษัทเทคโนโลยียักษ์ใหญ่ได้มีการนำ monorepo ไปใช้ในการจัดการ repository อย่างเช่น Google, facebook หรือ uber ซึ่งเป็นกรณีศึกษาที่น่าสนใจว่า monorepo มีข้อดีข้อเสียเป็นอย่างไรและเมื่อไหร่ถึงควรเลือกใช้ monorepo สามารถนำไปประยุกต์หรือปรับใช้กับการทำงานได้อย่างไร
การใช้จะ monorepo สิ่งต้องคำนึงถึงเลยคือรูปแบบการทำงานของคนในทีม การร่วมกันทำงานใน repo เดียวกัน ต้องการแชร์หรือ reuse code ระหว่างโปรเจกต์ไหม หรือต้องการเก็บข้อมูลไว้ใน repository เดียวกันรึเปล่า dependency ที่เกิดการเปลี่ยนแปลงสามารถกระทบกับโปรเจกต์อื่นได้ไหม
ถ้าโปรเจกต์ของเราไม่ได้ใหญ่มากและต้องการความรวดเร็วในการ test, build, deploy ขึ้น server การใช้ polyrepo ก็อาจจะเหมาะสมมากกว่า
อ้างอิง:
ตำแหน่ง Front-end Developer สนใจใน Technology ที่เกี่ยวข้องกับ Web Application