Miller
نشط ومستقريعمل محلياً ✓بدون اشتراك APIMiller ينظّف ملفات CSV وTSV وJSON ويحوّلها ويحللها محليًا من الطرفية باستخدام أسماء الحقول ومسارات قابلة للتكرار.
brew install millerالاستخدام المثالي لهذه الأداة
مثالي للمطور أو محلل البيانات أو مسؤول التشغيل الذي يريد تنظيف تصدير CSV، فحص JSON Lines، أو تلخيص ملف كبير من الطرفية بلا مشروع Python. استخدمه للمعالجة السريعة والسكربتات المتكررة؛ أما المعاملات المتزامنة والتحليلات المرئية المتقدمة فتحتاج قاعدة بيانات أو أداة تحليلية مكملة.
التفاصيل والميزات المصورة
تصل إليك ملفات CSV من متجر أو نموذج أو نظام محاسبي، ثم تضيع وقتًا في عدّ الأعمدة، وكتابة سكربت صغير لكل تنظيف، وفتح ملف ضخم في برنامج جداول لا يحتمله. Miller يضع هذه الأعمال في أمر طرفية واحد يفهم أسماء الحقول وصيغ البيانات المنظمة. تقرأ الملف، ترشّح الصفوف، تختار الحقول، تحسب قيمًا جديدة، ترتب أو تلخص النتائج، ثم تخرج CSV أو TSV أو JSON من دون بناء مشروع برمجي كامل.
🧭 ما Miller وكيف يعمل؟
Miller أداة مفتوحة المصدر لسطر الأوامر، واسم أمرها mlr. يشبّهها المشروع بأدوات awk وsed وcut وjoin وsort، لكنها تعمل على سجلات ذات حقول مسماة بدل الاعتماد على رقم العمود فقط. لذلك تستطيع كتابة $amount أو اختيار customer,amount، وتبقى العملية واعية بترويسة CSV وبنية JSON.
يقرأ Miller صيغًا منها CSV وTSV وJSON وJSON Lines والصيغ الجدولية، ويمكنه التحويل بينها. وهو ملف تنفيذي مستقل مكتوب بلغة Go بلا تبعيات تشغيلية إضافية. الإصدار الذي تحققت منه هو v6.22.0 المنشور في 25 سبتمبر 2026، وتوجد له حزم جاهزة لأنظمة Linux وmacOS وWindows ومعماريات متعددة.

🎯 متى يفيدك؟ وما قيمته في سير العمل؟
استخدم Miller عندما تكون البيانات في ملفات نصية منظمة وتريد جوابًا أو ملفًا نظيفًا بسرعة: تنظيف تصدير مبيعات قبل إدخاله إلى قاعدة بيانات، فحص سجل JSON Lines، توحيد ملفات CSV، أو تلخيص عمود حسب مجموعة. يناسب المطور، ومحلل البيانات، ومسؤول التشغيل، والفرد أو الفريق الصغير الذي يريد أداة محلية يمكن وضع أوامرها في سكربت أو مهمة CI.
قيمته المضافة أنه يجمع ثلاث طبقات كانت موزعة عادةً بين أدوات مختلفة: فهم الصيغة، معالجة السجلات بأسماء الحقول، وربط عدة خطوات في مسار واحد. لا تحتاج إلى تشغيل دفتر Python أو استيراد الملف إلى جدول بيانات لمجرد حذف أعمدة أو تصفية قيم أو استخراج أعلى النتائج.
لا تستخدمه تلقائيًا بدل قاعدة بيانات عندما تحتاج معاملات متزامنة أو فهارس دائمة أو استعلامات مشتركة كثيرة، ولا بدل pandas/R عندما تحتاج تحليلاً إحصائيًا أو رسومًا متقدمة. هو ممتاز للمعالجة السريعة والمتكررة حول الملفات، وليس منصة بيانات كاملة.
🌟 الميزات وطريقة استخدامها
1. تعامل مع الحقول بأسمائها
في CSV التقليدي، تتغير أرقام الأعمدة عندما يضيف المصدر عمودًا جديدًا. Miller يقرأ الترويسة ويجعل الأسماء جزءًا من الأمر: cut -f customer,amount يحتفظ بالحقلين المطلوبين، وfilter '$status == "paid"' يختار السجلات المطابقة. يدعم DSL الخاص به عمليات put وfilter للحساب والتصفية، مع دوال مدمجة وحقول قد تختلف بين السجلات.
الفائدة العملية هي وضوح الأمر عند مراجعته بعد أسبوع أو مشاركته مع زميل. لكن اسم الحقل وقيمه وحالة الأحرف يجب أن تطابق البيانات الفعلية؛ الاستعلام الصحيح نحويًا قد يعيد صفر نتائج إذا خمّنت قيمة غير موجودة.
2. اربط الخطوات بكلمة then
بدل تشغيل أمر وحفظ ملف وسيط ثم تشغيل أمر ثانٍ، تستطيع ربط أفعال Miller داخليًا: ترشيح، ثم اختيار حقول، ثم ترتيب. كلمة then تمرّر السجلات إلى المرحلة التالية داخل استدعاء واحد، وتقلل تكرار تعريف صيغة الإدخال والإخراج.
هذا لا يمنعك من استخدام أنابيب Unix المعتادة. اختر then عندما تكون كل المراحل أفعال Miller، واستخدم pipe عندما تريد إدخال أداة أخرى. اجعل السلسلة قصيرة ومقروءة؛ إذا تحولت إلى برنامج طويل، ضع منطق DSL في ملف واختبره بدل نسخ أمر ضخم في الطرفية.

3. حوّل بين الصيغ من دون تجاهل البنية
يمكنك قراءة CSV وإخراج JSON أو JSON Lines أو جدول قابل للقراءة، والعكس. مثلًا يحدد --icsv صيغة الإدخال، ويحدد --ojson أو --opprint الإخراج. الأداة واعية بالترويسة، لذلك لا تعامل السطر الأول كسجل عادي عند الفرز أو الدمج، كما لا تكرر ترويسة CSV عند تمرير عدة ملفات متوافقة إلى mlr cat.
التحويل لا يصلح تلقائيًا أخطاء المعنى: نوع التاريخ، فاصل الأرقام، الترميز، أو أسماء الحقول غير المتسقة ما زالت تحتاج قواعد واضحة. اختبر عينة صغيرة، وافحص عدد السجلات والحقول قبل اعتماد الناتج.
4. استفد من التدفق، مع فهم الاستثناءات
يذكر المشروع أن معظم العمليات تحتاج سجلًا واحدًا فقط في الذاكرة في كل مرة، ما يسمح بمعالجة ملفات أكبر من الذاكرة المتاحة متى كانت العملية قابلة للتدفق. أفعال مثل filter وcut مناسبة لهذا النمط. لكن عمليات مثل sort وtac وstats1 تحتفظ بالقدر الذي تحتاجه من البيانات، ولذلك قد يرتفع استهلاك الذاكرة مع الملف أو عدد المجموعات.
لا تختصر هذه الميزة بعبارة «لا يستخدم الذاكرة». الصحيح أن السلوك يعتمد على الفعل. راقب أمرًا يتضمن ترتيبًا أو تجميعًا على عينة ممثلة قبل تشغيله على ملف ضخم، واستخدم قاعدة بيانات أو أداة تقسيم إذا أصبحت حدود الجهاز هي العامل الحاسم.

5. أعطِ الوكيل طريقة أقل تخمينًا لاستخدام Miller
منذ الإصدار 6.20، يأتي Miller بطريقتين اختياريتين للوكلاء: ملف Agent Skill وخادم MCP مدمج. ملف المهارة يشرح للوكيل مسار «اكتشف، قيّد، تحقق، ثم نفّذ» ويساعده على فحص أسماء الحقول والقيم قبل صياغة الأمر. تثبيته لـClaude Code هو:
mlr skill install ~/.claude/skills/miller
ولـCodex أو Gemini:
mlr skill install ~/.agents/skills/miller
ملف المهارة نص إرشادي ثابت؛ لا يفرض عزلًا أو مهلة أو حد إخراج. أما mlr mcp فيعرض أدوات مهيكلة لاكتشاف قدرات Miller، واقتراح الفعل المناسب، والتحقق من DSL، ووصف البيانات، وتشغيل أمر. يعمل عبر stdio كعملية فرعية، لا يفتح منفذ شبكة، ويشغّل أوامر الوكيل افتراضيًا مع MLR_NO_SHELL=1 وتعطيل system وexec و--prepipe، مع مهلة افتراضية 60 ثانية وحد إخراج افتراضي 1,048,576 بايت.
يبقى خادم MCP قادرًا على كتابة ملفات إذا طلب الأمر ذلك عبر tee أو split أو إعادة توجيه DSL؛ العزل يمنع تنفيذ أوامر خارجية ولا يحول مساحة العمل إلى وضع قراءة فقط. كما أن خيار --allow-shell يعيد تفعيل تنفيذ الأوامر الخارجية، فلا تستخدمه لمجرد تجاوز خطأ. سجّل MCP في Codex مثلًا بهذا الأمر:
codex mcp add miller -- mlr mcp

🪜 مثال عملي: رتّب الطلبات المدفوعة
لنفترض أن لديك orders.csv وفيه الحقول status وcustomer وamount. تريد إبقاء الطلبات المدفوعة فقط، عرض اسم العميل والمبلغ، ثم ترتيبها من الأعلى إلى الأقل:
mlr --icsv --opprint filter '$status == "paid"' then cut -o -f customer,amount then sort -nr amount orders.csv
ما يحدث خطوة بخطوة:
--icsvيقرأ CSV، و--opprintيعرض نتيجة جدولية سهلة القراءة.filterيبقي السجلات التي تساوي فيهاstatusالقيمةpaid.cut -oيحتفظ بالحقلين ويرتبهما كما كُتبا.sort -nr amountيرتبamountرقميًا وبترتيب تنازلي.
علامات الاقتباس المفردة حول تعبير filter مهمة في الأصداف الشائعة حتى لا يحاول shell تفسير $status. هذا مثال توضيحي موثق الصياغة، ولم أشغله على ملف طلبات حقيقي هنا؛ تأكد أولًا من أسماء الحقول والقيم في ملفك. لتصدير JSON بدل العرض الجدولي، غيّر الإخراج إلى --ojson وأعد توجيه الناتج إلى ملف بعد مراجعته.
⚖️ ماذا يضيف مقارنة بالعمل اليدوي؟
| المهمة | يدويًا أو بأدوات عامة | مع Miller |
|---|---|---|
| اختيار عمود | عدّ موضعه أو فتح جدول | استخدم اسم الحقل |
| ربط عدة عمليات | ملفات وسيطة أو pipes متكررة | سلسلة then واحدة |
| CSV إلى JSON | سكربت أو استيراد وتصدير | أعلام إدخال وإخراج |
| ملف كبير | قد يحتاج تحميله كاملًا | الأفعال المتدفقة تعالج سجلًا تلو الآخر |
| استخدام وكيل | قد يخمن الأعلام والقيم | Skill أو MCP للاكتشاف والتحقق |
هذه مقارنة في طريقة العمل، وليست وعدًا بسرعة محددة. الأداء والذاكرة يتغيران حسب الفعل وحجم السجل وعدد المجموعات ونظامك.
🚀 التثبيت والبدء
على macOS باستخدام Homebrew:
brew install miller
على Linux تعرض وثائق المشروع حزم apt-get install miller وyum install miller وsnap install miller بحسب التوزيعة، وعلى Windows تعرض winget install Miller.Miller وChocolatey وScoop. قد تقدم مستودعات التوزيعات نسخة أقدم من أحدث إصدار؛ تحقق بعد التثبيت باستخدام mlr --version، وقارنها بصفحة الإصدارات إذا احتجت تكاملات AI المتاحة من 6.20 فما بعد.
ابدأ بأمر لا يكتب فوق المصدر، مثل mlr --icsv --opprint head -n 5 file.csv. احتفظ بالملف الأصلي، ثم وجّه المخرجات إلى ملف جديد بعد التأكد من النتيجة. لم أنفذ التثبيت على جهاز فعلي ضمن هذا التحقق.
🔐 التكلفة والخصوصية والصلاحيات
Miller مجاني ومفتوح المصدر بترخيص BSD-2-Clause، ولا يتطلب حسابًا أو مفتاح API. التشغيل العادي محلي، وتقول وثائق دعم AI إن المكونات المدمجة لا تجري اتصالات شبكة. لكن الوكيل المضيف نفسه قد يرسل سياقًا إلى مزود نموذج بحسب إعداداته؛ ثبّت Miller محليًا لا يعني أن جلسة Claude أو Codex محلية.
صلاحيات Miller هي صلاحيات العملية التي تشغله: يستطيع قراءة الملفات التي تسمح بها البيئة، وقد يكتب مخرجات أو ملفات عندما تطلب ذلك. لغة DSL تتضمن إمكانات لتشغيل أوامر خارجية في الوضع العادي. استخدم --no-shell أو MLR_NO_SHELL=true عندما تنفذ أوامر غير موثوقة، واعرف أن هذا الحاجز لا يمنع كتابة الملفات. لا تمرر أسرارًا إلى وكيل لمجرد أن MCP يعمل عبر stdio.
⚠️ الحدود التي ينبغي معرفتها
- Miller أداة طرفية؛ لا يقدم واجهة مرئية لتحرير الجداول.
- DSL قوي لكنه يحتاج تعلم الصياغة والاقتباس في shell.
sortوstats1وبعض الأفعال ليست متدفقة بالكامل وقد تستهلك ذاكرة أكبر.- اختلاف أسماء الحقول أو حالة الأحرف قد ينتج نتيجة فارغة من دون أن يعني وجود خطأ نحوي.
- إصدارات مديري الحزم قد تتأخر عن الإصدار الرسمي.
- Skill إرشادي فقط، وMCP لا يجعل ملفاتك للقراءة فقط؛ راجع الأمر قبل السماح للوكيل بتنفيذه.
📚 المصادر وتاريخ التحقق
تحققت في 22 أكتوبر 2026 من المستودع الأصلي، والوثائق الرسمية، ودليل العشر دقائق، والتثبيت، وMiller وAI، وخادم MCP، وصفحة الإصدار v6.22.0، والترخيص.
عرض GitHub وقت الفحص 10,049 نجمة و248 تفرعًا، وكان آخر دفع إلى الفرع الافتراضي في 21 أكتوبر 2026. النجوم والتفرعات مؤشرات شعبية متغيرة وليست تقييمًا للجودة أو الأمان. لم أختبر التثبيت، ولم أقس الأداء، ولم أشغّل المثال على بيانات إنتاج.