บทที่ 01 / Monorepo
Monorepo คืออะไร
เข้าใจความหมายของ Monorepo และความสัมพันธ์ระหว่าง repository, application และ package
Monorepo คืออะไร
Monorepo ย่อมาจาก Monolithic Repository คือรูปแบบที่เก็บหลาย application และหลาย package ของ product ไว้ใน Git repository เดียวกัน จุดสำคัญไม่ได้อยู่ที่จำนวนโฟลเดอร์ แต่อยู่ที่การมี source of truth ร่วมกันสำหรับ code, dependency และ workflow ของ product
ในตัวอย่างนี้ Task Board เป็น product เดียว มี Next.js เป็น web application และ NestJS เป็น API application ทั้งสองอยู่ใน repository เดียว แต่ยังมี boundary ของตัวเอง
จำให้แม่น
ที่เก็บ source ร่วมกัน
Monorepo ตัดสินใจเรื่องขอบเขตของ repository ไม่ได้บอกว่า runtime ต้องเป็นแบบใด
มีหลาย app หรือ package ได้
แต่ละ app ยังมี package.json, script และ owner ของตัวเองได้
อยู่ที่เดียวไม่ได้แปลว่า import ได้ทุกอย่าง
การเชื่อมกันต้องผ่าน dependency ที่ประกาศและ boundary ที่ทีมกำหนด
Monorepo แก้ปัญหาอะไร
เมื่อ product มี web, API, shared types และ tooling หลายชุด การแยก repository อาจทำให้การเปลี่ยนแปลงหนึ่ง feature ต้องเปิดหลาย pull request และตรวจ version ให้ตรงกัน Monorepo รวมบริบทเหล่านี้ไว้ให้ทีมเห็นการเปลี่ยนแปลงเป็นชุดเดียว
- เปิด pull request เดียวแล้วเปลี่ยน web, API และ contract ที่เกี่ยวข้องได้พร้อมกัน
- ใช้ lockfile และคำสั่งมาตรฐานร่วมกันทั้ง product
- สร้าง dependency graph เพื่อรู้ว่า package ใดได้รับผลกระทบ
- แชร์ config และ tooling โดยไม่ต้อง copy ไฟล์ไปหลาย repository