ArchSpec: لینتر معماری برای روبی و ریلز
خلاصهٔ کاملتر
وقتی بخش زیادی از کد رو مدلهای هوش مصنوعی مینویسن، تستها میگن کد کار میکنه و RuboCop میگه تمیزه، ولی هیچکدوم نمیگن معماری پروژه هنوز همونیه که طراحی کرده بودی. کارمین پائولینو، سازنده RubyLLM، برای همین ArchSpec 1.0 رو منتشر کرده: یه لینتر معماری برای Ruby و Rails.
تو یه فایل به اسم Archspec.rb، کامپوننتهای پروژهت و قانونهای ارتباط بینشون رو تعریف میکنی؛ مثلاً اینکه مدلها نباید به کنترلرها دسترسی داشته باشن:
component :models, in: "app/models/**/*.rb"
models.cannot_use :controllersبعدش دستور archspec check هر تغییری -چه از آدم چه از ایجنت- رو با همون قانونها میسنجه. نکته جالب اینه که خود ابزار هیچ هوش مصنوعیای توش نیست: Prism (پارسر خود زبان روبی) کد رو میخونه، ArchSpec ازش رفرنسها و وابستگیها رو استخراج میکنه و قانونها رو چک میکنه، بدون بالا آوردن کل اپلیکیشن. رو کل Discourse با ۱۸۹۹ فایل، این کار فقط ۲.۵ ثانیه طول میکشه.
وقتی قانونی نقض بشه، خروجی دقیقاً فایل، خط و دلیل نقض رو نشون میده -شبیه خروجی کامپایلر clang- که هم آدم راحت میفهمدش هم ایجنت میتونه خودش اشتباهش رو درست کنه، بدون اینکه از تو بپرسه.
پائولینو میگه خودش این ابزار رو تو توسعه RubyLLM 2.0 به کار برده و کمکش کرده مرز بین «پروتکل» (فرمت پیام مثل Chat Completions) و «provider» (یه اکانت مثل OpenAI یا DeepSeek) رو حفظ کنه؛ چون بدون همچین چکی، کد هر provider کمکم فرمت پیامش رو قاطی providerهای دیگه میکرد.
ArchSpec با Packwerk فرق داره: Packwerk فقط رفرنس بین پکیجها رو چک میکنه و به Zeitwerk و ساختار Rails وابستهست، ولی ArchSpec علاوه بر رفرنس، فراخوانی متد، ارثبری، mixin و حتی الگوی نامگذاری رو هم رو هر کدبیس روبیای چک میکنه. برای پروژههای معمولی هم پریستهای آمادهای مثل vanilla_rails، hexagonal و modular_monolith هست که کل تنظیمات رو تو یه خط خلاصه میکنن.
نکات کلیدی:
- ArchSpec 1.0 لینتر معماری برای Ruby و Railsه، ساخته کارمین پائولینو (سازنده RubyLLM)
- کاملاً مبتنی بر تحلیل استاتیک با Prismه، نه هوش مصنوعی، و به Rails هم نیازی نداره
- روی کل Discourse (۱۸۹۹ فایل) فقط ۲.۵ ثانیه طول میکشه
- پریستهای آمادهای مثل vanilla_rails، hexagonal، clean architecture و modular_monolith داره
- دستور archspec check --update-todo برای کدبیسهای قدیمی، خطاهای فعلی رو ثبت میکنه تا فقط جلوی درفت جدید رو بگیره




