تخطَّ إلى المحتوى

ما يكلّفه فعلًا أن تتأخر ثلاثة إصدارات في Laravel

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

قراءة 3 دقيقة

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

والكلفة حقيقية على أي حال. إنها مؤجلة فحسب، وهي تتراكم.

الفاتورة، مفصّلة

تكفّ الإصلاحات الأمنية عن الوصول. هذا هو الجزء الذي له تاريخ. كل إصدار من Laravel ينال نحو سنتين من الإصلاحات الأمنية؛ فوّت تلك النافذة وتصير ثغرة تُعلن في الإطار بلا ترقيع تستطيع تطبيقه. الإصلاح موجود - في إصدار لا يستطيع تطبيقك تثبيته.

اعتمادياتك ترحل من دونك. الحزم تتبع الإطار. متأخرًا سنة، تثبّت إصدارًا أو اثنين. ومتأخرًا ثلاث سنوات، تكون الحزمة التي تحتاجها قد أسقطت دعم قيدك كليًا، ويصير تثبيت أي شيء جديد حلّ رسم بياني بلا حلّ. ويخبرك Composer بذلك بأقل الطرق فائدةً.

PHP يخرج من الدعم تحته. إصدارات Laravel تحمل متطلبات PHP، وPHP القديم يكفّ عن تلقي إصلاحات أمنية وفق جدوله. فصار اللغة والإطار والحزم كلها تحتاج تحريكًا، وعليها أن تتحرك بترتيب.

التوظيف يصعب والإدماج يبطؤ. مطوّرة عملت في Laravel ثلاث سنوات لم ترَ أعراف إصدارك قط. وكل توثيق تجده يصف شيئًا آخر. وأقوى حجج الإطار نفسه - أن من يعرف Laravel يستطيع قراءة أي شيفرة Laravel - تكفّ عن الانطباق على شيفرتك.

العمل نفسه يبطؤ. لا لأن الإصدار القديم بطيء، بل لأن كل شيء التفاف. ميزات تصدر في سطر واحد في Laravel الحالي تكون هنا حزمة، أو trait، أو أربعمئة سطر كتبها أحدهم في 2019 ثم رحل.

لماذا يسوء بدل أن يبقى كما هو

الترقية من إصدار إلى الذي يليه آلية في أغلبها. التغييرات الكاسرة موثَّقة، وهي قليلة عادةً، وملاحظات الإصدار تخبرك أين تنظر.

وثلاثة إصدارات ليست ثلاثة أضعاف ذلك العمل، لسببين.

التغييرات تتفاعل. الإهمال الذي أُدخل في إصدار وأُزيل بعد اثنين غير مرئي في أدلة الترقية المفردة ولا مفرّ منه حين تفعلها معًا. ولا تستطيع التقدم بنظافة، لأن الحزم التي كانت ستحملك عبر الإصدارات الوسيطة لم تعد لها إصدارات ترضي الطرفين.

فيكفّ العمل عن كونه طبّق الدليل ويصير افهم ما يفعله هذا التطبيق فعلًا - وهو غالٍ بالضبط لأن أحدًا لا يعرفه حاليًا.

كيف يبدو حين يُنفَّذ كما ينبغي

اقرأ قبل أن تكتب. ماذا يفعل التطبيق، وأي أجزائه لها اختبارات، وأي اعتماديات مهجورة، وأي PHP يحتاج. ينتج ذلك وثيقة وترتيبة، وهو الجزء الذي يريد الناس تخطّيه.

احصل أولًا على شبكة أمان. الترقية بلا اختبارات إعادةُ كتابة بخطوات إضافية. واختبارات وظيفية على المسارات التي تحرّك المال والمهام التي تلمس أنظمة أخرى تكفي عادةً - لا تغطية كاملة، فتلك تكلّف أكثر من الترقية.

اللغة أولًا حيث ينطبق. إن كان على PHP أن يتحرك، فهو يتحرك قبل الإطار، لأن الإطار لا يستطيع.

إصدار واحد في كل مرة، مدموج في كل مرة. رقِّ، وأصلح، وانشر، وكرّر. كل خطوة صغيرة بما يكفي للتفكير فيها والرجوع عنها. والفرع الواحد الذي يحاول الثلاثة ينتهي تعارض دمج بموعد نهائي ملحق به.

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

الرقم الجدير بالمعرفة

النسخة الصادقة من الحساب: ترقية تُجرى كل سنة كلفة صغيرة يمكن توقعها. وإن تُركت ثلاثًا، كلّف العمل نفسه أضعافًا - لا لأن الشيفرة تغيّرت أكثر، بل لأن معرفة ما يفعله التطبيق يجب إعادة بنائها قبل أن يتحرك أي شيء بأمان.

والتراكم لا يتوقف بينما تقرر. سنة أخرى تضيف إصدارًا آخر، ومجموعة أخرى من الاعتماديات المهجورة، ومجموعة أخرى من الأشخاص الذين غادروا الشركة منذ أن كان أحد يفهم وحدة المدفوعات.

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

قراءة التطبيق تدقيق. ونقله ترقية وإنقاذ. وحالما يصير محدَّثًا، يصبح البقاء محدَّثًا مهمة شهرية صغيرة، وهذه هي الحجة كلها لصالح ترتيب صيانة.

وإن لم يكن التطبيق على Laravel أصلًا، فالفائدة نفسها تتراكم على إطار العمل الذي يقوم عليه. ننقل تلك التطبيقات على مراحل. ولا نعيد كتابتها.

أسئلة ذات صلة

كم يُدعَم إصدار Laravel؟
نحو ثمانية عشر شهرًا من إصلاحات الأعطال وسنتين من الإصلاحات الأمنية من تاريخ الإصدار، بإصدار رئيسي جديد كل سنة. والقراءة العملية: تخطَّ اثنين وتصير خارج الدعم الأمني، وهي حالة مختلفة عن مجرد كونك متأخرًا.
هل إعادة الكتابة أرخص من الترقية؟
لا تكاد تكون كذلك أبدًا، والحساب ليس متقاربًا. الترقية تحمل السلوك إلى الأمام - بما في ذلك الأجزاء التي لا يتذكرها أحد ولم يكتبها أحد. أما إعادة الكتابة فتستنبط ذلك كله من شيفرة قررت للتو ألا تقرأها، وتُكتشف القواعد غير الموثَّقة على يد العملاء.
نحن على PHP 7.4. هل يغيّر ذلك الخطة؟
نعم، ويعني عادةً أن ترقية PHP تأتي أولًا. Laravel الحديث لن يُثبَّت عليه، فلا يستطيع الإطار التحرك حتى تتحرك اللغة. وذلك غالبًا العمل الأكبر، وهو الذي يجب تقدير حجمه بصدق قبل وعد أي شيء.
هل يمكن فعل هذا دون تجميد الميزات؟
عادةً، إن جرت الترقية بخطوات صغيرة مدموجة لا على فرع طويل العمر. الفرع الذي يعيش ستة أسابيع بجوار تطوير نشط يقضي أسبوعيه الأخيرين في حل التعارضات، وهكذا اكتسبت الترقيات سمعتها.

← العودة إلى كل المقالات

اتصل بنا+1 848 272 7583واتساب+90 850 308 5436البريدinfo@codefacture.comصفحة التواصل