هذا الملف الواحد أصلح بيئة التطوير الخاصة بي (Devbox)

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00ملف الـ readme الخاص بك يكذب عليك، يقول إن الإعداد يستغرق خمس دقائق، ثم يتبين أن نسخة نود خاطئة وبايثون خاطئة
00:00:07بوستجرس مفقود، ودوكر يستغرق وقتاً طويلاً، والآن نحن نقوم بالتصحيح قبل أن نبدأ حتى
00:00:13بيئة التطوير الخاصة بك يجب ألا تعيش في ملف readme، بل يجب أن تكون في git، هذا ما تفعله devbox
00:00:20ملف devbox json واحد، أمر devbox shell واحد، نفس البيئة لكل مطور بدون تثبيتات عامة
00:00:28ولا حاجة لمعرفة بـ nix، دعني أرِك
00:00:30في البداية تبدو devbox بسيطة للغاية، أنت تنشئ devbox json وتدرج الأدوات التي يحتاجها مشروعك
00:00:42نود، جو، بايثون، بوستجرس، أي شيء يحتاجه مشروعك فعلياً، أنت ترفع ذلك الملف، ثم يمكن لأي شخص آخر فقط
00:00:50تشغيل devbox shell وسيحصلون على نفس البيئة التي لديك، نفس الإصدارات والأدوات والسكربتات، لا تثبيتات
00:00:58عامة، لا “يرجى تثبيت هذه الأشياء الثمانية أولاً”، لا حالات homebrew من سنوات مضت، إعدادك
00:01:03يتوقف عن العيش في ذاكرة شخص ما ويبدأ في العيش داخل المستودع الخاص بك، الآن هذا يبدو صغيراً ولكن إذا سبق لك
00:01:09أن أضعت نصف يوم بسبب إعداد محلي معطل فأنت تعلم بالفعل أن هذا ليس صغيراً، إذا كنت تستمتع
00:01:16بأدوات البرمجة لتسريع سير عملك، تأكد من الاشتراك، لدينا فيديوهات تصدر طوال الوقت
00:01:20الآن نحن نبدأ من هنا، لذا سأبدأ بمشروع فارغ، سأنشئ مجلداً جديداً
00:01:25سنسميه devbox demo، ندخل إلى المجلد وكل ما نحتاجه بمجرد حصولنا على devbox هو تشغيل
00:01:31devbox init، تقوم devbox بإنشاء ملف يسمى devbox json، في الوقت الحالي هو فارغ تقريباً، إنه مجرد
00:01:39هيكل أساسي توفره devbox، الآن لنضف الأدوات التي يحتاجها هذا المشروع فعلياً، لإضافة أدوات يمكننا
00:01:45تنفيذ devbox add وسأقوم بتثبيت أشياء مثل جو و node.js وبعض بايثون، الآن هذا هو
00:01:52الجزء المهم، أنا لا أقوم بتثبيت هذه الأشياء عالمياً، أنا لا أغير نسخة نود الخاصة بنظامي، أنا لا ألمس نظامي
00:02:00مع بايثون، هذه الأدوات تنتمي لهذا المشروع الآن، عندما أشغل devbox shell وأنا داخل بيئة مشروع نظيفة
00:02:09الآن بعد أن أصبحت في هذه البيئة، يمكنك فقط التحقق من الإصدارات، صحيح؟ go version، node
00:02:14version، python version، صحيح؟ يمكنني التحقق من كل شيء للتأكد من أنه يعمل، الآن تلك هي المكافأة الكبرى
00:02:19طلب المشروع أدوات محددة، منحتني devbox تلك الأدوات، الآن لنضف سكربت، وداخل devbox
00:02:27json يمكننا في الواقع تحديد اختبار، وسأقوم فقط بطباعة أن الاختبارات تعمل وسأحصل على إصدار نود
00:02:34وإصدار جو عندما تشغل devbox run test، والآن نفس الأمر يعمل لأي شخص يستخدم هذا المستودع
00:02:42نفس السكربت، نفس الأدوات، نفس البيئة، الآن شاهد ما يحدث عندما أغادر، يمكنك فقط تشغيل exit
00:02:48ستغادر تلك البيئة، وسأعود إلى بيئة جهازي الطبيعية، إذاً كان ذلك بسيطاً جداً، أليس كذلك؟
00:02:53ما الذي تفعله devbox فعلياً؟ حسناً، تستخدم devbox نظام nix تحت كل ذلك، nix رائع لأنه
00:03:00مصمم للتكرار، بدلاً من قول “ثبت أياً كان ما يصادف أنه الأحدث اليوم”
00:03:06يمكنه تثبيت الأدوات الدقيقة التي يحتاجها مشروعك فعلياً، الآن هذا هو الجزء الجيد، الجزء الصعب هو
00:03:12أن nix قد يبدو كعالم جديد تماماً، هناك الكثير من المفاهيم الرائعة ولكنها ليست بالضبط
00:03:18ودودة عندما كان كل ما تريده هو إصدار نود الصحيح، devbox تقدم لنا شيئاً مختلفاً
00:03:23هنا تقول: ماذا لو حافظنا على التكرارية ولكن جعلنا سير العمل يبدو طبيعياً؟ فبدلاً من
00:03:29كتابة تعبيرات nix، يمكنك استخدام أوامر مثل devbox add و devbox search و shell و run و services، كل
00:03:37هذه الأوامر أبسط بكثير، ويحصل مشروعك على ملفين مهمين: ملف json وملف
00:03:44lock، فكر في devbox json على أنه ما تحتاجه بيئتنا، وفكر في ملف devbox lock على أنه التثبيت لتثبيت
00:03:52ما حصلت عليه بالضبط، أنت ترفع كليهما، والآن بيئتك ليست مجرد فقرة في ملف readme
00:03:58بل هي جزء من المشروع الفعلي، تعمل devbox على mac os و linux و wsl، ويمكنها التكامل مع vs code، ويمكنها
00:04:06تحديد السكربتات، ويمكنها إدارة الخدمات مثل قواعد البيانات، وعندما تحتاج إلى ذلك يمكنها التصدير لأشياء مثل
00:04:12docker و dev containers وسير عمل ci، قيمة هذا ليست مجرد “أداة رائعة”، صحيح؟ إنها أداة بسيطة للغاية، القيمة
00:04:19هي أعتقد الوقت فقط، المشكلة الأولى هي الـ readme، صحيح؟ يمكن للـ readme أن يقول أي شيء حقاً، يمكنه
00:04:26أن يقول “مهلا، ثبت نود 18” ولكن التطبيق قد تغير، إنه يحتاج حقاً إلى نود 20، المشكلة الثانية
00:04:32التي يساعد فيها هذا بالفعل هي التهيئة، إنه يومك الأول في العمل، يجب أن يكون من السهل البدء
00:04:37نحن نعلم أن هذا ليس هو الحال، صحيح؟ لذا لا ينبغي أن تحتاج إلى سؤال “ما هو إصدار نود الذي أحتاجه؟”، لا ينبغي
00:04:43أن تحتاج إلى مراسلة شخص ما: “مهلاً، ما هو إصدار بايثون الذي نستخدمه؟ هل أحتاج حقاً إلى بوستجرس محلياً؟ ولماذا
00:04:48هذا يعمل فقط مع تيمي الصغير هناك؟”، يجب أن يضطروا فقط إلى استنساخ المستودع، والدخول إلى الـ shell
00:04:52وتشغيل المشروع، إذا تعطل شيء ما، على الأقل الجميع يبدأون من نفس البيئة، المشكلة
00:04:58هي التلوث العالمي، تجربة الأدوات يجب ألا تدمر حاسوبك المحمول، أنت تريد جو 1.22 لهذا المستودع، فأنت تضيفه، أنت
00:05:06تريد نود 20 هنا ولكن شيئاً آخر في مكان آخر، جيد، لا بأس، الأدوات تعيش مع المشروع، نظامك
00:05:13يبقى أنظف، مع devbox يمكن مشاركة تعريف بيئتك بين التطوير المحلي
00:05:18والأتمتة، هل يحل ذلك كل مشاكل الـ ci؟ لا، لن يفعل ذلك، ولكنه يزيل فئة ضخمة من المشاكل الغبية
00:05:26والمشاكل الغبية هي التي تؤذينا أكثر، إنها بسيطة وما زلنا نعاني منها طوال
00:05:32الوقت، أخيراً هنا، هل سير عمل دوكر المحلي الثقيل؟ دوكر لا يزال رائعاً وبفارق كبير إذا
00:05:40كنت بحاجة إلى حاويات، استخدم حاويات، ولكن الكثير من الفرق تستخدم دوكر محلياً لأنهم لا يملكون طريقة أفضل
00:05:46لإدارة الأدوات، الآن ما هو جيد هنا هو أن سير العمل بسيط جداً: devbox add و shell و run، أنت
00:05:52لا تضطر إلى تعلم الكثير، تصبح البيئة جزءاً حقيقياً من مشروعك، ملفاً حقيقياً
00:05:57في المستودع، عندما يستخدم الجميع نفس الإصدارات والسكربتات، يصبح التصحيح أسهل، ولكن هذا رائع
00:06:03سوبر بسيط، ما سيزعجك هو حسناً، أول تنزيل لـ nix، استغرق الأمر بعض الوقت للتنزيل
00:06:09لا بأس، إنها المرة الأولى، حسناً، json بسيط ولكنه قد يصبح قبيحاً كما نعلم إذا أضفنا الكثير
00:06:15إليه، بالنسبة للسكربتات الأساسية لا بأس، بالنسبة لمنطق الإعداد المعقد لا تحشر أمر shell عملاق في json
00:06:22فقط ضع المنطق في ملف sh، ثم استدعه من devbox، وأخيراً devbox ليست بيئة تطوير سحابية كاملة
00:06:30إذا كنت بحاجة إلى برمجة تعتمد على المتصفح وعناوين url للمعاينة الفورية، فقد تظل ترغب في شيء مثل codespaces
00:06:36devbox هي الأفضل في التكرارية المحلية والـ ci، devbox لن تحل كل مشكلة تطوير
00:06:42ولكن يمكنها حل تلك التي تزعجنا أكثر، وهي في الحقيقة مجرد جعل المشروع
00:06:46يعمل، لذا قد تستحق التجربة، خاصة إذا كان مشروعك يحتوي على أكثر من لغة أو أكثر من
00:06:51أداة cli واحدة، إذا كنت تستمتع بأدوات برمجة كهذه، تأكد من الاشتراك في قناة better stack، سوف
00:06:56نراك في فيديو آخر.

Key Takeaway

تضمن أداة devbox بيئة تطوير متسقة ومكررة عبر عزل تبعات المشروع في ملفات تكوين (json وlock) داخل المستودع، مما يلغي أخطاء الإعداد وتعارض إصدارات البرامج.

Highlights

  • ملف devbox.json يحول بيئة التطوير من تعليمات نصية في ملف readme إلى تكوين فعلي داخل مستودع المشروع.

  • تعتمد devbox على نظام nix لضمان التكرارية، مما يضمن تثبيت نفس الإصدارات من الأدوات لجميع المطورين.

  • تمنع devbox التلوث العالمي للنظام عن طريق عزل الأدوات والنسخ داخل بيئة المشروع فقط.

  • تتكامل devbox مع أنظمة التشغيل macOS وLinux وWSL، بالإضافة إلى دعم Docker وCI.

  • يسمح أمر devbox shell بالدخول إلى بيئة مشروع نظيفة ومعزولة تحتوي على كافة الأدوات المطلوبة.

Timeline

مشاكل إعدادات بيئة التطوير

  • تعتمد بيئات التطوير غالباً على تعليمات يدوية في ملف readme عرضة للخطأ.
  • تسبب الاختلافات في نسخ الأدوات مثل node أو بايثون وتوافر قواعد البيانات تأخيراً في بدء العمل.

تؤدي التعليمات اليدوية غير الدقيقة إلى إضاعة وقت المطورين في تصحيح أخطاء البيئة المحلية. بدلاً من الاعتماد على ذاكرة المطور أو توثيق نصي قديم، يجب أن تكون بيئة التطوير جزءاً مدمجاً في مستودع الكود لضمان التوافق التام.

آلية عمل devbox

  • يتم إعداد بيئة التطوير عبر تنفيذ أمر devbox init لإنشاء ملف التكوين.
  • تستخدم أدوات مثل devbox add لإضافة الأدوات المطلوبة للمشروع دون تثبيتها بشكل عالمي على النظام.
  • يوفر أمر devbox shell بيئة معزولة تحتوي على الإصدارات المحددة في المشروع.

تسمح هذه العملية للمطورين بالبدء في مشروع جديد ببيئة فارغة وإضافة ما يحتاجونه فقط. يتم الحفاظ على نظافة نظام التشغيل الأساسي لأن الأدوات تبقى مقيدة ببيئة المشروع وتختفي عند مغادرة الـ shell.

القيمة التقنية والتشغيلية

  • تستخدم devbox محرك nix تحت الغطاء لضمان التكرارية والدقة في تثبيت الأدوات.
  • تنتج الأداة ملفين هما devbox.json وdevbox.lock لتوثيق وتثبيت حالة البيئة بدقة.
  • تقلل الأداة من الحاجة إلى اعتماد Docker الثقيل محلياً إلا في حالات الحاجة الفعلية للحاويات.

تقدم devbox واجهة مبسطة فوق نظام nix المعقد، مما يسهل سير العمل دون الحاجة لتعلم تعبيرات nix. يساعد ذلك في تسريع عملية التهيئة للموظفين الجدد ويحل مشاكل التلوث العالمي للأدوات وتضارب الإصدارات في سير عمل CI والبيئة المحلية.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video