Spectre.Console في C# (.NET): الدليل الشامل
مكتبة Spectre.Console هي أداة قوية لـ .NET تحوّل مخرجات الكونسول العادية إلى واجهات جذابة بصريًا وتفاعلية. تتيح لمطوري C# إنشاء واجهات سطر أوامر (CLI) جميلة ومنظمة وغنية بالمعلومات بأقل جهد. بدلاً من النص الأحادي اللون الممل، تحصل على دعم للألوان والجداول والأشجار وأشرطة التقدم والرسوم البيانية وحتى التلميحات التفاعلية.
لماذا تحتاج Spectre.Console؟ في التطوير الحديث، تُستخدم تطبيقات الكونسول بكثرة في أدوات DevOps وسكربتات الأتمتة وتحليل البيانات والأدوات المساعدة. يتوقع المستخدمون منها ليس فقط الوظائف بل أيضًا سهولة الاستخدام. تحل Spectre.Console مشكلة المخرجات "الجرداء"، مما يجعل السجلات واضحة والتفاعل مع التطبيق ممتعًا. إنها مفيدة بشكل خاص لإنشاء أدوات CLI احترافية حيث تكون قابلية القراءة والتسلسل الهرمي البصري للبيانات أمرًا مهمًا.
تم بناء المكتبة على مبادئ التركيب (composition) وتوفر مجموعة غنية من "القطع" (widgets) التي يمكن دمجها. تحظى بدعم نشط من المجتمع، ولديها توثيق مفصل، وتُستخدم في مشاريع كبيرة مثل Cake Build وNuGet Client و.NET SDK. إذا كنت تكتب بلغة C# وتريد أن تبدو أداتك المساعدة وكأنها أداة حديثة وليست من بقايا الثمانينيات، فإن Spectre.Console هي خيارك الأمثل.
التثبيت
يتم توزيع Spectre.Console عبر NuGet. للتثبيت، نفّذ أحد الأوامر التالية في الطرفية أو في وحدة تحكم مدير الحزم:
# عبر .NET CLI
dotnet add package Spectre.Console
# عبر Package Manager Console (في Visual Studio)
Install-Package Spectre.Console
# أو عبر NuGet Package Manager في بيئة التطوير الخاصة بك
بعد التثبيت، أضف using Spectre.Console; في بداية ملف الكود الخاص بك.
البداية السريعة
مثال عملي بسيط يوضح الإمكانيات الأساسية:
using Spectre.Console;
// رسالة ملونة بسيطة
AnsiConsole.MarkupLine("[bold green]مرحبًا بك في Spectre.Console![/]");
// جدول
var table = new Table();
table.AddColumn("الاسم");
table.AddColumn("العمر");
table.AddRow("سارة", "28");
table.AddRow("أحمد", "32");
AnsiConsole.Write(table);
// شريط تقدم
AnsiConsole.Progress()
.Start(ctx =>
{
var task = ctx.AddTask("[yellow]جارٍ المعالجة...[/]");
while (!task.IsFinished)
{
task.Increment(15);
Thread.Sleep(200);
}
});
سيقوم هذا الكود بطباعة ترحيب ملون، وجدول بالبيانات، وشريط تقدم متحرك.
أهم الدوال والكلاسات
1. AnsiConsole.MarkupLine
التوقيع: public static void MarkupLine(string markup)
الوظيفة: تطبع نصًا مع دعم الترميز (markup) لتنسيق النص (ألوان، أنماط، روابط).
AnsiConsole.MarkupLine("[bold yellow]تنبيه![/] [red]خطأ[/] في السطر [underline]42[/].");
2. AnsiConsole.Progress
التوقيع: public static Progress Display(ProgressContext context) (عبر واجهة Fluent)
الوظيفة: تنشئ وتعرض شريط تقدم تفاعلي مع إمكانية إضافة مهام متعددة.
AnsiConsole.Progress()
.Columns(new TaskDescriptionColumn(), new ProgressBarColumn(), new PercentageColumn())
.Start(ctx =>
{
var task1 = ctx.AddTask("[green]تحميل الملف 1[/]");
var task2 = ctx.AddTask("[blue]تحميل الملف 2[/]");
while (!task1.IsFinished || !task2.IsFinished)
{
task1.Increment(5);
task2.Increment(3);
Thread.Sleep(100);
}
});
3. Table
التوقيع: public class Table : Renderable