世界を動かす技術を、日本語で。

Railsの使い方が間違っています

概要

  • Rails 8での Vite導入 によるモダンな開発環境の紹介
  • ReactTypeScript などの最新フロントエンド技術との統合
  • 開発効率化のための 多数のツール 導入の流れ
  • シンプルなRails構成との 比較と皮肉
  • 最終的な結論としての Vanilla Rails の魅力

ViteとRails 8のモダン開発環境

  • Vite はRails 8向けの超高速ビルドツール
  • Nodenpm のインストールが前提
  • 最新のフロントエンド技術との連携が容易
    • React 導入でリアクティブなUI開発
    • React Refresh でコンポーネントの即時リロード
  • TypeScript 対応には追加設定が必要
  • Babel.babelrc の設定が必須
  • vite-plugin-ruby でRailsとの連携
  • スタイル管理に PostCSSTailwind CSS を推奨
  • コード品質維持のため ESLintPrettier 導入
  • Husky でpre-commitフックを追加

サーバーサイドレンダリング・リアクティブ機能の追加

  • サーバーサイドレンダリングには Next.jsRemix を利用
  • StimulusReflexHotwire でJSフレームワーク不要のリアクティブ機能
    • ActionCable の設定
    • Redis によるpub/subレイヤー
  • DockerDocker Compose で依存関係を隔離
  • Fly.io でのデプロイや GitHub Actions によるCI/CDパイプライン構築

モダン開発環境の複雑さとVanilla Railsの対比

  • モダンな開発環境は 多層的なツールチェーン と設定作業
    • 例:Vite, React, Babel, PostCSS, Tailwind, ESLint, Prettier, Husky, Docker, Redis, etc.
  • Vanilla Rails はコマンド一発で即起動
  • フォームもナビゲーションも 高速・シンプル
  • 複雑な構成 を皮肉りつつ、 Rails本来の強み を再評価

結論:Just F#$%^& use Rails

  • モダン技術の導入は便利だが シンプルさも重要
  • Rails単体 で十分な開発体験とパフォーマンス
  • 余計な複雑化 を避け、必要に応じて技術選定する姿勢

Hackerたちの意見

「ウェブ開発のツール疲れ」ってほんとに実感するよね。

10年以上前からそうだったよ。趣味を仕事に持ち込むのは、ほんとに愚かで自己中心的だよね。フロントエンド開発者が気分が良くなるなら、「DevOps」の世界もあんまり良くないよ。

プロとしてやってるなら、設定は一度やれば終わりだからそんなに悪くないよ。でも、ワンオフのプロジェクトやウェブ開発がメインじゃないなら、確かに面倒だよね。とはいえ、避けることもできるよ。俺はFresh(https://fresh.deno.dev/)を使ってウェブサイトを作ったけど、それだけで十分だった。いつものNode/Webpackの混乱に比べて、信じられないくらいシンプルだし。しかも、TypeScriptで書けて、TSXも使える。もし複数人でプロジェクトを進めるならESLintを設定するかもしれないけど、他に何もなくても始められるよ。

無料でRailsから得られる便利さが恋しいな。JSの世界と比べると、ほんとに桁違いだよ。多くのJS開発者は、自分たちがどれだけのものを逃しているか全然わかってないと思う。でも、結局、車輪を再発明するのがJSの生き方なんだよね。

JSのオープンさで新しいプラットフォームを作れる力には感謝してる。みんなが車輪を再発明するチャンスがあるのは素晴らしいことだよね。これらのプラットフォームは、同時にいくつか使っても大体うまく動くし、すごく拡張性があってハッカブルだし、全部をローカルでホストできるから、サイト全体が常に変わらない形で作れるって最高!でも、その力にはある程度の自制が必要だよね。できるからって、退屈な開発者や、別のやり方をしてた会社から来たばかりの人が、理由もなく新しいフレームワークを追加するのを防ぐのはチームの責任だよ。

JSで全てを書き直す目的は機能性じゃなくて、ポータビリティなんだよね。

バニラRailsを使ってサーバー生成のフォームやPOSTリクエストで次のフォームに進む時代を覚えてるよ。...10年前でも、かなり古臭く感じた。Railsはウェブアプリ用のフレームワークサポートツールを成長させたのかな?それが話してる便利さなの? > 結局、車輪を再発明するのがJSの生き方なんだよね。これには一理あるよ。根本的な考えは「サーバーサイドとクライアントサイドでどれだけ計算するか」ってことだし、ブラウザがすべての言語を実行できるわけじゃないから、クライアントサイドの動作に最短で到達するのはJSなんだよね。だから、その意味では車輪の再発明が多いんだ。(一度コードを書いて、どちらの環境でも動かすという考え方は、波があるのを見てるよ。boardgame.ioは、ターン制の状態を持つゲームを書くためのJavaScriptフレームワークで、特定の著作権パターンを使って、サーバーとクライアントの両方でコアの動作ライブラリを実行するから、クライアントはサーバーがルールを処理してゲームの状態を更新する間に、何が起こるかを予測できるんだ。)

Ember.jsはRailsコミュニティの大物たちによって作られたんだけど、Railsのようにバッテリーが含まれたオールインワンフレームワークって大きな約束をしてたんだ。でも、他のフレームワークほど人気が出なかった理由があるよね。

たしかに、便利さはあるけど、長期的にはコードベースを更新し続けないといけないし、Railsのトレンドに追いつかなきゃいけないよね。

JSにはRailsに似たフルスタックフレームワークがいくつかあるよ。Sailsっていうフレームワークもあるし… JSで解決する問題はRailsで解決する問題とは違うから、フレームワークの見た目も違うんだ。

今の状況は昔より悪化してるけど、概念自体は新しくないよね。15年前にDjangoを学んでた時、髪の毛を引き抜きたくなるほどだったのを覚えてる。チュートリアルでは、特定のバージョンのVagrant、VirtualBox、Chefをインストールするように言われたけど、どれも壊れてたりインストールが面倒だったりした!今でもDjangoは使ってるし大好きだけど、そんなことは気にしないよ。Django Rest Frameworkもまた別の気を散らす要素だった。

スティミュラスとホットワイヤーが今の「Rails流」だね。ドキュメントを読んだけど、まだ全然わからないよ。自分のJavaScriptコンポーネントを何度も再発明してる感じがする。個人的には、Rails 8 + Inertia.js + Reactは、特にshadcnコンポーネントを使うと、ずっと「車輪を再発明」してないと思うよ。

Hacker Newsで議論の続きを見る