محرر مخططات جانت بـ Mermaid
يضع مخطط جانت العمل على التقويم: ما مدة كل شيء، وما الذي يتداخل، وما الذي لا يبدأ قبل انتهاء غيره. استعمله حين تكون التواريخ والاعتماديات هي الجوهر. أما إن كنت تحتاج الترتيب فقط دون تواريخ، فمخطط التدفق أخف ولا يتعفّن كلما انزاح الجدول.
جدول إصدار باعتماديات ومَعلَم
الذي يجعل هذا مخطط جانت لا مجرد رسم أشرطة هو `after a1`: الاعتمادية معلنة، فتحريك المهمة الأولى يجرّ كل ما يليها. والمَعلَم يؤشّر تاريخًا ثابتًا لا يستهلك وقتًا. وسطر `dateFormat DD/MM/YYYY` ليس اختياريًا: بدونه تقع في مزلق التواريخ الموصوف أدناه.
gantt
title الإصدار 2.4
dateFormat DD/MM/YYYY
axisFormat %d/%m
excludes weekends
section التطوير
عقد الواجهة البرمجية :done, a1, 07/01/2026, 10d
التنفيذ :active, a2, after a1, 20d
الاختبارات الداخلية : a3, after a2, 8d
section الإصدار
فترة الاستقرار : b1, after a3, 5d
قرار الإصدار :milestone, m1, after b1, 0d
النشر إلى الإنتاج :crit, b2, after m1, 3dأمثلة مشروحة
١. أبسط مخطط صحيح
يخبر `dateFormat` مُحرّك Mermaid كيف يقرأ التواريخ التي تكتبها؛ أما `axisFormat` فيتحكم بكيفية عرضها على المحور. وهما إعدادان منفصلان، والخلط بينهما أشيع مصدر للضيق مع جانت.
gantt
title الدورة 14
dateFormat DD/MM/YYYY
section العمل
ابنِ محرك البحث :02/03/2026, 10d٢. معرّفات المهام والاعتماديات
منح المهمة معرّفًا يتيح للمهام اللاحقة أن تكتب `after <المعرّف>`. وحين تكون الاعتماديات معلنة تغيّر تاريخ البدء في موضع واحد فيتبعه بقية الجدول.
gantt
title ترحيل البيانات
dateFormat DD/MM/YYYY
section التحضير
مراجعة المخطط :a1, 02/02/2026, 5d
كتابة قواعد التحويل :a2, after a1, 8d
section التنفيذ
تجربة كاملة :a3, after a2, 3d
التبديل :a4, after a3, 1d٣. كلمات الحالة
تغيّر `done` و`active` و`crit` طريقة رسم الشريط. وهي أرخص وسيلة لجعل المخطط يجيب عن سؤال «أين نحن الآن» لا عن «ما كانت الخطة» فحسب.
gantt
title المنصة، الربع الأول
dateFormat DD/MM/YYYY
section البنية التحتية
تنظيف Terraform :done, t1, 05/01/2026, 12d
ترقية Kubernetes :active, t2, 19/01/2026, 15d
مراجعة التكاليف : t3, after t2, 5d
section الأمن
تدقيق الاعتماديات :crit, s1, 12/01/2026, 6d٤. المعالم
المَعلَم نقطة لا مدة: امنحه `0d`. استعمله للتواريخ التي تحددها جهة خارج المشروع — معرض، أجل تعاقدي، تجميد الشيفرة.
gantt
title خطة الإطلاق
dateFormat DD/MM/YYYY
section الهندسة
تجميد النطاق :milestone, m1, 01/04/2026, 0d
تصيّد العلل : e1, 01/04/2026, 5d
فرع الإصدار :milestone, m2, after e1, 0d
section الاتصال
انتهاء حظر النشر :milestone, m3, 15/04/2026, 0d٥. استبعاد العطلة الأسبوعية والأعياد
يجعل `excludes weekends` المدد لا تحسب يومَي العطلة، فتشغل مهمة من عشرة أيام أسبوعَي عمل بدل أن تنتهي في وسط العطلة. وتُستبعد الأعياد تاريخًا تاريخًا. وانتبه: يفترض Mermaid أن العطلة هي السبت والأحد، وهو ما لا يطابق كل بلد عربي.
gantt
title تشغيل الخدمة الجديدة
dateFormat DD/MM/YYYY
excludes weekends, 01/05/2026
section البناء
تجهيز البنية التحتية :p1, 20/04/2026, 5d
ربط خط التسليم :p2, after p1, 5d
section التسليم
الدليل والتدريب :p3, after p2, 4dملخص صياغة مخطط جانت
من بين الأنواع الستة، جانت هو الأقل تسامحًا في موضع واحد فقط — سطر المهمة — والأكثر تسامحًا في كل ما عداه. ولهذا السبب بالذات يمر فيه هذا الكم من الأخطاء دون أن يلحظه أحد.
| الصياغة | المعنى |
|---|---|
| gantt | يفتح المخطط. |
| title نص | عنوان المخطط. |
| dateFormat DD/MM/YYYY | كيفية تحليل التواريخ التي تكتبها. وهذا هو السطر الصحيح للكتابة بالعربية. |
| dateFormat YYYY-MM-DD | صيغة ISO، وهي الإعداد الافتراضي. |
| axisFormat %d/%m | كيفية عرض التواريخ على المحور. وهو إعداد مغاير لـ dateFormat. |
| excludes weekends | تخطَّ السبت والأحد عند حساب المدد. |
| excludes 01/05/2026 | استبعد تاريخًا بعينه. وهكذا تُزال الأعياد. |
| section اسم | يجمع المهام في مسار مسمّى. |
| مهمة :id, 01/01/2026, 10d | مهمة ببداية ومدة صريحتين. |
| مهمة :id, after أخرى, 10d | مهمة تبدأ عند انتهاء `أخرى`. |
| مهمة :done, id, ... | منجزة — تُرسم باهتة. |
| مهمة :active, id, ... | جارية — تُرسم بارزة. |
| مهمة :crit, id, ... | حرجة — تُرسم بلون التمييز. |
| اسم :milestone, id, تاريخ, 0d | نقطة في الزمن لا مدة. |
| 10d / 3w / 2h | المدة بالأيام أو الأسابيع أو الساعات. والوحدة إلزامية. |
مزالق جانت الستة — واثنان منها فقط يُعدّان خطأً
هذا ما يميّز جانت عن الأنواع الخمسة الأخرى. أُعيد إنتاجها على Mermaid 11.12.2: اثنان فقط من الستة أدناه يوقفان الرسم. والأربعة الباقية تنتج جدولًا مقنعًا تمامًا وخاطئًا، وهذا أخطر بكثير، لأن أحدًا لا يعيد فحص مخطط قد رُسم بالفعل.
ما تراه
Invalid date:٠١/٠٣/٢٠٢٦
لماذا
كتبت التاريخ بالأرقام العربية الهندية. وهذا مزلق خاص بالكتابة العربية دون غيرها، وهو من القلائل التي تسقط سقوطًا صريحًا بدل أن تصمت. قِيس: `٠١/٠٣/٢٠٢٦` يرمي الخطأ أعلاه، بينما `01/03/2026` يعمل تمامًا. والتمييز دقيق ويستحق الحفظ: الأرقام العربية الهندية ممنوعة في التواريخ وحدها، أما داخل اسم المهمة فهي مقبولة تمامًا لأن الاسم تسمية لا قيمة تُحلَّل — وقد جُرّب اسم مهمة فيه الرقم ١ فرُسم كما هو.
الحل
اكتب التواريخ بالأرقام اللاتينية. ويمكنك الاحتفاظ بالأرقام العربية الهندية في العناوين وأسماء المهام إن شئت.
gantt
dateFormat DD/MM/YYYY
section س
مهمة :a1, ٠١/٠٣/٢٠٢٦, 10dgantt
dateFormat DD/MM/YYYY
section س
مهمة :a1, 01/03/2026, 10dما تراه
Parse error ينتهي بـ: Expecting 'taskData', got 'NL'
لماذا
سطر مهمة بلا نقطتين رأسيتين. فالنقطتان تفصلان الاسم المعروض عن بيانات المهمة، وبدونهما لا يبقى شيء يُحلَّل. وهذا ثاني وآخر مزلق في هذه القائمة يرفضه Mermaid صراحة.
الحل
ضع النقطتين بين الاسم والمعرّف.
gantt
dateFormat DD/MM/YYYY
section العمل
التصميم a1, 07/01/2026, 5dgantt
dateFormat DD/MM/YYYY
section العمل
التصميم :a1, 07/01/2026, 5dما تراه
يُرسم المخطط، لكن التواريخ تقع قبل موعدها بشهرين
لماذا
الصيغة الافتراضية لـ `dateFormat` هي ISO، وأمام تاريخ بفواصل يقرؤه Mermaid على الطريقة الأمريكية، بالشهر أولًا. قِيس: `01/03/2026` مع `dateFormat YYYY-MM-DD` يضع المهمة في الثالث من يناير. لا تحذير البتة؛ يبدو المخطط ممتازًا وقد انزاح شهرين كاملين.
الحل
أعلن `dateFormat DD/MM/YYYY` واكتب التواريخ كما تكتبها دائمًا. جُرّب: بهذه الصيغة يقع `01/03/2026` في الأول من مارس بالضبط.
gantt
dateFormat YYYY-MM-DD
axisFormat %d/%m/%Y
section س
التصميم :a1, 01/03/2026, 10dgantt
dateFormat DD/MM/YYYY
axisFormat %d/%m/%Y
section س
التصميم :a1, 01/03/2026, 10dما تراه
يُقتطع اسم المهمة عند أول نقطتين رأسيتين
لماذا
توجد نقطتان رأسيتان داخل اسم المهمة. فأول نقطتين هما الفاصل، ولذلك يُقرأ كل ما بعدهما بيانات مهمة. قِيس: مهمة اسمها `المرحلة ١: التحليل` تخرج في المخطط باسم `المرحلة ١` فقط، وتختفي كلمة التحليل. أما أسماء الأقسام فلا تتأثر — جُرّب.
الحل
لا نقطتين رأسيتين في أسماء المهام. استعمل شرطة أو انقل التفصيل إلى اسم القسم.
gantt
dateFormat DD/MM/YYYY
section س
المرحلة ١: التحليل :a1, 07/01/2026, 10dgantt
dateFormat DD/MM/YYYY
section س
المرحلة ١ — التحليل :a1, 07/01/2026, 10dما تراه
ينكمش الشريط حتى يتلاشى
لماذا
مدة بلا وحدة. فـ `5` ليست خمسة أيام: الوحدة إلزامية وبدونها لا تنال المهمة طولًا ذا معنى. ويُرسم المخطط رغم ذلك، بمهمة تبدو وكأنها لا تستغرق وقتًا.
الحل
اكتب الوحدة دائمًا: `5d` أو `3w` أو `2h`.
gantt
dateFormat DD/MM/YYYY
section س
التصميم :a1, 07/01/2026, 5gantt
dateFormat DD/MM/YYYY
section س
التصميم :a1, 07/01/2026, 5dما تراه
المدد صحيحة، لكن تواريخ الانتهاء لا تطابق الواقع
لماذا
غياب `excludes weekends`. فافتراضيًا تكون مهمة العشرة أيام عشرة أيام تقويمية بالعطلة، ولذلك ينتهي كل ما يتجاوز أسبوع عمل في المخطط قبل انتهائه في الواقع. وهنا تفصيل يخص المنطقة العربية: يعدّ Mermaid العطلة السبت والأحد، وهو ما يطابق كثيرًا من البلدان العربية اليوم لكنه لا يطابقها كلها — فإن كانت عطلتك الجمعة والسبت، فحتى `excludes weekends` لن يعطيك النتيجة الصحيحة، والحل عندئذ استبعاد التواريخ يدويًا.
الحل
أضف `excludes weekends` قرب البداية وبعده تواريخ الأعياد — ما لم يكن العمل يجري فعلًا سبعة أيام في الأسبوع.
gantt
dateFormat DD/MM/YYYY
section س
الترحيل :a1, 20/04/2026, 10dgantt
dateFormat DD/MM/YYYY
excludes weekends, 01/05/2026
section س
الترحيل :a1, 20/04/2026, 10dملاحظات على الرسم
مقيس على Mermaid 11.12.2، وهي النسخة التي يستعملها هذا الموقع. ويسلك جانت سلوكًا مغايرًا لكل الأنواع الأخرى.
النوع الوحيد ذو عرض رسم ثابت
كل المخططات الأخرى في هذا الموقع تنمو في الاتجاه الذي ينمو فيه محتواها. أما مخطط جانت فعرض إطاره 1264 بكسل دائمًا، سواء أكانت فيه ثلاث مهام أم أربعون؛ ولا يتغير إلا الارتفاع، وقد قِيس بين نحو 172 و1060 بكسل. ويُضغط المحور أو يُمدّ ليسع ذلك العرض الثابت، ولهذا تبدو خطة سنتين وخطة أسبوعين بالكثافة نفسها. فإن خرجت الأشرطة رفيعة إلى حدّ يتعذر معه القراءة، فالمشكلة في المدى الزمني لا في عدد المهام.
الأرقام العربية الهندية: ممنوعة في التواريخ، مسموحة في التسميات
هذا أوضح تمييز خاص بالعربية في هذا الموقع، ويستحق أن يُحفظ لأنه يوفّر وقتًا. قِيس: `٠١/٠٣/٢٠٢٦` في موضع تاريخ يرمي `Invalid date` ويوقف الرسم كليًا. والرقم نفسه داخل اسم مهمة — مثل `المرحلة ١` — يُرسم كما هو دون أي اعتراض، لأن اسم المهمة تسمية تُعرض ولا قيمة تُحلَّل. فالقاعدة العملية: أرقام لاتينية في كل ما يُحسب، وأرقام عربية هندية في كل ما يُقرأ.
الشرطة المائلة لا تنفع — التحليل يبقى أمريكيًا
أكرره هنا لأنه أغلى مزلق يقع فيه من يكتب بالعربية. قِيس: مع `dateFormat YYYY-MM-DD` لا يعطي التاريخ `01/03/2026` خطأً ولا تحذيرًا، بل يستقر في الثالث من يناير — فالشرطة المائلة لا تلمّح للمحرك بأي وجه أن هذا يوم ثم شهر. والنقطة مثلها. و`dateFormat DD/MM/YYYY` المعلن يحل المسألة حلًا تامًا. وهو أول سطر يستحق أن يُضاف إلى كل مخطط جانت عربي.
تصدير PNG دقيق إلى حدّ البكسل
يرسم جانت تسمياته نصًا SVG عاديًا لا HTML مضمّنًا، ولذلك — بخلاف مخطط التدفق ومخططات الأصناف والحالات والكيانات — يقبل التحويل إلى صورة نقطية مباشرة. فيطابق ملف PNG المصدَّر ما على الشاشة تمامًا، دون إعادة رسم ودون انزياح في تنضيد النص.
الصياغة متساهلة في كل شيء إلا النقطتين
أقسام ناقصة، وكلمات حالة غير معروفة، وتواريخ بصيغة خاطئة، ومدد بلا وحدات — كل ذلك يُرسم. والمرفوض صراحةً شيئان فقط: سطر مهمة بلا نقطتين، وتاريخ بأرقام عربية هندية. وهذا التفاوت أنفع ما يمكن أن تعرفه عن كتابة مخططات جانت: كون المخطط قد رُسم لا يكاد يقول شيئًا عن صحته.
متى يكون مخطط آخر أنسب
إن كانت التواريخ تخمينًا، فمخطط جانت يعرضها بدقة لا تستحقها، وسيذكّرك بها أحدهم لاحقًا. ومخطط تدفق يعرض الترتيب بلا تواريخ أصدق ولا يحتاج تصحيحًا كلما انزاح الجدول.
وإن كانت الخطة تتغير أسبوعيًا، فمخطط جانت النصي الخاضع لإدارة الإصدارات ممتاز فعلًا — إذ يُظهر الفرق ما الذي انزاح — لكن مخططًا لا يحدّثه أحد أسوأ من غياب المخطط. فقدّر بهدوء أيّهما تصنع.
وأما كل ما يتعلق بموازنة الأحمال أو الطاقة الاستيعابية أو التوزيع على الأشخاص فهذه أداة خاطئة له. إن Mermaid يرسم أشرطة على تقويم؛ ولا يعرف من ينجز العمل ولا إن كان ذلك الشخص مشغولًا أصلًا.
أنواع المخططات الأخرى
بقلم Dominik Malsch · آخر تحديث: