لقد استغنيت عن dotenv واستخدمت Varlock (إليك السبب)

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00هذا هو Valor، أداة مفتوحة المصدر لإدارة متغيرات البيئة تتيح لك
00:00:04عدم تخزين الأسرار كنصوص مجردة على القرص مرة أخرى، وتعمل عبر جلب متغيرات البيئة
00:00:10محليًا أو عبر مدير كلمات مرور مثل 1Password وBitwarden وAWS وغيرها الكثير باستخدام
00:00:16مخطط آمن النوع (Type-safe)، ثم حقن أسرارك في تطبيقك عند التشغيل، مما يجعل ملف .env
00:00:21آمنًا للذكاء الاصطناعي وحتى للنشر علنًا على GitHub. ولكن كيف يعمل هذا فعليًا،
00:00:27وما قصة هذا السينتكس الغريب؟ اضغط اشتراك ولندخل في التفاصيل.
00:00:31كم مرة بدأت دورًا برمجيًا جديدًا، وحصلت على الكود، وشغلته محليًا
00:00:39ولم يعمل، لتكتشف لاحقًا أنك تفتقد ملف .env تحتاجه من مبرمج آخر
00:00:45أو من مخزن مشفر، وعليك تكرار هذه العملية مرارًا وتكرارًا
00:00:50في كل مرة يتم فيها تحديث ملف .env؟ هذه هي المشكلة التي وجد Valor لحلها، وأيضًا لحل
00:00:56مشكلة عملاء الذاء الاصطناعي الذين يتم اختراقهم لجلب أسرار لا ينبغي لهم الوصول إليها. لنرَ
00:01:02كيفية عمله. إليكم مشروع صغير أعمل عليه يقوم بإنشاء مقالات من
00:01:06فيديوهات تويتر باستخدام Whisper من OpenAI لتفريغ الفيديو وClaude لكتابة المقال.
00:01:12لكننا سنبدأ بشيء بسيط ونستخدم Valor لتغيير رقم المنفذ (Port). مع تثبيت Valor
00:01:17مسبقًا، يجب أن يكون لدينا ملف .env.schema فارغ حاليًا. سيكون هذا الملف هو المصدر
00:01:23الوحيد للحقيقة لكل متغيرات البيئة لدينا، ويمكن رفعه على GitHub في
00:01:28مستودع عام. سنبدأ بإضافة متغير بيئة بسيط باسم appenv وسنضبط قيمته لتكون
00:01:33testing، والآن يمكنني فتح تبويب جديد لتشغيل vlarock load للتحقق من المخطط. الآن
00:01:39يمكننا أن نرى هنا أنه قرأ متغير البيئة وضبطه كـ “حساس” (sensitive). وهذا
00:01:43لأن جميع متغيرات البيئة في vlarock تكون حساسة افتراضيًا، ولكن يمكننا تغيير ذلك.
00:01:48في هذا الملف، سأضيف أول مزخرف (decorator) وهو مزخرف جذري (root)
00:01:52لأنه سيؤثر على جميع متغيرات البيئة في الملف، وسنضبط الحساسية الافتراضية
00:01:56على false. لاحظ أن السينتكس هنا يبدأ بعلامة هاشتاج، وعادة ما تُفصل متغيرات الجذر
00:02:02بفاصل. هذا الملف بالكامل يستخدم لغة مخصصة تسمى mspec، وهي
00:02:08مواصفة مفتوحة كتبها فريق vlarock. الآن إذا تحققت من المخطط مرة أخرى، يمكننا رؤية
00:02:14قيمة متغير البيئة لأنه لم يعد مضبوطًا كحساس. ولكن يمكننا القيام بأشياء
00:02:19رائعة أخرى داخل ملف المخطط مثل إعطاء نوع لمتغير البيئة. سأعطيه
00:02:24نوع string (نص)، مما يعني أن كل شيء سيعمل، ولكن إذا غيرته إلى
00:02:29number (رقم)، فسنرى خطأً لأنه يتوقع نصًا. يمكنني أيضًا إعطاؤه
00:02:33مزخرف required (مطلوب) ثم حذف هذا النص، مما يعني أننا سنحصل على خطأ
00:02:39لأنه يتوقع قيمة. تسمى هذه “مزخرفات العناصر” ويمكنك العثور على قائمة كاملة
00:02:44بها في وثائق vlarock، بالإضافة إلى قائمة بالأنواع المتاحة. لنضف الآن
00:02:50متغير بيئة آخر، وسنسميه port بقيمة 3002. يمكنني إعطاؤه
00:02:55نوع port، وسأقوم أيضًا بضبط هذا كـ sensitive هنا وإعادة هذا إلى
00:03:01string. الآن تم التقاط كلا المتغيرين وإخفاء هذا لأنه حساس.
00:03:05لكن كيف ندخل هذه القيم إلى تطبيقنا؟ كل ما علينا فعله هو تشغيل
00:03:10vlarock run متبوعًا بالأوامر التي نحتاجها لتشغيل تطبيقنا. فإذا قرأنا ملف package.json
00:03:15سنرى أننا بحاجة لتشغيل أمر vite لتشغيل الواجهة الأمامية. الآن إذا شغلت vlarock run متبوعًا
00:03:21بأمر vite، سيقوم بتحميل الإعدادات وفكها ثم حقنها في متغيرات
00:03:27البيئة لدينا، وهذا بالضبط ما حدث لأن المنفذ الآن هو 3002، وهو ما يعمل في الكود
00:03:33لأنه يتحقق أولاً من متغير بيئة المنفذ الذي يتم حقنه حاليًا بواسطة vlarock.
00:03:38هذا الأمر لا يقتصر فقط على ملفات جافا سكريبت لأن vlarock يعمل مع أي مشروع، سواء
00:03:43بايثون أو غو أو راست، كل شيء سيعمل كما هو متوقع. وإذا كنت لا ترغب في
00:03:48تثبيته عبر npm، فهناك أيضًا vlarock cli الذي يعمل بنفس الطريقة. هذا كله جيد
00:03:54لمتغيرات البيئة المحلية، ولكن لنمر الآن بعملية جلبها من 1Password
00:03:59بدلاً من استخدام متغيرات الشيل المحلية لمفاتيح OpenAI وAnthropic.
00:04:05أنا لا أستخدم 1Password شخصيًا، لقد اشتركت في نسخة تجريبية فقط لعمل هذا الفيديو، ولكن
00:04:11كما ترون، أنشأت خزنة (vault) جديدة، وهو أمر مهم جدًا وسأشرح السبب لاحقًا. داخل هذه
00:04:16الخزنة لدينا عنصران، أحدهما مفتاح OpenAI والآخر مفتاح Anthropic، ولا مانع لدي من
00:04:24إظهارهما لأنهما وهميان تمامًا؛ إذا كشفت هذا، فهو ليس مفتاحًا حقيقيًا. الآن،
00:04:30للحصول على تلك القيم داخل مخطط vlarock، نحتاج أولاً لتثبيت إضافة 1Password
00:04:36وللعلم، يمكن للإضافات في vlarock إضافة مزخرفات جذر وعناصر خاصة بها، لذا قد ترون
00:04:42مزخرفات جديدة هنا غير موجودة في الوثائق، مثل مزخرف init-1password. بعد
00:04:49تثبيت vlarock-1password، يمكننا تحميل مزخرف الجذر الذي يحتوي على الإضافة التي
00:04:55ثبتناها للتو وتشغيل مزخرف init-1password. كل ما أحتاجه الآن هو التوكن (token)
00:05:01الذي يمكنني تحميله من هنا. للحصول على هذا التوكن، يجب ربطه بخزنة جديدة
00:05:06وليس خزنتك الشخصية، ويمكنك العثور عليه في حساب خدمة المطورين، ثم اتبع الخطوات
00:05:11لإنشاء توكن. بما أنني سأحذف التوكن وحساب 1Password بعد هذا الفيديو،
00:05:15فلا بأس بإظهاره. سأعطيه نوع 1password-service-token وهو
00:05:21مضبوط كحساس، وهو نوع يأتي من هذه الإضافة. قد تلاحظون أيضًا أن هذا الملف ليس
00:05:26به تمييز لألوان الكود (syntax highlighting)، وذلك لأن فريق vlarock أنشأ إضافة لـ VS Code
00:05:32تدعم ذلك، لكن حاليًا لا توجد واحدة لـ Neovim، مما يعني أنني قد أنشئ واحدة مستقبلاً
00:05:37أو أطلب من Claude فعل ذلك. الآن سأنشئ متغير بيئة جديد باسم openai-api-key-id،
00:05:43وللحصول عليه من 1Password، عليّ تشغيل دالة 1password
00:05:49متبوعة بهذا البروتوكول، ثم أحتاج لإضافة اسم الخزنة وهو test، واسم
00:05:55العنصر وهو openai، ثم اسم الحقل، وإذا تأكدنا سنرى هنا أنه
00:06:02credential. يمكنني أيضًا ضبطه كحساس، والآن إذا شغلت vlarock load فسيستغرق ثوانٍ
00:06:08قبل جلب مفتاح OpenAI من 1Password. يمكننا التأكد من عمله حتى عبر تغيير
00:06:14القيمة هنا لشيء مثل 1234، وإذا شغلت vlarock load مجددًا، فسيجلب القيم
00:06:20الصحيحة. وهكذا، ملف مخطط env الخاص بنا جاهز للنشر، لكنني أعرف ما يدور في ذهنكم:
00:06:25ماذا عن توكن 1Password هذا، هل هو آمن؟ صراحةً، إذا كنت تطور
00:06:31محليًا ولديك 1Password، فقد يكون لديك تطبيق سطح المكتب مثبتًا أو تستخدم الـ cli،
00:06:38وفي هذه الحالة يمكنك استخدام هذا الإعداد لفتح 1Password بصمتك بدلاً من استخدام
00:06:43توكن. كما يدعم vlarock إضافات أخرى مثل AWS وGCP وحتى Bitwarden
00:06:52بالإضافة لعديد من التكاملات الأخرى بما في ذلك Vite وNext.js وCloudflare Workers. هناك
00:06:57أيضًا ميزات كثيرة لم يتسع الوقت لذكرها مثل إنشاء أنواع TypeScript من
00:07:03المخطط، واستيراد متغيرات البيئة من ملفات أخرى، وحتى إخفاء المخرجات الحساسة
00:07:08من السجلات واستجابات HTTP الصادرة، وهي لمسة رائعة جدًا. يوجد حتى خادم MCP
00:07:15لمساعدة وكيل البرمجة الخاص بك في إعداد مخطط env لك تلقائيًا، وهناك أيضًا GitHub Action
00:07:21لتحميل والتحقق من متغيرات البيئة في عملية CI/CD. ولكن رغم روعة vlarock،
00:07:27هناك بعض المشاكل؛ مثلاً لا يمكنك استخدامه بدون إنترنت، فإذا كنت تبرمج في المطار
00:07:32ستضطر لاستخدام متغيرات البيئة المكتوبة يدويًا، ولكن صراحةً، من يبرمج الآن بدون
00:07:37إنترنت؟ وبالحديث عن الإنترنت، هناك تأخير بسيط عند جلب كلمات المرور من
00:07:41مزود مختلف، لذا سيستغرق تشغيل أوامرك وقتًا أطول قليلاً. هناك أيضًا
00:07:46نقص في المزودين مثل Dashlane وغيرهم، وقد واجهت خطأً غريبًا حيث إذا استخدمت نفس
00:07:53الاسم في ملف المخطط كاسم متغير بيئة في الشيل المحلي، فإنه يستخدم المتغير
00:07:59المحلي بدلاً من ذاك الموجود في 1Password. لكن vlarock يتم تطويره بنشاط
00:08:05وأنا متأكد أن الكثير من هذه الأمور سيتم معالجتها مستقبلاً. ومع ذلك، فإن المنتج
00:08:10بوضعه الحالي لا يزال مفيدًا جدًا لي، وأعتقد أنني سأستخدمه في كل
00:08:16مشاريعي الجانبية مستقبلاً، وربما حتى استبدال ملفات الشيل المحلية بملفات مخطط vlarock
00:08:21إذا كانت هناك طريقة لفعل ذلك. آمل حقًا وجودها لأنني لا أريد لأي وكيل ذكاء اصطناعي كشط
00:08:26معلوماتي.

Key Takeaway

تعتبر Varlock أداة ثورية لإدارة متغيرات البيئة تهدف إلى إنهاء عصر تخزين الأسرار بنصوص مجردة على القرص من خلال توفير نظام مخططات آمن وتكامل مباشر مع مديري كلمات المرور.

Highlights

تقديم أداة Varlock كبديل متطور لملف .env التقليدي لإدارة متغيرات البيئة بشكل آمن.

استخدام لغة mspec المخصصة لإنشاء مخططات (schemas) تحدد أنواع البيانات ومدى حساسيتها.

إمكانية جلب الأسرار مباشرة من مديري كلمات المرور مثل 1Password وBitwarden دون تخزينها محلياً.

دعم الأداة لمختلف لغات البرمجة مثل Python وGo وRust بالإضافة إلى JavaScript.

توفير ميزات متقدمة مثل توليد أنواع TypeScript وإخفاء البيانات الحساسة من سجلات المخرجات.

القدرة على دمج الأداة في عمليات CI/CD عبر GitHub Actions وخوادم MCP للذكاء الاصطناعي.

Timeline

مقدمة عن Varlock وحل مشكلة ملفات .env

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

إنشاء المخطط واستخدام لغة mspec

يستعرض المتحدث تطبيقاً عملياً باستخدام ملف .env.schema الذي يمثل المصدر الوحيد للحقيقة للمتغيرات. يتم شرح لغة mspec وكيفية استخدام المزخرفات (decorators) مثل root وrequired لضبط خصائص المتغيرات بشكل جماعي أو فردي. يوضح الفيديو كيفية تحديد أنواع البيانات مثل string وnumber وport لضمان صحة الإعدادات وتجنب الأخطاء البرمجية. يتميز النظام بقدرته على إخفاء القيم الحساسة تلقائياً عند فحص المخطط باستخدام أمر vlarock load. هذا النهج يضمن أن يكون المخطط توثيقياً وعملياً في آن واحد.

حقن المتغيرات ودعم بيئات العمل المختلفة

يشرح هذا القسم كيفية إدخال القيم فعلياً إلى التطبيق باستخدام أمر vlarock run الذي يقوم بحقن الأسرار في بيئة التشغيل. يطبق المتحدث ذلك على مشروع يستخدم Vite، حيث يتم تغيير منفذ التشغيل بناءً على المتغيرات المحقونة بنجاح. يؤكد الفيديو أن الأداة ليست محصورة في JavaScript بل تدعم لغات أخرى مثل Python وGo وRust بفعالية كبيرة. تتوفر الأداة أيضاً كواجهة سطر أوامر (CLI) مستقلة لمن لا يفضل تثبيتها عبر npm. توضح هذه الفقرة مرونة الأداة في التعامل مع مختلف الأطر والتقنيات البرمجية الحديثة.

التكامل مع 1Password وجلب الأسرار السحابية

ينتقل المتحدث لشرح كيفية جلب مفاتيح API الخاصة بـ OpenAI وAnthropic مباشرة من خزنة 1Password. يتطلب ذلك تثبيت إضافة vlarock-1password واستخدام توكن خدمة مخصص لربط المخطط بالخزنة السحابية. يتم عرض طريقة كتابة المسارات للوصول إلى الحقول المحددة داخل مدير كلمات المرور بشكل دقيق. يشير الفيديو إلى توفر إضافات لـ VS Code لدعم تمييز الألوان وكتابة الكود بسهولة أكبر. تتيح هذه الطريقة للمطورين العمل دون الحاجة لتخزين أي مفاتيح حقيقية في ملفاتهم المحلية.

الميزات المتقدمة والعيوب الحالية والتقييم النهائي

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

Community Posts

View all posts