روبی و فریمورک روبیآنریلز اولین پلتفرمی نبود که در آن برنامهنویسی را تجربه کردم، پیش از آن در یک دورهی چند سالهی از این شاخه به آن شاخه پریدن کد زدن در سیشارپ، پیاچپی و پایتون را تجربه کرده بودم. اما با این پلتفرم بود که من وارد دنیای حرفهای برنامهنویسی شدم و پروژههای متنوعی، از سرویسهای سازمانی تا MVPهای استارتاپی را طراحی و پیادهسازی کردم. در این نوشته تلاش کردهام کمی دربارهی وضعیت این روزهای زبان برنامهنویسی روبی و فریمورک مشهور آن روبیآنریلز بگویم و نگاهی داشته باشیم به ویژگیهایی که در نسخهی ششم ریلز ارائه شده است.
روبی زبانی قدرتمند و بسیار جذاب است که هیچگاه در ایران توجه بسیاری را به خود جلب نکرد و موج به راه نیانداخت اما کسانی که سالهای گذشته ارتباط بسیاری با فضای تکنولوژیک روز دنیا داشتند به سمت این زبان و البته فریمورک بینظیر ریلز که به این زبان نوشته شده بود کشیده شدند. یادگیری زبان برنامهنویسی روبی بسیار ساده است و کد نوشته شده به زبان روبی نیز به شکل ذاتی از خوانایی بسیاری برخوردار است و در طرف دیگر ماجرا ریلز یک پیادهسازی دقیق و عالی از معماری MVC ارائه میدهد که همراه شدن آن با پارادایم Convention over configuration موجب میشود در حین توسعهی پروژه شما نیازی به درگیر شدن در طراحی ساختار یا کانفیگها و تنظیمات گوناگون نرمافزار تحت وب خود نداشته باشید و بر طراحی و پیادهسازی بیزینس لاجیکها متمرکز شوید.
توسعهی آسان و سریع نرمافزارهای تحت وب در ریلز یک ویژگی مهم است که استفاده از آن میتواند برای پروژههای با مقیاس کوچک و متوسطی که در آنها بیشاز هر چیزی سرعت توسعهی نرمافزار اهمیت دارد راه حل مناسبی باشد. و این ویژگی از چشم کسانی که به طراحی و پیادهسازی نسخهی MVP یک محصول استارتاپی فکر میکردند دور نمانده بود. برای حدود ده سال از حدود سالهای ۲۰۰۵ تا ۲۰۱۵ ریلز به شکل گستردهای در دنیای وب مورد استفاده قرار میگرفت و از محبوبیت بسیاری به خصوص در اکوسیستم استارتاپی برخوردار بود. که ماحصل آن را میتوان در پروژههای موفق بسیاری نظیر گیتهاب، توییتر و Ask.fm ، Airbnb، 500px، و … دید.
اما با پیشرفت وب و توسعهی سرویسهای عظیم و پیچیدهای که باید در هر لحظه صدها هزار کاربر را راضی نگهدارند کم کم نیازمندی کلیدی تازهای مطرح شد به نام مقیاسپذیری (Scalability) که به نوعی پاشنهی آشیل فریمورک ریلز بود. در فضای پر شتاب دنیای امروز ریلز میتوانست شروع خوبی برای یک پروژه باشد، اما اگر این پروژه از حدی بزرگتر شود توسعهی آن هر روز سختتر از روز قبل خواهد شد و به مرور محدودیتهای پلتفرم خود را نشان میدهند. البته باید بگویم که خیلی از پروژههای نرم افزاری هرگز به این حد از بزرگی نمیرسند. ریلز پشتیبانی خوبی از استفاده از چند دیتابیس موازی یا فریمورک تست در یک پروژه را نداشت و این کارها اگرچه نشدنی نبودند اما همیشه دردسرهایی داشتند که باعث میشد توسعهدهندگان کمتر مایل به این کار باشند.
از طرف دیگر طی چند سال اخیر حریفی تازه نفس و البته پر سر و صدا وارد جهان توسعهی وب شده که گزینهی جذابی را روی میز گذاشته است. جاوا اسکریپ در همه جا. نودجیاس پلتفرمی است که طی سالهای اخیر به سرعت پیش میرود و پاسخهای جذابی را برای نیازهای تازهی دنیای وب ارائه میدهد. برنامهنویسی ناهمروند، سرعت بسیار بالاتر، جامعهی توسعهدهندگان بزرگ، بسیار فعال و البته ارزان قیمتتر و سبد بسیار متنوعی از ابزارها و فریمورکها.
در حال حاضر گرچه هنوز هم پروژههای زیادی با ریلز شروع میشوند و موقعیتهای شغلی بسیار زیادی برای توسعهدهندگان این پلتفرم وجود دارد اما به نظر میرسد که ریلز و به طبع آن روبی تا حدی عرصهی رقابت را به نودجیاس و فریمورکهایش واگذار کردهاند.
حال در این فضا شاید بتوان اهمیت انتشار نسخهی ششم فریمورک ریلز را بیشتر از پیش درک کرد. در این نسخه تمرکز توسعهدهندگان ریلز بیش از پیش بر مقیاسپذیرتر و چابکتر کردن فریمورک بوده است. از طرفی خبرها حاکی از آن است که تمرکز توسعه دهندگان روبی نیز بر افزایش پرفرمنس و سرعت اجرای دستورات در این زبان برنامهنویسی است. تا جایی که یوکیهیرو ماتسوموتو و تیم توسعهی روبی هدف Ruby 3×3 را در دستور کار قرار دادهاند که به این معناست که روبی نسخه سه باید سه برابر سریعتر از نسخهی دو باشد. (این هدفگذاری جزئیات فنی بسیار جالبی دارد که دوست دارم اگر فرصت شد دربارهی آن بیشتر بنویسم ولی اگر علاقهمند هستید این مقاله از ولادیمیر ماکارو در بلاگ توسعهدهندگان ردهت را بخوانید.)
در نسخهی ششم یکی از جذابترین امکانات اضافه شده به ریلز امکان استفاده از پایگاهدادههای موازی است. این ویژگی تازه به شما این توانایی را میدهد که در یک اپلیکیشن واحد بخشی از دادههای خود را برای ایزولهکردن دادهها یا افزایش پرفرمنس در یک پایگاهدادهی دیگر نگهداری کنید و به سادگی مدل خود را به این پایگاهدادهها متصل کنید و تغییرات لازم را از طریق ActiveRecord بر آنها اعمال کنید. یکی از کاربردهای اصلی این امکان تازه جدا کردن خواندن و نوشتن روی دیتابیسهایی است Master و Slave آنها از طریق Replica با هم سینک شدهاند.
همچنین در این نسخه ابزاری جدید در ریلز معرفی شده است به نام ActionMailbox که به شما این امکان را میدهد که ایمیلهای دریافتی اپلیکیشن را به کنترلرها هدایت و پردازش کنید. این ابزار جدید ریلز همراه با امکان اتصال به سرویسهایی نظیر Amazon SES، Mailgun، Maildrill و SendGrid ارائه شده است.
ActionText ابزار دیگری است که معرفی شده و یک فریمورک Rich Text است که نوشتن، ویرایش کردن و نمایش Rich Text را بسیار سادهتر میکند. اگر علاقهمند هستید که بدانید اکشن تکست چگونه کار میکند این ویدیو از DHH را در یوتیوب ببینید.
از این نسخهی ریلز Webpacker باندلر پیشفرض جاوااسکریپ خواهد بود. همچین در این انتشار ریلز تغییرات بسیاری برای بهبود پرفرمنس و امنیت داشته که دو مورد از شاخصترینهای آنها بازنویسی کامل کد جاوااسکریپت ActionCable با استفاده از نگارش ES6 و حفاظت در برابر حملات DNS rebinding است. در نهایت مهم است بدانید که برای استفاده از این نسخه روبی شما باید از ورژن 2.5.0 بالاتر باشد.
زبان روبی و فریمورک ریلز برای بازهای طولانی قهرمانهای میدان توسعهی سریع نرمافزار وب بودند، بسیاری از ایدهها و الگوهای معرفی شده یا توسعه یافته توسط این پلتفرم الهام بخش توسعهی ابزارهایی در دیگر زبانها بودند. (برای مثال تنها کافی است نگاهی به فریمورک Sails در نودجیاس بیاندازیم که بازنویسی کامل فریمورک ریلز به زبان جاوا اسکریپت است). اما امروزه کمی از این محبوبیت آن کاسته شده و ابزارها و زبانهای دیگری در صدر اخبار حضور دارند. یوکیهیرو ماتسوموتو در یک سخنرانی میگفت: «شاید ما دیگر بازیگر پر سر و صدای میدان نباشیم اما پایدارشدیم. و باید به این روند پایدار سازی و اتکاپذیری این پلتفرم ادامه دهیم. » اما من احساس میکنم این پایداری از جنس پایداری همراه با محبوبیت نسبی که زبان جاوا تجربه میکند نیست. و احتمالاً روبی آیندهای شبیه به زبان پرل داشته باشد. در واقع مشکل اساسی که رشد و توسعهی زبان روبی را با چالش مواجه کرده درهم آمیختگی زیاد هویت و کارکردهای این زبان برنامهنویسی با فریمورک ریلز است. شاید این جمله آنچنان بیراه نباشد که این ریلز بود که امکان توسعهی بسیار زیاد روبی را فراهم آورد و جامعهی روبی پس از محبوبیت هم آن چنان که باید روی امکاناتی که نیاز بخشهای دیگری از بازار را پاسخ میگفتند تمرکز نکرد. حالا هم که ریلز از رقابت عقب افتاده روبی هم دچار افول است. در نسخههای پنجم و ششم ریلز تمرکز توسعهدهندگان بر پاسخ گفتن نیازهای روز دنیای وب و مقیاسپذیرتر کردن فریمورک است. در حال حاضر ریلز بسیاری از کاستیهای پیشین خود را جبران کرده و گسترهی بسیار وسیعی از نیازمندیهای توسعهی نرمافزارهای کلان را پوشش میدهد اما مسئله این است که این پلتفرم دیگر ماننده ده سال پیش، پرچمدار و پیشبرندهی میدان نیست، بلکه رقبایی جوان و جسورتر وارد عرصهی مبارزه شدهاند و این عرصه را به پیش میبرند و ریلز مسیری که آنها باز میکنند را دنبال میکند.
این نوشته پیش از این در وبلاگ شخصی من منتشر شده است.