پایتون Django را دارد. PHP لاراول (Laravel) را دارد. روبی (Ruby) روبی آن ریلز (Ruby on Rails) را دارد. اما فریمورک فولاستک (full stack) برای جاوااسکریپت کجاست؟
میتوان گفت بسیاری از فریمورکهای محبوب فرانتاند (frontend) اکنون فولاستک هستند - Next.js، Nuxt.js، Remix، Svelte و غیره. اما در سال ۲۰۲۰، تعداد کمی فریمورک واقعاً فولاستک جاوااسکریپت وجود داشت - اگر اصلاً وجود داشت. و این زمانی بود که برادران دوقلو و مهندسان نرمافزار، ماتیا شوشیچ (Matija Šošic) و مارتین شوشیچ (Martin Šošic)، تصمیم گرفتند یکی بسازند.
ماتیا شوشیچ به The New Stack گفت: «اکنون، همه چیز به سمت جاوااسکریپت در حال حرکت است زیرا فراگیر شده و برای توسعهدهندگان آسانتر است که از یک زبان واحد در فرانتاند و بکاند (backend) استفاده کنند.» وی افزود: «به همین دلیل است که صنعت اکنون به سمت یک راهحل کاملاً جاوااسکریپتی حرکت میکند. اما، میتوان گفت، یک فریمورک یکپارچه برای کل استک (stack) که فقط بر پایه جاوااسکریپت باشد، وجود نداشته است. این همان چیزی بود که ما میخواستیم اصلاح کنیم.»
آنها به Y Combinator، یک شتابدهنده استارتاپ و شرکت سرمایهگذاری خطرپذیر که در شرکتهای فناوری مراحل اولیه سرمایهگذاری و از آنها حمایت میکند، درخواست دادند؛ این شرکت به خاطر راهاندازی شرکتهایی مانند Airbnb، Stripe و Reddit شناخته شده است. درخواست آنها رد شد، اما در نامه رد درخواست، انگیزهای برای تلاش دوباره یافتند:
«یک زبان خاص دامنه (DSL - domain-specific language) برای توسعه اپلیکیشن وب یکی از جامهای مقدس برای برنامهنویسانی است که علاقهمند به ساخت ابزار برای سایر برنامهنویسان هستند.»
چه کسی نمیخواهد یک جام مقدس بسازد؟ این موضوع آنقدر وسوسهانگیز بود که نمیشد دوباره امتحان نکرد. برادران دو بار دیگر درخواست دادند تا اینکه پروژه آنها پذیرفته شد.
از دل آن، Wasp، یک فریمورک فولاستک جاوااسکریپت و یک شرکت هشت نفره برای پشتیبانی از آن پدید آمد. (Wasp در GitHub موجود است.)
معادلی برای لاراول در جاوااسکریپت وجود ندارد
ماتیا شوشیچ گفت: «در ۱۰ سال اخیر، اساساً ما یک راهحل واحد نداریم، بلکه مجموعهای از راهحلهای کوچک داریم که هر کدام یک بخش خاص از مشکل را مدیریت میکنند.»
او اشاره کرد که فریمورکهای جاوااسکریپت فرانتاند وجود دارند - برادران از Backbone، Angular و React در سمت کلاینت استفاده کرده بودند. همچنین فریمورکهای جاوااسکریپت بکاند وجود دارند - آنها از PHP گرفته تا Java و Node.js استفاده کرده بودند. همچنین پایگاههای داده با نگاشت شیء-رابطهای (ORM - object-relational mapping) و در این میان، راهحلهای مدیریت وضعیت و یک لایه API وجود دارد.
ماتیا شوشیچ گفت: «شما قطعات تخصصی برای هر بخش از استک دارید، اما شما به عنوان یک توسعهدهنده با کار سرهمبندی همه چیز و اطمینان از اینکه همه این قطعات میتوانند به طور مؤثر، مقیاسپذیر و ایمن با هم ارتباط برقرار کنند، تنها میمانید.» وی افزود: «این در واقع نیازمند تخصص دامنه و دانش تخصصی زیادی است. و همچنین، برای انجام آن به کار زیادی نیاز دارد.»
آنها که نتوانستند یک فریمورک فولاستک واحد پیدا کنند و «خستگی فریمورک» را تجربه میکردند، در سال ۲۰۲۰ تصمیم گرفتند یکی بسازند، با الگوبرداری از سایر فریمورکهای فولاستک برای زبانهای دیگر.
این فریمورک بتا که Wasp نام دارد، در حال حاضر نزدیک به ۱۶۰۰۰ ستاره در GitHub دارد و بیش از ۴۰۰۰ توسعهدهنده در دیسکورد (Discord) آن حضور دارند.
او گفت: «آنچه ما در تلاش برای انجام آن هستیم، اساساً بازآفرینی این تجربه منحصر به فرد Ruby on Rails و Laravel است، اما برای اکوسیستم مدرن جاوااسکریپت.» وی افزود: «این بدان معناست که در نهایت، ما کارهای بسیار بیشتری را برای شما انجام میدهیم، که منجر به کد کمتر و دانش و تجربه کمتری برای خود توسعهدهنده میشود.»
اما آنها همچنین تا حدی انگیزه داشتند چیزی بسازند که از زبان خاص انتزاع شده باشد.
او گفت: «روبی ریلز عالی بود، اما دوباره، ما اکنون در حال دور شدن از روبی هستیم.» وی افزود: «امروزه جاوااسکریپت مطرح است و قطعاً برای مدت طولانیتری جاوااسکریپت خواهد بود. اما حتی با وجود آن، آیا میتوان چیزی ساخت که صرفاً به جاوااسکریپت وابسته نباشد؟ این بخش دیگری از انگیزه برای Wasp است.»
Wasp: یک DSL که به عنوان فریمورک عمل میکند
از نظر فنی، Wasp یک زبان خاص دامنه (DSL) است، یک زبان کامپیوتری تخصصی برای یک حوزه کاربردی خاص. این بدان معناست که برای حل مشکلات در یک حوزه خاص طراحی شده است، نه اینکه به عنوان یک زبان عمومی عمل کند که بتوان از آن برای هر نوع برنامهنویسی استفاده کرد.
در این مورد، Wasp یک DSL برای جاوااسکریپت است. اما خانواده شوشیچ یاد گرفتهاند که آن را اینگونه خطاب نکنند، زیرا باعث سردرگمی مردم، حتی توسعهدهندگان، میشود. آنها تمایل دارند فرض کنند که این یک زبان متفاوت از جاوااسکریپت است، که اینطور نیست.
ماتیا شوشیچ گفت: «ما در واقع Wasp را به عنوان یک زبان برنامهنویسی جدید برای اپلیکیشنهای وب معرفی میکردیم، اما این برای توسعهدهندگان مانند یک پایتون جدید یا C++ جدید یا جاوا جدید به نظر میرسید که همگی زبانهای برنامهنویسی عمومی هستند.» وی افزود: «برای آنها، آن پیام اولیه این حس را القا میکرد که باید دانش موجود جاوااسکریپت خود یا هر آنچه که استفاده میکردند، مانند React و Node.js، را کنار بگذارند و باید استک کاملاً جدید ما را یاد بگیرند، که بدیهی است بسیار دلهرهآور است.»
«آنچه ما در تلاش برای انجام آن هستیم، اساساً بازآفرینی این تجربه منحصر به فرد Ruby on Rails و Laravel است، اما برای اکوسیستم مدرن جاوااسکریپت.»
— ماتیا شوشیچ، مدیرعامل Wasp
او توضیح داد که بنابراین آنها آن را یک فریمورک مینامند زیرا در واقع اینگونه عمل میکند.
با این حال، این واقعیت که این یک DSL است به این معنی است که با فناوریهای دیگر کار میکند. به طور خاص، Wasp به شدت به React، Node.js و Prisma برای ORM متکی است.
ماتیا شوشیچ گفت: «نود درصد کار شما نوشتن با آن فناوریها خواهد بود.» وی افزود: «Wasp فقط یک چسب ساده بین آن بخشها است که تمام این کارهای سنگینی را که من توصیف میکردم انجام میدهد.»
او اضافه کرد که زبان فقط یک جزئیات پیادهسازی است که به آنها کمک کرد تا کدهای تکراری (boilerplate) را کاهش دهند و کارها را سریعتر کنند.
چرا ریاکت و نود.جیاس؟
ریاکت (React) به دو دلیل اصلی انتخاب شد - این فناوری بود که برادران در آن زمان بیشترین تجربه را با آن داشتند و به طور گسترده مورد استفاده قرار میگرفت.
ماتیا شوشیچ گفت: «برای ما منطقی بود، ما آن را بهتر از همه میشناختیم و میتوانستیم به وسیعترین بازار دسترسی پیدا کنیم.» وی افزود: «باز هم، با توجه به ماهیت Wasp، ما آن را طوری طراحی میکنیم که نسبت به فریمورک یا کتابخانه UI آگنوستیک (agnostic) باشد. ... اما در حال حاضر، ما روی React و Node.js تمرکز کردهایم، زیرا آنها به نوعی اصلیترین فناوریها برای شروع بودند.»
استفاده از React و Node مزیت دیگری را نیز به همراه داشت - پذیرش سازمانی.
او گفت: «همه میدانند چگونه React و Node را دیپلوی (deploy) کنند. به همین دلیل است که ما شاهد پذیرش سازمانی بودهایم، زیرا برای آنها دیپلوی کردن React و Node فوقالعاده آسان است.» وی افزود: «هیچ نوع زیرساخت شخص ثالثی وجود ندارد که به آن نیاز داشته باشید، که این یک مانع بزرگ برای شرکتها است.»
او گفت که Prisma یک فریمورک کوچک برای پایگاه داده است و به راحتی از طریق جاوااسکریپت قابل استفاده است. این فریمورک از Mongo، Postgres و سایر پایگاههای داده پشتیبانی میکند، بنابراین به خوبی با Wasp هماهنگ بود.
ابزارهای اضافی
تیم Wasp همچنین دو ابزار ارائه میدهد که توسعه را ساده میکند:
- Mage یک تولیدکننده اپلیکیشن وب مبتنی بر هوش مصنوعی است که به شما امکان میدهد نوع اپلیکیشنی را که میخواهید توصیف کنید و یک پیشنویس کارآمد از کد را ارائه میدهد.
- OpenSaaS یک بویلرپلیت (boilerplate) برای اپلیکیشن نرمافزار به عنوان سرویس (SaaS) فراهم میکند. معمولاً، توسعهدهندگان این بستههای اولیه را میفروشند، اما خانواده شوشیچ تصمیم گرفتند آن را متنباز کنند. در اینجا یک نمونه ویدیوی کوتاه از کار این ابزار وجود دارد.
ماتیا شوشیچ به توسعهدهندگان توصیه کرد Wasp را بررسی کنند زیرا این یک فریمورک فولاستک جاوااسکریپت است. طبق پرسشهای متداول Wasp، شروع استفاده از فریمورک Wasp به طور کلی حدود ۳۰ دقیقه طول میکشد.
او گفت: «توانمندساز بزرگ این است که توسعهدهندگان سازمانی میتوانند به راحتی آن را به صورت داخلی اجرا کنند.» وی افزود: «زیرا در نهایت، Wasp فقط یک اپلیکیشن ساده React و Node.js است که برای دیپلوی در تقریباً هر محیطی، رایج و اصلی است.»