Finding relationships between Ruby’s top packages and their dependencies
shopify.engineering
shopify.engineering
Most larger React projects have _far more_ dependencies_ than an equivalent Ruby project. You could chalk it up to a few things I think:
* the JS ecosystem is just much larger - more devs (especially inexperienced ones) means more code and more copy/pasting solutions that rely on `npm install` from the web.
* JS has just not been as stable and mature as Ruby or Python until the past couple of years (thanks to ES5/ES6), especially if you consider the browser acceptance of latest ES.
* The general explosion of NPM packages that do dumb, trivial shit - see https://www.npmjs.com/package/is-odd and https://www.davidhaney.io/npm-left-pad-have-we-forgotten-how... for two examples.
* There are at least four major tools to manage dependencies in JS: npm, pnpm, yarn, and yarn 2. This often means you end up with multiple ways teams are handling JS deps in their projects, with all the non-essential complexity that comes with it. In Ruby there is just one way - Bundler. I don't even want to talk about python.
* There are more leading frameworks to choose from in JS, which means you have libraries that support all of them, doing things in slightly different ways. Consider a legacy Angular app that updated to React in 2018 and is updating to Svelte or whatever now. If the team hasn't been very disciplined in updating and removing all transitive dependencies through the upgrades, you will inevitably end up with a ton of stuff (is `react-date-wrangler-jobber` used? I still see references to it, but is that page live? who knows!?) in your bundle hanging around and cluttering up your build.
I've been updating things across our main React/Rails product at $current_job. Most major dependencies were out of date by 1-2 years. Updating Ruby has been *so much* easier, whereas the React / npm stuff often ends up in a rats nest of conflicting dependencies. And this is after we made a major effort in our build and packaging setup across the board.
I do think it is getting better in the npm world, slowly. Ever so slowly.
+1. I see way more of my js packages deprecated and renamed than ruby. There hasn't been a huge backwards compatibility issue in ruby since like ~2.7 (ruby 3 and 3.1 were easy), but hunting down which version of node the npm package works on is a huge pain.
Ah yep - last week I removed 25 (!) completely unused libraries from a package.json file.
> the React / npm stuff often ends up in a rats nest of conflicting dependencies
At a previous job we started with Webpack 3, right before Webpack 4 was released, and even months later a bunch of stuff still didn't work with Webpack 4.
Other than DHH adherents, is anybody still excited about Rails? To draw an even smaller circle, is anybody still excited about Ruby when Rails isn't involved?
If people use a language/framework and don’t constantly talk about it online, does anyone even use that language/framework?
The non-snarky answer is yes and yes. Source: me, who just attended Euruko, a Ruby conference. Rails is just mature, dependable, and boring, so there’s not as much to talk about compared to X-framework of the week/month.
Are they SaaS apps intended to be used by millions of people? No, maybe only in the thousands or tens of thousands but I think that not many SaaS are used daily by million of people. There are only 24 hours in a day.
The Ruby/Rails community is very mature, the language and the framework are flexible enough for anything, and there are libraries and guides for anything you want to do.
So no, it’s not that exciting now, but it’s still widely used. From my own experience, my company continues to use it for many project because we have tons of our own library code that couldn’t easily be recreated.
Far more excited than I am about JS when the browser isn't involved.
> what modern SaaS offerings are choosing Rails
Github, Airbnb, Shopify, Constant Contact, SlideShare, CrunchBase, Bloomberg, Yammer, GitLab, ZenDesk, Hashicorp, Hulu, Netflix.
More here: https://thinkingelixir.com/podcast-episodes/073-elixir-at-su...
but most of their current stack and active development, frontend and backend, is Next.js, and not the Rails/Phoenix fullstack way: https://github.com/supabase/supabase
> most of their current stack and active development, frontend and backend, is Next.js
This is only the Dashboard. We dogfood Supabase to build Supabase, so we use the tools in the doc above
Cite?
"GitHub is about a third of the way through an architectural change that began last year. The company is moving away from Ruby on Rails toward a more heterogeneous, composable infrastructure. Ruby still has a place at GitHub – Lambert referred to the company as a Ruby shop, but he said there's more Go, Java and even some Haskell being deployed for services."
https://github.blog/2021-03-16-improving-large-monorepo-perf...
"We’re also in the middle of a significant refactoring effort, doing our part to decompose GitHub’s famous Ruby monolith, and writing a new microservice in Go"
It's 20 years ahead of Perl, but same fate. It doesn't have a niche besides web w/ Rails, which javascript/typescript is now dominating. It's the slowest and has the most well-known scale problems. The dev ecosystem is almost unanimously moving towards static types, a la Typescript and MyPy. It's symbols are not as transferable like more popular C-based langs: Javascript, Java, Python, Go. The only point devs will routinely point to in favor of it is "well, it just feels fun and nice to work with", while actually StackOverflow survey data shows Rust, Typescript, Python all leagues ahead in "loved", while Ruby is in majority dissatisfaction land right next to the monstrosities of C++ and Scala.
* Most of the alternatives still don't come close to Rails for web app productivity--that's more than a gee it feels fun
* The pendulum of JS apps is swinging away from pointless SPA's and more toward hotwire and live-updating apps
* Ruby is as fast or faster than Python on most points
Once I add bootstrap and simple_form, the amount of code I don't have to write in a Rails application is just incredible.
And yes, I've used other things on and off my entire career. React is a love/hate relationship. Happy to punt it when working on a small project.
Also, I'm using Propshaft instead of Hotwire
rails new --skip-hotwire -a propshaftAlso, I'm using Propshaft couple with Importmap instead of Hotwire & Turborails and so on
mkdir foo
cd foo
bundle init
# edit Gemfile to set the Rails you want: main, edge, etc.
bundle
# plus whatever other options you normally choose when you run `new'
bundle exec rails new --skip-hotwire -a propshaft .
bundle install
bundle binstubs bundler
bin/bundle add importmap-rails
bin/rails importmap:install
bin/importmap pin @rails/ujs alpinejs bootstrap
What's simple_form btw, am I missing out on something wonderful?Data science.
In the past (around 2010 to about 2018) I did the web stuff in Rails and communicated through the database for the ML stuff I needed from Python, but even though Rails is better than Django, these days Django is good enough and it isn't worth the tooling and the employee dual lingual requirements to justify both.
It sucks and I wish I could use Ruby more. I agree Ruby and Rails are both better than Python and Django on their own, but the scientific computing part of Python is just so phenomenal that there isn't really anything to do about it anymore other than to accept it.
Ruby is like Elivish. It's poetic and beautiful and consistent where it counts, full of symbolism and grandeur, but in a world of dwarves, humans, and orcs it just isn't useful enough to justify making an entire team learn it.
I've thought about switching to Elixir work but I just don't see the demand there yet. There's 2 orders of magnitude more Rails roles than there are Elixir jobs. That might change with time hopefully.
I can only speak for myself but I think Rails 7 is the most exciting release for years.
Hotwire, Stimulus, et al are finally a compelling reason to do frontend work in Rails again vs the last few years of using it mainly as an API for JavaScript SPA frameworks.
Ruby 3 finally provides a decent solution for async IO (with fully parallel ractors a work in progress).
Tooling is also much improved over a few years ago with Sorbet and Treesitter AST based stuff.
Rails might be boring but boring gets the job done.
I love Ruby, and I'm excited about where it is and where it's going. It's my go-to language for just about everything. I write automations with it, API clients with it, little just-for-me programs with it, little experiments with it.
Ruby is a beautiful, delightful object oriented language and I wouldn't want to work with anything else right now (especially not Javascript).
IMO the biggest issue is the fact Ruby is untyped. Things like updating Rails is an absolute nightmare.
I like Rails despite DHH. I'm a part of huge communities where people are still excited for Rails.
It might not be the newest thing but I love working in Rails. Kind of depressive when, every time Ruby comes up here (it's still a lot, which should be a better indicator), this same topic comes up. Not because i'm tied to the language, but that the joy I am having isn't shared.