تسکرانرها: یه دستور ثابت برای همهٔ پروژهها
خلاصهٔ کاملتر
نویسنده میگه تو کار روزمرهش مدام بین ریپازیتوریهایی با استکهای مختلف جابهجا میشه، ولی کارهایی که لازم داره همهجا یکیه: نصب وابستگیها، بیلد، لینت، فرمت، اجرای تستها و مهاجرت دیتابیس. چیزی که فرق میکنه فقط طرز صداکردنشونه — یهجا ./gradlew build، یهجا mvn، یهجا هم npm یا yarn یا pnpm. ایدهٔ مقاله اینه که این تفاوتها رو پشت چندتا اسم ثابت مثل build و test قایم کنی تا حافظهٔ عضلانی جای حفظکردن رو بگیره.
سادهترین راه یه اسکریپت bash تو ریشهٔ ریپوئه که برای هر کار یه تابع داره و آرگومان اول رو با case به تابع درست وصل میکنه. نویسنده پیشنهاد میده اسمش کوتاه باشه (خودش run میذاره) و یادت نره با chmod +x اجراییش کنی. مزیتش انعطافه: میتونی چندتا مرحله رو تو یه دستور بذاری، آرگومانهای زشت رو مخفی کنی و حتی نگهبان بذاری که کسی اشتباهی دیتابیس PROD رو پاک نکنه.
گزینهٔ دوم make هست؛ ابزاری از دههٔ ۷۰ که تقریباً روی هر ماشین توسعهدهنده نصبه. کافیه یه Makefile بسازی و برای هر کار یه rule تعریف کنی. یه نکتهٔ ریز مهمه: make انتظار داره خروجی هر target یه فایل باشه، پس اگه فایلی هماسم target داشته باشی میگه کار انجام شده و هیچی اجرا نمیکنه. برای همین همهٔ targetها رو .PHONY اعلام میکنن. دستورها هم حتماً باید با tab ایندنت بشن، نه فاصله.
.PHONY: install build test
install:
npm run ci
test:
npm run test:unitیه امتیاز رایگان make هم اینه که zsh و fish خودکار targetها رو تکمیل میکنن؛ کافیه make بزنی و با tab بین کارها بچرخی. just تقریباً همون سینتکسه ولی بخشهای عجیب make (مثل همون phony) رو حذف کرده و فایلش هم justfileه؛ تنها ایرادش اینه که پیشفرض روی سیستمها نصب نیست. mise هم که این روزها به یه چاقوی همهکارهٔ توسعه تبدیل شده، تسکها رو تو mise.toml با توضیح و دستور اجرا نگه میداره و کنارش نسخهٔ ابزارها و متغیرهای محیطی رو هم مدیریت میکنه.
جمعبندی نویسنده اینه که این کار اصلاً پیچیده نیست، فقط یه بهبود کوچیک تو کیفیت زندگی خودت و تیمته که کمتر جایی میبینیش — چیزی در حد نصف فنجون قهوهٔ فردا صبح.
نکات کلیدی:
- تسکرانر یعنی یه لایهٔ نازک که کارهای تکراری پروژه رو پشت اسمهای ثابت مثل build و test میبره
- اسکریپت bash انعطاف بیشتری میده و میتونه چند مرحله و اعتبارسنجی رو تو یه دستور جمع کنه
- تو make هر target رو .PHONY اعلام کن و دستورها رو با tab ایندنت کن
- just سینتکسی شبیه make با دردسر کمتر داره ولی باید جدا نصب بشه
- mise علاوه بر تسکها، نسخهٔ ابزارها و متغیرهای محیطی رو هم مدیریت میکنه




