ชุมชนนักพัฒนากำลังเผชิญกับการเปลี่ยนแปลงครั้งสำคัญในวิธีการจัดการเครื่องมือพัฒนาและสภาพแวดล้อมการทำงาน นักพัฒนาจำนวนมากกำลังเปลี่ยนจากตัวจัดการเวอร์ชันแบบดั้งเดิมอย่าง asdf มาใช้ mise ซึ่งเป็นโซลูชันที่ครอบคลุมมากกว่าและสัญญาว่าจะแก้ไขปัญหาที่มีมานานในเวิร์กโฟลว์การพัฒนาซอฟต์แวร์
ปัญหาปลั๊กอินที่ผลักดันให้เกิดการเปลี่ยนแปลง
หนึ่งในตัวเร่งหลักของการย้ายครั้งนี้เกิดจากความหงุดหงิดพื้นฐานกับเครื่องมือที่มีอยู่ ตัวจัดการเวอร์ชันแบบดั้งเดิมอย่าง asdf ต้องการให้นักพัฒนาติดตั้งปลั๊กอินด้วยตนเองสำหรับแต่ละภาษาโปรแกรมหรือเครื่องมือที่ต้องการจัดการ สิ่งนี้สร้างความยุ่งยากในกระบวนการพัฒนาและเพิ่มความซับซ้อนที่ไม่จำเป็นให้กับการดำเนินงานที่ควรจะตรงไปตรงมา
Mise แก้ไขปัญหานี้โดยให้การสนับสนุนในตัวสำหรับเครื่องมือหลายร้อยชิ้นโดยไม่ต้องติดตั้งปลั๊กอินแยก เมื่อนักพัฒนาต้องการลองเครื่องมือใหม่ พวกเขาสามารถติดตั้งได้ด้วยคำสั่งเดียวแทนที่จะต้องค้นหาและติดตั้งปลั๊กอินที่เหมาะสมก่อน
ข้อได้เปรียบหลักของ mise เมื่อเทียบกับ asdf:
- ไม่จำเป็นต้องติดตั้งปลั๊กอิน - รองรับเครื่องมือหลายร้อยชนิดในตัว
- การติดตั้งเครื่องมือและการเปลี่ยนเวอร์ชันแบบอัตโนมัติตามการกำหนดค่าของโปรเจกต์
- การจัดการตัวแปรสภาพแวดล้อม (ทดแทนฟังก์ชันการทำงานของ direnv)
- ความสามารถในการกำหนดและรันงาน
- ประสิทธิภาพและการใช้งานที่ดีกว่า
- ความเข้ากันได้แบบ drop-in replacement กับการกำหนดค่า asdf ที่มีอยู่
ทีมงาน Monorepo เห็นประโยชน์ทันที
ทีมพัฒนาที่จัดการโค้ดเบสขนาดใหญ่พบว่าแนวทางของ mise ในการมาตรฐานเครื่องมือมีคุณค่าเป็นพิเศษ ทีมงานรายงานว่าคำขอสนับสนุนที่เกี่ยวข้องกับการไม่ตรงกันของเวอร์ชันหายไปเกือบหมดหลังจากนำ mise มาใช้เป็นโซลูชันมาตรฐานสำหรับการจัดการเครื่องมือ
ตอนแรกผมเสนอ mise เป็นเครื่องมือที่แนะนำ และหลังจากนั้นสักพักผมประกาศว่ามันเป็นวิธีเดียวที่รองรับในการสร้างโปรเจกต์ และปัง! คำขอสนับสนุนทั้งหมดที่เคยจบลงด้วยโอ้ เวอร์ชัน XYZ ของฉันไม่ตรงกับความต้องการของโปรเจกต์หายไปแล้ว
ความสามารถของเครื่องมือในการติดตั้งและสลับระหว่างเวอร์ชันต่างๆ ของภาษาโปรแกรมและเครื่องมือพัฒนาโดยอัตโนมัติตามการกำหนดค่าโปรเจกต์ได้พิสูจน์แล้วว่ามีคุณค่าเป็นพิเศษสำหรับทีมที่มีระดับประสบการณ์ทางเทคนิคที่หลากหลาย
เกินกว่าการจัดการเวอร์ชัน
สิ่งที่ทำให้ mise แตกต่างจากตัวจัดการเวอร์ชันแบบดั้งเดิมคือขอบเขตที่ขยายออกไป นอกจากการจัดการเวอร์ชันเครื่องมือแล้ว มันยังจัดการตัวแปรสภาพแวดล้อมและสามารถกำหนดงานเฉพาะโปรเจกต์ได้ ซึ่งหมายความว่าทีมสามารถมาตรฐานไม่เพียงแต่เวอร์ชันของเครื่องมือที่ใช้ แต่ยังรวมถึงวิธีการสร้าง ทดสอบ และปรับใช้แอปพลิเคชันของพวกเขาด้วย
แนวทางที่ครอบคลุมนี้ได้ดึงดูดนักพัฒนาที่เคยพึ่งพาเครื่องมือหลายตัวเพื่อให้ได้ฟังก์ชันการทำงานที่คล้ายกัน การรวมเข้าด้วยกันช่วยลดภาระทางปัญญาในการจำคำสั่งและการกำหนดค่าที่แตกต่างกันในโปรเจกต์ต่างๆ
การถกเถียงเรื่องทางเลือก Nix
ในขณะที่ mise ได้รับความนิยม นักพัฒนาบางคนสนับสนุนแนวทางที่รุนแรงกว่าอย่าง Nix ซึ่งเสนอการจัดการสภาพแวดล้อมที่ครอบคลุมยิ่งกว่า อย่างไรก็ตาม Nix มาพร้อมกับเส้นโค้งการเรียนรู้ที่สูงชันซึ่งหลายทีมพบว่าเป็นอุปสรรค Mise หาจุดสมดุลโดยให้การปรับปรุงที่สำคัญเหนือเครื่องมือแบบดั้งเดิมในขณะที่ยังคงรักษาแนวคิดและเวิร์กโฟลว์ที่คุ้นเคย
การเลือกระหว่างแนวทางเหล่านี้มักจะขึ้นอยู่กับขนาดทีม ความเชี่ยวชาญทางเทคนิค และความซับซ้อนของสภาพแวดล้อมการพัฒนา ทีมเล็กและผู้ที่ใหม่กับเครื่องมือขั้นสูงมักจะโน้มเอียงไปหา mise ในขณะที่ทีมที่มีความลึกทางเทคนิคมากกว่าอาจลงทุนเรียนรู้ระบบของ Nix ที่มีพลังมากกว่าแต่ซับซ้อนกว่า
โซลูชันการจัดการเครื่องมืออื่น ๆ:
- แนวทางแบบดั้งเดิม: ตัวจัดการเฉพาะภาษา ( nvm , pyenv , rustup , ฯลฯ)
- asdf: ตัวจัดการเวอร์ชันแบบครอบคลุมที่ใช้ปลั๊กอิน
- mise: ตัวจัดการเครื่องมือแบบครอบคลุมที่ไม่ต้องใช้ปลั๊กอินและรองรับงาน
- Nix/Home Manager: การจัดการสภาพแวดล้อมแบบครอบคลุมแต่ซับซ้อน
- devbox: โซลูชันที่ใช้ Nix เป็นฐานพร้อมการกำหนดค่าที่ง่ายขึ้น
ข้อพิจารณาด้านความปลอดภัยยังคงอยู่
แม้จะมีความกระตือรือร้นเกี่ยวกับ mise แต่นักพัฒนาก็ไม่ได้เพิกเฉยต่อผลกระทบด้านความปลอดภัยที่อาจเกิดขึ้น ความสามารถของเครื่องมือในการดาวน์โหลดและติดตั้งซอฟต์แวร์จากแหล่งต่างๆ โดยอัตโนมัติทำให้เกิดความกังวลด้านความปลอดภัยของห่วงโซ่อุปทาน องค์กรในอุตสาหกรรมที่มีการควบคุมอาจพบว่าความไม่โปร่งใสเกี่ยวกับแหล่งที่มาของการพึ่งพานี้เป็นปัญหาสำหรับข้อกำหนดด้านความปลอดภัยของพวกเขา
ความกังวลนี้สะท้อนถึงความท้าทายที่กว้างขึ้นในการพัฒนาซอฟต์แวร์สมัยใหม่: การสร้างสมดุลระหว่างความสะดวกและผลิตภาพกับความปลอดภัยและข้อกำหนดการปฏิบัติตามกฎระเบียบ ทีมต้องชั่งน้ำหนักผลประโยชน์ด้านผลิตภาพเทียบกับท่าทีด้านความปลอดภัยเฉพาะและภาระผูกพันด้านกฎระเบียบของพวกเขา
การย้ายไปใช้ mise แสดงให้เห็นมากกว่าแค่การเปลี่ยนเครื่องมือ มันสะท้อนถึงความพยายามอย่างต่อเนื่องของชุมชนนักพัฒนาในการลดความยุ่งยากและมาตรฐานเวิร์กโฟลว์ในขณะที่ยังคงรักษาความยืดหยุ่นที่จำเป็นสำหรับความต้องการของโปรเจกต์ที่หลากหลาย
อ้างอิง: Tools I love: mise(-en-place)