今Rails 8アプリを作るなら何も足さないバニラ味にしよう(翻訳)
今の世の中で、Railsアプリを新しく作るゆとりに恵まれているならば、バニラアプリとして作る1、すなわち依存関係を何も足さないのが、私たちからのオススメです。
- Rubyの依存関係は、よほどの理由がない限りRailsに追加しない。
Railsで生成したGemfileは、極力手つかずのままにしておく。 -
JavaScriptの依存関係をRailsに追加するのは、Ruby依存関係の場合以上に慎重に検討する。
Reactなどのフロントエンドフレームワークも、それらにJSONを送り込むためのJSON APIも無用。 -
Hotwireはフロントエンドで素晴らしく実用的。
驚くほど生産性の高いテクノロジーを提供してくれるHotwireを使わない手はない。 -
モバイルアプリを作る場合も同様に、Hotwire Nativeを活用する。
Hotwire Nativeのハイブリッドな手法を使えば、構築したWebアプリにネイティブ同様のモバイルアプリ体験を必要に応じて組み合わせるという夢が叶います。従来のように純粋なネイティブアプリを最初からこしらえる作業と比べれば、生産性の違いは歴然としています。 -
サーバーサイドレンダリングを積極的に受け入れる。
サーバーサイドレンダリングがクールな時代が再び到来している。 -
ERBテンプレートとビューヘルパーはプログラマーが今後も安心して使い続けられる。
しかもコード上でデザイナーとコラボするときの共通基盤としても優れている。 -
DHHが言うように、ビルド無用ほどシンプルなものはない。
わざわざビルドを持ち込んで選択肢を閉ざすことはない。JavaScriptをバンドルするのをやめてimport mapsを使い、CSSをバンドルするのもやめて、現代の標準的なCSS機能の数々をPropshaftで配信すればよい。JavaScriptファイルとCSSファイルが100個ずつあったとしても、単独で200件ものリクエストが単一のHTTP/2上に多重化される。
この結果には誰もが満足できるはず。 -
Redisは追加しない。
キャッシュが欲しければsolid_cacheを、ジョブキューが欲しければsolid_queueを、Action Cableではsolid_cableを使える。
これらSolid3兄弟はいずれも今愛用しているリレーショナルデータベース上で動作し、現場でのバトルテストも経ている。 -
アプリのテストにはMinitestを使う。
アプリ構築では現実的なテストデータのセットをfixtureで構築する。 -
RailsアプリをPWA化する。
PWAはRails 8で完全にサポートされているので、モバイルアプリについて他にあれこれ検討しなくても、これで十分すぎるほど。 -
アプリのデプロイにはRails 8標準のKamalを使う。
経験から申し上げると、importmap.rb
でインポートされるTurboやStimulusやアプリのコントローラなどは変えるべきではないでしょう。Railsで生成されたGemfile
も同様に、極力変えないでおくべきでしょう。
私が言っていることが過激に響くのは重々承知していますが、いつまで経っても依存関係を大量に選び続けなければならないこの複雑な世の中では、バニラの道を進むことが過激なのです。
これが、私たちが37signalsで選んだ新しいアプリであるRails 8の技術スタックです。私たちは人数が少ないので、生産性を非常に重視しています。さらに、私たちが売っているのは技術スタックではなく、あくまで製品なので、ユーザーに喜んでもらえることがとても重要です。Rails 8はこの2つを両立させる最適なバランスを達成しているからこそ、私たちのおまかせ(omakase)技術スタックとなっているのです。
「バニラ」とは、アプリを身軽にして、しがらみをなくすことを意味します。依存関係は、少なければ少ないほど将来への禍根も減ります。統合機能がすぐ使える状態になっていれば、構築作業に専念できます。また、バニラ状態なら今後の機能アップグレードをスムーズに行える見込みも最大化されます。
ただしバニラの道を進むには、固い決意が必要です。目新しいピカピカの新機能がいつでも誘惑してくるからです。依存関係を増やすことでどんなメリットがあるかは誰でもすぐわかりますが、長期的にどんな代償を払うはめになるかは誰にもわかりません。
決めるのは、他ならぬあなた自身です。Railsは、そんなあなたを包み込む壮大なテントであり、これが私たちの総意です。
心に響くものがあれば、ぜひバニラの道を選びましょう!
アプリの内部設計に関する私たちのアドバイスも、ぜひ参考にしてください↓。
関連記事
- vanillaは、アイスクリームのバニラ味のように他の技術的なトッピングや混ぜものがない、素の状態を指すときによく使われます。 ↩
概要
原著者の許諾を得て翻訳・公開いたします。
日本語タイトルは内容に即したものにしました。