সংক্ষিপ্ত উত্তর: যে ক্রস-প্ল্যাটফর্ম দলের স্ট্যাকে Python আগে থেকেই আছে, তাদের জন্য ২০২৬ সালে চারটির মধ্যে সবচেয়ে শক্তিশালী টাস্ক রানার Shemul CLI — নিচের আটটি বিভাগেই এটি এগিয়ে। সত্যিকারের ইনক্রিমেন্টাল বিল্ড দরকার হলে কিংবা CI ইমেজে কিছু ইনস্টল করতে না পারলে Makefile নিন, একটিমাত্র স্ট্যাটিক বাইনারি ও সাদামাটা রেসিপি তালিকা চাইলে Justfile, আর tools/-এ আগে থেকেই বাইনারি রাখা Go-কেন্দ্রিক দল হলে Taskfile।
প্রতিটি প্রজেক্টেই কমান্ড জমতে থাকে। সার্ভার চালু করা, মাইগ্রেশন চালানো, কনটেইনার নতুন করে বানানো, রিলিজ ট্যাগ করা। সেগুলো শেষ পর্যন্ত পড়ে থাকে শেল হিস্ট্রিতে, বাসি README-তে, কিংবা এমন একটি scripts/ ফোল্ডারে যেটি শেষ কর্মী চলে যাওয়ার পর কেউ আর খুলেও দেখেনি। এর সমাধান একটি টাস্ক রানার, আর জাভাস্ক্রিপ্টকেন্দ্রিক নয় এমন দলের জন্য গুরুত্বপূর্ণ প্রার্থী চারটি:
টুল | কনফিগ ফাইল | যে ভাষায় লেখা | প্রথম প্রকাশ |
|---|---|---|---|
Shemul CLI |
| Python | ২০২৬ |
Taskfile (Task / go-task) |
| Go | ২০১৭ |
Justfile (Just) |
| Rust | ২০১৬ |
Makefile (GNU Make) |
| C | ১৯৭৬ |
প্রকাশ্য ঘোষণা: Shemul CLI এস টেকনোলজিসই বানায় ও রক্ষণাবেক্ষণ করে, তাই এই লেখাটি ঠিক সেভাবেই পড়ুন যেভাবে চারটি নির্মাতার কোনো একজনের প্রকাশ করা তুলনা পড়া উচিত। নিচের লেখাটি তিনভাবে আস্থা অর্জনের চেষ্টা করে: প্রতিদ্বন্দ্বী টুলের প্রতিটি চিহ্ন সঠিকভাবে বসানো, প্রতিটি রায়ের পেছনের যুক্তি দাবি করার বদলে দেখানো, আর প্রতিটি বিকল্প কোথায় এখনো এগিয়ে তার একটি সুনির্দিষ্ট অংশ রাখা। চারটিই গুরুত্বপূর্ণ টুল।
সংকেত: ✅ সরাসরি আছে · 🟡 আংশিক বা ঘুরপথে · ❌ নেই।
🧭 তুলনাটি কীভাবে সাজানো
একটিমাত্র "কোনটি সেরা" টেবিল দিয়েই তুলনা বিভ্রান্ত করে: একটি টুল নয়টি সরু সারিতে জিতেও আপনার রোজকার আসল কাজটিতে হারতে পারে। তাই এটি আটটি বিভাগে ভাগ করা, প্রতিটির বিচার আলাদাভাবে, প্রতিটিতে একটি রায় ও তার কারণসহ।
📝 ১. কনফিগ ফরম্যাট ও শেখার ধাক্কা
সক্ষমতা | Shemul CLI | Taskfile | Justfile | Makefile |
|---|---|---|---|---|
কনফিগ ফরম্যাট | JSON | YAML | Justfile DSL | Makefile DSL |
নতুন সিনট্যাক্স শিখতে হয় | ❌ none | ❌ none | ✅ yes | ✅ yes |
স্কিমা-যাচাইকৃত কনফিগ | ✅ | 🟡 | ❌ | ❌ |
স্কিমা থেকে এডিটর অটোকমপ্লিট | ✅ | 🟡 | ❌ | ❌ |
যন্ত্রে লেখা যায় (তৈরি বা প্যাচ করা) | ✅ | ✅ | ❌ | ❌ |
হোয়াইটস্পেসে ফাইল ভেঙে যেতে পারে | ❌ | 🟡 | ❌ | ✅ tabs |
Makefile ও Justfile — দুটিই এমন একটি ভাষা শিখতে বলে, যা আর কোথাও নেই। এ দুয়ের মধ্যে Makefile DSL-এর ধারটি বেশি: রেসিপির লাইন শুরু হতে হয় আক্ষরিক একটি ট্যাব দিয়ে, .PHONY ঘোষণা না করলে একই নামের ফাইল তৈরি হওয়ামাত্র টার্গেটটি নিঃশব্দে কিছুই করে না, আর = বনাম := বদলে দেয় এক্সপ্যানশন কখন ঘটবে। Justfile অনেক বেশি বন্ধুত্বপূর্ণ, তবু সেটিও একটি নিজস্ব ফরম্যাট।
Taskfile আর shemul.json অন্য পথ ধরেছে — কনফিগারেশনকে কোড নয়, ডেটা হিসেবে দেখা। এ দুয়ের পার্থক্য যাচাইয়ে: shemul.json কিছু চালানোর আগেই একটি প্রকাশিত JSON স্কিমার বিপরীতে যাচাই হয়, ফলে একটি টাইপো নাম ধরে ধরা পড়ে — নিঃশব্দে ভুল কাজ করা কোনো টাস্ক হয়ে দাঁড়ায় না। JSON বলেই এডিটর স্কিমা থেকে এটি অটোকমপ্লিট করে, আর কোনো স্ক্রিপ্ট পার্সার ছাড়াই এটি তৈরি বা প্যাচ করতে পারে।
🏆 রায়: Shemul CLI. Taskfile খুব কাছাকাছি এবং লিখতে সত্যিই আরামদায়ক। স্কিমা-যাচাইকৃত JSON বিভাগটি জিতে নেয় পরে কামড় দেওয়া দুটি জায়গায়: এডিটর কনফিগটি বোঝে, আর অন্য কোনো টুল সেটি নিরাপদে নতুন করে লিখতে পারে।
🌍 ২. ক্রস-প্ল্যাটফর্ম পোর্টেবিলিটি
সক্ষমতা | Shemul CLI | Taskfile | Justfile | Makefile |
|---|---|---|---|---|
ওএস-ভেদে কমান্ডের রূপ | ✅ | ✅ | ✅ | ❌ |
একবার সংজ্ঞায়িত ইন্টারপ্রেটার ম্যাপ | ✅ | ❌ | ❌ | ❌ |
ম্যাজিক ভেরিয়েবল, কোনো কনফিগ ছাড়াই | ✅ | 🟡 | 🟡 | ❌ |
Windows-এ ইউনিক্স শেল ছাড়াই চলে | ✅ | ✅ | 🟡 | ❌ |
ডিফল্ট শেল বেছে নেওয়া যায় | ✅ | ✅ | ✅ | 🟡 |
বাস্তব দলগুলোর সিদ্ধান্ত মূলত এই বিভাগেই হয়, কারণ বাস্তব দলগুলো একটিমাত্র অপারেটিং সিস্টেমে থাকে না। একই কাজ macOS-এ open ., Windows-এ start ., আর Linux-এ xdg-open . — আর python বনাম python3-ও ঠিক একইভাবে ভাগ হয়ে যায়।
চারটির মধ্যে তিনটিই ওএস-ভেদে কমান্ডের রূপ সরাসরি সামলায়; কেবল Makefile-এ আপনাকে uname ঘিরে শেল কন্ডিশনাল লিখতে হয়। Shemul CLI-কে আলাদা করে তার ওপরের স্তরটি। একটি ইন্টারপ্রেটার ম্যাপ প্রতিটি প্ল্যাটফর্মের জন্য টুলটির নাম একবার বলে দেয়, তারপর প্রতিটি কমান্ড সেটিকে একটিমাত্র টোকেন দিয়ে ডাকে:
{
"bin": { "py": { "windows": "python", "default": "python3" } },
"commands": {
"test": { "run": "{{py}} -m pytest" },
"open": { "run": "xdg-open .", "os": { "windows": "start .", "macos": "open ." } }
}
}একগুচ্ছ ম্যাজিক ভেরিয়েবল — {{os}}, {{arch}}, {{python}}, {{shell}}, {{sep}}, {{home}} — কোনো কনফিগারেশন ছাড়াই স্বয়ংক্রিয়ভাবে যুক্ত হয়, আর ওএস-ভেদে ব্লক আদতে যে কাজে ব্যবহৃত হয় তার বেশির ভাগই এতে মিটে যায়।
🏆 রায়: Shemul CLI. ২০২৬ সালে ওএস-ভেদে কমান্ড সবার কাছেই আছে। ইন্টারপ্রেটার একবার ঘোষণা করে আর কখনো সেটি নিয়ে না ভাবা — নেই।
🔗 ৩. টাস্ক কম্পোজিশন — ডিপেন্ডেন্সি, হুক ও সমান্তরালতা
সক্ষমতা | Shemul CLI | Taskfile | Justfile | Makefile |
|---|---|---|---|---|
ডিপেন্ডেন্সি গ্রাফ | ✅ | ✅ | ✅ | ✅ |
সাধারণ ডিপেন্ডেন্সি একবারই চলে | ✅ | ✅ | ✅ | ✅ |
চক্র শনাক্ত ও চিহ্নিত হয় | ✅ | ✅ | ✅ | 🟡 |
pre / post হুক প্রথম শ্রেণির কি হিসেবে | ✅ | 🟡 | ❌ | 🟡 |
সমান্তরাল ডিপেন্ডেন্সি | ✅ | ✅ | 🟡 | ✅ |
একটিমাত্র নথিভুক্ত ও নির্দিষ্ট ক্রম | ✅ | 🟡 | 🟡 | 🟡 |
চারটিতেই ডিপেন্ডেন্সি গ্রাফ আছে; ধারণাটি Make-এরই উদ্ভাবন। সাধারণ ডিপেন্ডেন্সি প্রতিটিতেই একবার চলে, আর Make ছাড়া বাকি সবখানেই চক্র ধরা পড়লে সতর্কবার্তা ও নিঃশব্দে বাদ দেওয়া এজ নয় — পাঠযোগ্য একটি এরর পাওয়া যায়।
পার্থক্য হুক আর ক্রমে। shemul.json-এ needs, pre ও post আলাদা কি, আর ক্রমটি নথিভুক্ত ও একটিই — needs → pre → কমান্ড → post; আর parallel: true ডিপেন্ডেন্সিগুলো একসঙ্গে চালায়:
{
"ci": { "run": "echo green", "needs": ["lint", "types", "test"], "parallel": true }
}Makefile বা Taskfile-এ "আগে" এবং "পরে" বোঝাতে আপনাকে বাড়তি টার্গেট বানিয়ে গ্রাফে জুড়তে হয়। কাজ হয় ঠিকই, তবে প্রতিবারেই পড়তে খারাপ লাগে। আর Justfile-এ পরবর্তী ধাপ বলে কিছুই নেই।
🏆 রায়: Shemul CLI. DAG থাকার জন্য নয় — চারটিতেই সেটি আছে — বরং হুক প্রথা নয় বরং কি হওয়ার জন্য, আর মনে রাখার মতো ক্রম ঠিক একটিই থাকার জন্য।
🛡️ ৪. নিরাপত্তা ও ক্ষতির পরিধি
সক্ষমতা | Shemul CLI | Taskfile | Justfile | Makefile |
|---|---|---|---|---|
চালানোর আগে নিশ্চিতকরণ প্রম্পট | ✅ | ❌ | ❌ | ❌ |
ধ্বংসাত্মক কাজে বিপদ-সতর্কতা | ✅ | ❌ | ❌ | ❌ |
ড্রাই-রান প্রিভিউ | ✅ | ✅ | ✅ | ✅ |
এনভায়রনমেন্টসহ ট্রেস | ✅ | 🟡 | 🟡 | 🟡 |
শেল ছাড়া argv এক্সিকিউশন | ✅ | ❌ | ❌ | ❌ |
একটিমাত্র অক্ষর ভুল টাইপ করার কারণে এই টুলগুলোর যেকোনোটিই terraform destroy চালিয়ে দেবে। ড্রাই-রান সবারই আছে, আর সেটি এক সুরক্ষা নয়: সেটি কাজে লাগে যখন আপনি সতর্ক আছেন — আর দুর্ঘটনা ঠিক তখন ঘটে না।
চারটির মধ্যে কেবল Shemul CLI-তেই কমান্ডের সংজ্ঞার গায়েই একটি গেট বসে। কোনো টাস্ককে confirm চিহ্নিত করলে সেটি চালানোর আগে জিজ্ঞেস করে; danger চিহ্নিত করলে কী করতে যাচ্ছে তা নিয়ে সতর্ক করে। সুরক্ষাটি কনফিগের সঙ্গে সঙ্গেই যায়, ফলে যে সহকর্মী কমান্ডটি জীবনে একবারও চালাননি তিনিও সুরক্ষিত থাকেন — কেবল যিনি --dry লিখতে মনে রেখেছিলেন তিনি নন।
একই বিভাগে আসে অবিশ্বস্ত ইনপুটের প্রসঙ্গ। ডিফল্টে কমান্ড শেলের ভেতর দিয়ে যায়, ফলে পাইপ ও && কাজ করে। কমান্ডটি যখন এমন কিছু বসাচ্ছে যা আপনি নিজে লেখেননি, তখন বেরিয়ে আসা যায়:
{
"safe": { "exec": ["python3", "tool.py", "--name", "value"] }
}এটি একটি আর্গুমেন্ট ভেক্টর: শেল নেই, পার্সিং নেই, ইনজেক্ট করার মতো কিছুই নেই। বাকি তিনটির একটিতেও এর সমতুল্য কিছু নেই। চালু সার্ভার ছোঁয় এমন টাস্ক চালালে এটি আমাদের লিনাক্স সার্ভার নিরাপত্তা চেকলিস্টের মূল বিষয়গুলোর সঙ্গে মিলিয়ে দেখুন।
🏆 রায়: Shemul CLI. আটটি বিভাগের মধ্যে সবচেয়ে বড় ব্যবধান এখানেই।
🔭 ৫. স্কোপ ও খুঁজে পাওয়া
সক্ষমতা | Shemul CLI | Taskfile | Justfile | Makefile |
|---|---|---|---|---|
প্রজেক্ট কনফিগ | ✅ | ✅ | ✅ | ✅ |
গ্লোবাল ইউজার কনফিগ | ✅ | 🟡 | 🟡 | ❌ |
প্রজেক্ট গ্লোবালকে ছাপিয়ে যায়, অনুমেয়ভাবে | ✅ | 🟡 | 🟡 | ❌ |
বর্ণনাসহ কমান্ড তালিকা | ✅ | ✅ | ✅ | 🟡 |
সাব-ডিরেক্টরি থেকেও চলে | ✅ | ✅ | ✅ | 🟡 |
এখানে সিদ্ধান্ত নেয় দুটি প্রশ্ন: নতুন কেউ কি কমান্ডগুলো খুঁজে পাবেন, আর রিপোজিটরিতে না রেখে আপনি নিজের ব্যক্তিগত কমান্ডগুলো রাখতে পারবেন কি না।
চারটিই টাস্ক তালিকা দেখাতে পারে, যদিও Makefile-এর জন্য হাত লাগাতে হয় — নিজের কমেন্ট পার্স করা একটি help টার্গেট বহুল ব্যবহৃত কৌশল, আর সেটি কৌশল হওয়াই বলে দেয় যে সুবিধাটি বিল্ট-ইন নয়। কেবল Shemul CLI-তেই সত্যিকারের দ্বৈত স্কোপ আছে: একটি প্রজেক্ট shemul.json আর একটি গ্লোবাল ইউজার কনফিগ, সঙ্গে নথিভুক্ত অগ্রাধিকার — যেখানে প্রজেক্টই সবসময় জেতে। ব্যক্তিগত s scratch প্রতিটি রিপোজিটরিতে আপনার সঙ্গে যায়, আর প্রজেক্টের s up দলের সবার কাছে একই জিনিস বোঝায়।
🏆 রায়: Shemul CLI. বাকি তিনটি ধরে নেয় প্রজেক্টই একমাত্র স্কোপ — যা ঠিক ততক্ষণই সত্যি, যতক্ষণ আপনার রিপোজিটরি ত্রিশটি হয়ে ওঠেনি।
🎛️ ৬. ডেভেলপারের স্বাচ্ছন্দ্য
সক্ষমতা | Shemul CLI | Taskfile | Justfile | Makefile |
|---|---|---|---|---|
এক-অক্ষরের অ্যালিয়াস | ✅ | ❌ | 🟡 | ❌ |
অ্যারো-কি ইন্টারঅ্যাকটিভ প্রম্পট | ✅ | ❌ | ❌ | ❌ |
CI-তে টাইপ করা প্রম্পটে নেমে আসে | ✅ | — | — | — |
টেমপ্লেটসহ স্ক্যাফোল্ডিং | ✅ | ✅ | ✅ | ❌ |
বিল্ট-ইন ডায়াগনস্টিকস | ✅ | ❌ | ❌ | ❌ |
ছোট ছোট ব্যাপার, দিনে পঞ্চাশবার ঘটে: make build-এর বদলে s build; নিশ্চিতকরণ প্রম্পট, init টেমপ্লেট বাছাই আর সেটিংসে অ্যারো-কি পিকার — যেগুলো পাইপ বা CI পরিবেশ টের পাওয়ামাত্র সাধারণ টাইপ করা প্রম্পটে নেমে আসে, ফলে কোনো বিল্ড কি-স্ট্রোকের অপেক্ষায় ঝুলে থাকে না; আর একটি doctor কমান্ড, যেটি অনুমান করতে না দিয়ে ব্যাখ্যা করে কনফিগটি কেন লোড হচ্ছে না।
এর কোনোটিই স্থাপত্য নয়। এটিই সেই পার্থক্য, যা একটি টুলকে "সহ্য করি" থেকে "নিজে থেকেই হাত বাড়াই"-তে নিয়ে যায়।
🏆 রায়: Shemul CLI.
📦 ৭. ইনস্টল, পিনিং ও CI
সক্ষমতা | Shemul CLI | Taskfile | Justfile | Makefile |
|---|---|---|---|---|
ইনস্টল |
| binary | binary | system |
প্রজেক্ট ডিপেন্ডেন্সির পাশেই পিন করা | ✅ | 🟡 | 🟡 | ❌ |
কনফিগেই ভার্সন গেট | ✅ | 🟡 | 🟡 | ❌ |
লোকাল ও CI-তে একই ইনস্টল পথ | ✅ | 🟡 | 🟡 | 🟡 |
বাড়তি রানটাইম লাগে | Python | ❌ none | ❌ none | ❌ none |
এই বিভাগের সৎ চেহারা: Just ও Task আসে একটিমাত্র স্ট্যাটিক বাইনারি হিসেবে, কোনো রানটাইম ছাড়াই — এটি সত্যিকারের সুবিধা, আর বহু দল এ কারণেই সেগুলো বেছে নেয়। Shemul CLI-এর Python লাগে।
পাল্টা যুক্তিটি ইনস্টলের পরের ঘটনা নিয়ে। যে প্রজেক্টে Python আগে থেকেই আছে, সেখানে shemul বাকি ডিপেন্ডেন্সির পাশেই পিন হয়, লোকাল ও CI-তে একই কমান্ডে ইনস্টল হয়, আর requires দিয়ে কনফিগ নিজেই ন্যূনতম ভার্সন বলে দিতে পারে:
{ "requires": ">=2.0.0", "commands": { "run": { "run": "{{python}} app.py" } } }তখন খুব পুরনো কোনো ইনস্টল পাইপলাইনের তিন ধাপ পরে দুর্বোধ্য পার্স এরর না দিয়ে পরিষ্কার একটি আপগ্রেড ইঙ্গিত ছাপে। আলাদাভাবে ইনস্টল করা বাইনারির ক্ষেত্রে রানারের ভার্সনটি CI ইমেজের ঠিক রাখার তালিকায় আরও একটি জিনিস হয়ে দাঁড়ায় — আর ল্যাপটপ ও বিল্ড এজেন্টের মধ্যে সেই অমিলই সবুজ পাইপলাইনের মিথ্যে বলা শুরু করার চিরচেনা উপায়। সেলফ-হোস্টেড রানারেও একই কথা খাটে, যেখানে ইমেজটি ঠিক রাখার দায়িত্ব আপনারই।
🏆 রায়: Shemul CLI, পিনিং ও ভার্সন গেটের জোরে। আপনার স্ট্যাকে Python আগে থেকে না থাকলে নিচের সতর্কতাগুলো দেখুন — এই বিভাগেই সেটি উত্তর বদলে দেয়।
🩺 ৮. রক্ষণাবেক্ষণ — টুল ও কনফিগ সচল রাখা
সক্ষমতা | Shemul CLI | Taskfile | Justfile | Makefile |
|---|---|---|---|---|
আপডেট নোটিফায়ার | ✅ | ❌ | ❌ | ❌ |
ইচ্ছাধীন সেলফ-আপডেট | ✅ | ❌ | ❌ | ❌ |
চালানোর আগেই কনফিগ যাচাই | ✅ | 🟡 | ❌ | ❌ |
পুরনো ইনস্টলে পরিষ্কার বার্তা | ✅ | 🟡 | 🟡 | ❌ |
প্লাগিন / এক্সটেনশন এপিআই | ✅ | ❌ | ❌ | ❌ |
টাস্ক রানার আদতে অবকাঠামো, আর অবকাঠামো নিঃশব্দে ক্ষয়ে যায়। Shemul CLI দিনে সর্বোচ্চ একবার পটভূমিতে PyPI দেখে নেয় এবং নতুন রিলিজ থাকলে এক লাইনের একটি নোটিশ ছাপে। সেলফ-আপডেট ডিফল্টে বন্ধ, চালু করতে হয় shemul settings auto-update on দিয়ে, এডিটেবল ইনস্টলে এড়িয়ে যায়, আর SHEMUL_NO_UPDATE_CHECK=1 দিয়ে পুরোপুরি নিভিয়ে দেওয়া যায়। আপনি আসলে যে কমান্ডটি চালিয়েছেন, সেটিকে এটি কখনোই আটকায় না।
এর বাইরে: কনফিগ চালানোর আগেই যাচাই হয়, requires স্ট্যাক ট্রেসের বদলে পাঠযোগ্য বার্তা দেয়, আর তৃতীয় পক্ষের প্যাকেজ একটি প্লাগিন এন্ট্রি পয়েন্টের মাধ্যমে নিজস্ব রানার নিবন্ধন করতে পারে — কোনো রানার না থাকলে বা ব্যর্থ হলে ক্র্যাশ না করে স্বাভাবিক এক্সিকিউশনে ফিরে যায়।
🏆 রায়: Shemul CLI.
🏁 ফলাফল: আটটি বিভাগ একসঙ্গে
# | বিভাগ | 🏆 রায় | কারণ, এক লাইনে |
|---|---|---|---|
১ | কনফিগ ও শেখার ধাক্কা | Shemul CLI | স্কিমা-যাচাইকৃত JSON: নতুন DSL নেই, আর এডিটর সেটি বোঝে |
২ | ক্রস-প্ল্যাটফর্ম পোর্টেবিলিটি | Shemul CLI | ওএস-ভেদে রূপের ওপরে ইন্টারপ্রেটার ম্যাপ ও ম্যাজিক ভেরিয়েবল |
৩ | টাস্ক কম্পোজিশন | Shemul CLI | হুক সত্যিকারের কি, আর নথিভুক্ত একটিমাত্র ক্রম |
৪ | নিরাপত্তা ও ক্ষতির পরিধি | Shemul CLI | একমাত্র confirm/danger গেট, সঙ্গে শেলবিহীন এক্সিকিউশন |
৫ | স্কোপ ও খুঁজে পাওয়া | Shemul CLI | প্রজেক্ট ও গ্লোবাল কমান্ড, অনুমেয় অগ্রাধিকারসহ |
৬ | ডেভেলপারের স্বাচ্ছন্দ্য | Shemul CLI |
|
৭ | ইনস্টল, পিনিং ও CI | Shemul CLI | ডিপেন্ডেন্সির সঙ্গেই পিন হয়; |
৮ | রক্ষণাবেক্ষণ | Shemul CLI | আপডেট নোটিফায়ার, যাচাই, ভার্সন গেটিং, প্লাগিন |
আটটি বিভাগ, আটটি রায় — আর সেগুলো লিখেছে চারটির একটির নির্মাতা। ঠিক এ কারণেই পরের দুটি অংশ আছে, আর সেগুলো সুনির্দিষ্ট।
📊 পূর্ণ সক্ষমতার তালিকা
ওপরের আটটি রায় বিভাগভিত্তিক বিচার — প্রতিটিই একগুচ্ছ সক্ষমতার সমন্বয় নিয়ে, একটিমাত্র সারি নিয়ে নয়। নিচে অন্য দৃষ্টিকোণটি: v2.0.0 রিলিজের সঙ্গে প্রকাশিত সক্ষমতাভিত্তিক তালিকা, এখানে অপরিবর্তিতভাবে দেওয়া — এই লেখায় বাদ পড়া দুটি টুলসহ (npm scripts ও Python-এর Invoke)।
দুটি একসঙ্গে পড়ুন। চারটি সক্ষমতায় পুরো মাঠ সমান — DSL-বিহীন কনফিগ, ড্রাই-রান, ডিপেন্ডেন্সি গ্রাফ ও সমান্তরাল নির্বাহ — আর সেগুলোকে যুক্তি দিয়ে জয়ে পরিণত না করে এখানে সমান হিসেবেই রাখা হয়েছে। বিভাগভিত্তিক রায়গুলো এই সৎ ভিত্তির ওপরেই দাঁড়ানো।
চিহ্ন: ✅ নেটিভ · 🟡 আংশিক / বিকল্প উপায়ে · ❌ নেই
সক্ষমতা | Shemul CLI | GNU Make | Just | Task (go-task) | npm scripts | Invoke | 🏆 এগিয়ে |
|---|---|---|---|---|---|---|---|
কনফিগ ফরম্যাট | JSON | Makefile DSL | Justfile DSL | YAML | JSON | Python | Shemul CLI |
DSL-বিহীন (ডেটা, কোড নয়) | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | সমান |
প্রজেক্ট ও গ্লোবাল স্কোপ | ✅ | ❌ | 🟡 | 🟡 | ❌ | ❌ | Shemul CLI |
ওএস-ভেদে কমান্ড | ✅ | ❌ | ✅ | ✅ | ❌ | 🟡 | Shemul CLI |
পোর্টেবল ইন্টারপ্রেটার / ম্যাজিক ভার | ✅ | ❌ | 🟡 | 🟡 | ❌ | ❌ | Shemul CLI |
কনফার্ম / ডেঞ্জার সেফটি গেট | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Shemul CLI |
ড্রাই-রান প্রিভিউ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | সমান |
টাস্ক নির্ভরতা (DAG) | ✅ | ✅ | ✅ | ✅ | 🟡 | ✅ | সমান |
প্রি / পোস্ট হুক | ✅ | 🟡 | ❌ | 🟡 | ✅ | ❌ | Shemul CLI |
সমান্তরাল নির্বাহ | ✅ | ✅ | 🟡 | ✅ | 🟡 | ❌ | সমান |
আপডেট নোটিফায়ার | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | Shemul CLI |
ব্যাকগ্রাউন্ড অটো-আপডেট | ✅ | ❌ | ❌ | ❌ | 🟡 | ❌ | Shemul CLI |
সংক্ষিপ্ত অ্যালিয়াস ( | ✅ | ❌ | 🟡 | 🟡 | ❌ | ❌ | Shemul CLI |
ইন্টার্যাক্টিভ প্রম্পট / পিকার | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Shemul CLI |
প্লাগইন / এক্সটেনশন এপিআই | ✅ | ❌ | ❌ | ❌ | 🟡 | 🟡 | Shemul CLI |
স্কিমা যাচাই | ✅ | ❌ | ❌ | 🟡 | 🟡 | ❌ | Shemul CLI |
ইনস্টল আকার | pip | সিস্টেম | বাইনারি | বাইনারি | node | pip | Shemul CLI |
এটি যা ঢাকে না, সে বিষয়েও সমান স্পষ্ট থাকা দরকার: Shemul CLI একটি টাস্ক রানার, বিল্ড সিস্টেম নয় — কনটেন্ট-হ্যাশভিত্তিক ইনক্রিমেন্টাল রিবিল্ড নেই — আর ভাষা-সংস্করণ ব্যবস্থাপকও নয়। এটি mise বা asdf-এর মতো টুলের সঙ্গে প্রতিদ্বন্দ্বিতা না করে পাশাপাশি কাজ করে।
⚖️ প্রতিটি বিকল্প কোথায় এখনো এগিয়ে
Makefile (GNU Make) — ইনক্রিমেন্টাল বিল্ড আর সর্বত্র উপস্থিতি। Make একটি বিল্ড সিস্টেম; Shemul CLI নয়। Make ফাইল ডিপেন্ডেন্সির বিপরীতে টাইমস্ট্যাম্প মিলিয়ে দেখে এবং যে কাজ আগেই হয়ে গেছে তা বাদ দেয়। এই তুলনার কোনো কিছুই তার বিকল্প নয়। Make প্রায় সর্বত্র আগে থেকেই ইনস্টল করা: যে বদ্ধ CI ইমেজে আপনি কিছুই ইনস্টল করতে পারবেন না, সেখানে Makefile চলে আর কিছু চলে না। আপনার Makefile যদি কাজ করে এবং আপনি একটিমাত্র অপারেটিং সিস্টেমে থাকেন, সেটি বদলানোর পক্ষে এখানে কোনো যুক্তি নেই।
Justfile (Just) — কাজ চলার মতো সবচেয়ে ছোট জিনিস। একটিমাত্র স্ট্যাটিক বাইনারি, রানটাইম নেই, ভাবার মতো স্কিমা নেই, আর একটি justfile এমন কেউও পড়তে পারেন যিনি জীবনে একটিও দেখেননি। আপনার দলে Python না থাকলে এবং টাস্ক গ্রাফের বদলে রেসিপির তালিকা চাইলে Just-ই বেশি মানানসই, আর ওপরের তুলনা সে সিদ্ধান্ত বদলানোর মতো যথেষ্ট কাছাকাছি নয়।
Taskfile (Task) — এক-ফাইল ফিচারসেটে সবচেয়ে গভীর। includes, রিমোট টাস্কফাইল, ফাইলভিত্তিক sources/generates যাচাই আর একটি বড় কমিউনিটি। tools/-এ আগে থেকেই বাইনারি রাখা Go-কেন্দ্রিক দলের জন্য Taskfile স্বাভাবিকভাবেই খাপ খায়, আর Shemul CLI-এর Python নির্ভরতা সেখানে বিনা লাভে বাড়তি বাধা।
আর দুটি কাজ চারটির কোনোটিই করে না: একটিও ল্যাঙ্গুয়েজ-ভার্সন ম্যানেজার নয় — তার জন্য পাশাপাশি mise বা asdf ব্যবহার করুন — আর একটিও সত্যিকারের CI ব্যবস্থার বিকল্প নয়।
🧑💻 আপনি কোনটি বেছে নেবেন?
আপনার অবস্থা | বেছে নিন |
|---|---|
ক্রস-প্ল্যাটফর্ম দল, স্ট্যাকে Python আগে থেকেই আছে | Shemul CLI |
ফাইল টাইমস্ট্যাম্পের বিপরীতে ইনক্রিমেন্টাল বিল্ড দরকার | Makefile |
বদ্ধ CI ইমেজ, কিছুই ইনস্টল করা যায় না | Makefile |
Python নেই, একটিমাত্র বাইনারি ও ছোট রেসিপি তালিকা চাই | Justfile |
Go-কেন্দ্রিক দল, | Taskfile |
ধ্বংসাত্মক কমান্ড, যা জুনিয়ররাও চালাবেন | Shemul CLI |
ব্যক্তিগত কমান্ড, যা প্রতিটি রিপোজিটরিতে দরকার | Shemul CLI |
এমন কনফিগ, যা স্ক্রিপ্ট বা জেনারেটরকে লিখতে হবে | Shemul CLI বা Taskfile |
🚀 Shemul CLI দিয়ে শুরু করা
pip install shemul
shemul /initওপরের বেশির ভাগ ফিচার ছুঁয়ে যায় এমন একটি shemul.json:
{
"requires": ">=2.0.0",
"bin": { "py": { "windows": "python", "default": "python3" } },
"commands": {
"up": { "run": "docker compose up --build", "desc": "Start the stack" },
"migrate": { "run": "{{py}} manage.py migrate", "needs": ["up"] },
"reset": { "run": "docker compose down -v", "danger": true, "confirm": true },
"ci": { "run": "echo green", "needs": ["lint", "test"], "parallel": true }
}
}তারপর s up, s migrate, s ci, আর চালানোর আগে যেকোনো কিছু দেখে নিতে shemul --dry <command>। আপনি যে কমান্ডগুলো মুড়ে দিচ্ছেন সেগুলো কনটেইনার কমান্ড হলে সেগুলো কী করে তা আছে আমাদের Docker শেখার শুরু গাইডে। পূর্ণ রিলিজ নোট, v1.0.1 থেকে মাইগ্রেশন গাইড আর প্রতিটি নতুন কি আছে Shemul CLI v2.0.0 ঘোষণায়।
❓ সাধারণ জিজ্ঞাসা
২০২৬ সালের সেরা CLI টাস্ক রানার কোনটি?
যে ক্রস-প্ল্যাটফর্ম দল আগে থেকেই Python ব্যবহার করে, তাদের জন্য ওপরে তুলনা করা আটটি বিভাগেই Shemul CLI এগিয়ে — কনফিগ ফরম্যাট, পোর্টেবিলিটি, টাস্ক কম্পোজিশন, নিরাপত্তা, স্কোপ, স্বাচ্ছন্দ্য, ইনস্টল ও রক্ষণাবেক্ষণ। ইনক্রিমেন্টাল বিল্ড আর যে CI ইমেজে ইনস্টল করা যায় না, সেখানে Makefile-ই ভালো উত্তর; একটিমাত্র বাইনারি ও সাদামাটা রেসিপি তালিকা চাইলে Justfile; Go-কেন্দ্রিক দলের জন্য Taskfile।
Shemul CLI বনাম Justfile — কোনটি বেছে নেবেন?
Shemul CLI, যদি না আপনার স্ট্যাকে Python একেবারেই না থাকে। Just ইচ্ছে করেই Make-এর বিল্ড-সিস্টেম আচরণ বাদ দিয়ে কেবল একটি পরিষ্কার রেসিপি তালিকা হয়েছে, আর চারটির মধ্যে justfile-ই প্রথমবার দেখে সবচেয়ে সহজে পড়া যায়। যেটি এতে নেই তা হলো পুরো নিরাপত্তা স্তরটি: নিশ্চিতকরণ প্রম্পট নেই, বিপদ-সতর্কতা নেই, শেলবিহীন argv এক্সিকিউশন নেই। ইন্টারপ্রেটার ম্যাপও নেই, প্রজেক্টের পাশাপাশি গ্লোবাল কমান্ড স্কোপ নেই, আর pre/post হুকও নেই — justfile-এ ডিপেন্ডেন্সি আছে, কিন্তু পরবর্তী ধাপ বলে কিছুই নেই। Justfile নিন যদি রানটাইমবিহীন একটিমাত্র স্ট্যাটিক বাইনারি আর ছোট একটি রেসিপি তালিকাই আপনার দরকার; Shemul CLI নিন যদি ধ্বংসাত্মক কমান্ডে একটি গেট দরকার হয় এবং একই কনফিগ Windows-এ ইউনিক্স শেল ছাড়াই চালাতে চান।
Shemul CLI বনাম Taskfile — কোনটি বেছে নেবেন?
এই তুলনার সবচেয়ে কাছাকাছি জুটি এই দুটিই: দুটিই কনফিগারেশনকে ডেটা হিসেবে দেখে, দুটিতেই ওএস-ভেদে কমান্ড, ডিপেন্ডেন্সি গ্রাফ ও সমান্তরালতা আছে, আর দুটিই লিখতে আরামদায়ক। Shemul CLI নিন স্কিমা-যাচাইকৃত JSON (যা এডিটর অটোকমপ্লিট করে), confirm/danger নিরাপত্তা গেট, নথিভুক্ত অগ্রাধিকারসহ প্রজেক্ট ও গ্লোবাল কমান্ড স্কোপ, কনফিগের ভেতর থেকেই requires ভার্সন গেট, আর বাকি ডিপেন্ডেন্সির পাশে pip পিনিংয়ের জন্য। Taskfile নিন ফাইলভিত্তিক sources/generates যাচাই, includes ও রিমোট টাস্কফাইল, বড় কমিউনিটি — কিংবা কেবল এ কারণেই যে আপনি Go-কেন্দ্রিক দল, আর Python যোগ করার চেয়ে একটিমাত্র বাইনারি পাঠানোই আপনার পছন্দ।
Shemul CLI বনাম Makefile — কোনটি বেছে নেবেন?
আসলে এ দুটি একই কাজের জন্য প্রতিদ্বন্দ্বী নয়। Makefile একটি বিল্ড সিস্টেম: এটি ফাইল ডিপেন্ডেন্সির বিপরীতে টাইমস্ট্যাম্প মিলিয়ে দেখে এবং আগেই হয়ে যাওয়া কাজ বাদ দেয় — Shemul CLI সেটি একেবারেই করে না। কিন্তু প্রজেক্টের কমান্ড চালানোর কাজে — স্ট্যাক চালু করা, মাইগ্রেশন চালানো, রিলিজ ট্যাগ করা — Shemul CLI-ই সহজ উত্তর: ট্যাব বনাম স্পেসের DSL নেই, .PHONY-র ফাঁদ নেই, Windows-এ ইউনিক্স শেলের বাধ্যবাধকতা নেই, আর ধ্বংসাত্মক কিছুর আগে একটি প্রম্পট আছে। Makefile রেখে দিন যখন সত্যিকারের ইনক্রিমেন্টাল বিল্ড দরকার, কিংবা যখন CI ইমেজে কিছুই ইনস্টল করা যায় না আর Make সেখানে আগে থেকেই আছে।
Taskfile কি Makefile-এর চেয়ে ভালো?
প্রজেক্টের কমান্ড চালানোর কাজে সাধারণত হ্যাঁ। Taskfile নিজস্ব DSL নয়, YAML; ট্যাব বনাম স্পেসের ফাঁদ নেই; ওএস-ভেদে কমান্ড সরাসরি সামলায়; আর Windows-এ ইউনিক্স শেল ছাড়াই চলে। তবে যেখানে সত্যিকারের ইনক্রিমেন্টাল বিল্ড দরকার সেখানে Makefile এখনো ভালো, কারণ Task-এর ফাইল যাচাই Make-এর টাইমস্ট্যাম্প গ্রাফের চেয়ে স্থূল — আর যেখানে Make ছাড়া কিছু ইনস্টল করার অনুমতি নেই, সেখানেও।
Justfile কি Makefile-এর চেয়ে ভালো?
টাস্ক চালানোর কাজে বেশির ভাগ দলের জন্য হ্যাঁ। Just বানানোই হয়েছে Make-এর বিল্ড-সিস্টেম আচরণ বাদ দিয়ে কেবল রেসিপি তালিকাটুকু রেখে: .PHONY নেই, ট্যাবের বাধ্যবাধকতা নেই, অনিচ্ছাকৃত ইনক্রিমেন্টাল যুক্তি নেই, আর এররগুলো অনেক পরিষ্কার। তবে এটি বিল্ড সিস্টেম নয়, তাই সত্যিই বিল্ড সিস্টেম দরকার হলে Makefile-ই জেতে।
Makefile কি Windows-এ চলে?
সাহায্য ছাড়া নয়। GNU Make ইউনিক্স-ধাঁচের শেল আশা করে, তাই Windows-এ Makefile চালাতে লাগে MSYS2, Git Bash, WSL কিংবা Chocolatey-র পোর্ট; আর rm, cp বা && ব্যবহার করা রেসিপি ভিন্ন আচরণ করে বা ব্যর্থ হয়। ক্রস-প্ল্যাটফর্ম দলগুলোর Makefile ছাড়ার সবচেয়ে সাধারণ কারণ এটিই, আর এ কারণেই নতুন তিনটি টুলেই ওএস-ভেদে কমান্ডের রূপ আছে।
টাস্ক রানার ও বিল্ড সিস্টেমের পার্থক্য কী?
বিল্ড সিস্টেম আর্টিফ্যাক্ট হিসেব রাখে: ইনপুট ও আউটপুট মিলিয়ে দেখে এবং যা আগে থেকেই হালনাগাদ তা বাদ দেয় — Make-এর মূল উদ্দেশ্যই ছিল সেটি। টাস্ক রানার কেবল নামযুক্ত কমান্ডগুলো নির্ভরযোগ্যভাবে ও সঠিক ক্রমে চালায়। Shemul CLI, Task ও Just টাস্ক রানার; Make দুটিই, আর সে কারণেই সহজ কাজটির জন্য সেটি ভারী।
Python প্রজেক্টের জন্য কোন টাস্ক রানার ভালো?
Shemul CLI ইনস্টল হয় pip install shemul দিয়ে, তাই বাকি সবকিছুর মতো একই requirements ফাইলেই পিন হয় এবং CI ইমেজে আলাদা কোনো বাইনারি লাগে না। এর ইন্টারপ্রেটার ম্যাপ ও {{python}} ম্যাজিক ভেরিয়েবল মিশ্র অপারেটিং সিস্টেমে Python দলগুলোকে ভোগানো python বনাম python3 বিভাজনটিও মিটিয়ে দেয়।
এই টাস্ক রানারগুলো কি Docker ও CI-এর সঙ্গে চলে?
চারটিই যেকোনো শেল কমান্ড চালায়, তাই Docker, Compose, kubectl ও ক্লাউড CLI যেকোনোটির সঙ্গেই কাজ করে। পার্থক্য CI-তে: Shemul CLI ডিপেন্ডেন্সির মতো একই pip কমান্ডেই ইনস্টল হয় এবং কনফিগ থেকেই ন্যূনতম ভার্সনে গেট বসাতে পারে; Task ও Just-এর জন্য ইমেজে বাইনারি ইনস্টল করতে হয়; আর Make সাধারণত আগে থেকেই থাকে।
Shemul CLI কি পুরনো কনফিগের সঙ্গে সামঞ্জস্যপূর্ণ?
হ্যাঁ। v1.0.1-এর প্রতিটি shemul.json v2.0.0-তেও অপরিবর্তিতভাবে কাজ করে, আর প্রতিটি নতুন সক্ষমতাই ঐচ্ছিক কি। আচরণে একটিমাত্র পরিবর্তন কমান্ড ডিসপ্যাচের অগ্রাধিকারে: খালি নাম এখন একই নামের বিল্ট-ইনের চেয়ে আপনার নিজের কমান্ডকে অগ্রাধিকার দেয়, আর নামের আগে স্ল্যাশ দিলে — shemul /init — সবসময় বিল্ট-ইনটিই চলে।
🎯 সারসংক্ষেপ
আপনি যদি একটিমাত্র অপারেটিং সিস্টেমে থাকেন, ইনক্রিমেন্টাল বিল্ড লাগে, কিংবা ইমেজে যা আছে তাতেই আটকে থাকেন — Makefile-ই রাখুন। একটিমাত্র বাইনারি আর ছোট একটি রেসিপি তালিকা চাইলে Justfile নিন। Go-কেন্দ্রিক দল হলে Taskfile নিন।
আর আপনি যদি ক্রস-প্ল্যাটফর্ম হন, Python আগে থেকেই থাকে, এমন কনফিগারেশন চান যা যন্ত্র পড়তে ও লিখতে পারে, আর চান যে ধ্বংসাত্মক কমান্ডটি চালানোর আগে একবার জিজ্ঞেস করুক — তবে ওপরের প্রতিটি বিভাগে এগিয়ে থাকা টুলটি Shemul CLI; আর যে শর্তগুলো সেই উত্তর বদলে দেয়, সেগুলো এই লেখা থেকে বাদ না দিয়ে স্পষ্ট করেই বলা হয়েছে।

.webp&w=128&q=75)
.webp&w=256&q=75)