最近、フロントエンドは Vite で開発するのが主流になっていると思いますが、Railsの場合、なあなあでそのまま来ている場合も多いかなと思います。
開発体験の改善ができないかということを考える機会があり、RailsでViteを導入する際の手順を vite_railsを利用して確認してみました。
Viteとは
従来と比較して、より高速に動作するフロントエンドビルドツールです。
以下のような特徴があります。
- 開発時にはバンドルが不要なので、開発サーバーの起動が早い
- Hot Module Replacement(HMR)により、修正を画面の再描画なしで適用できる
- HMRの特性により、修正による描画までの速度がモジュール数に依存しにくい
RailsにViteを導入する
RailsにViteを導入する際に、自前で導入するということもできますが、やや煩雑な作業が発生するかと思います。
そこで、諸々をよしなにやってくれる vite_rails
というGemを使って導入しようと思います。
Railsのプロジェクトを作成する
本当は既存のプロジェクトへの適用をしたいところですが、今回は、Railsのプロジェクトを作成します。
ついでに、最近流行りのTypeScriptも導入しておきます。
$ rails new vite_rails_example --webpack=typescript
作成したら、一旦 git commit しておきます。
$ git commit --allow-empty
$ git add .
$ git commit
vite_rails を導入する
次は、 vite_rails
gemを導入します。
gem 'vite_rails'
$ bundle install
$ bundle exec vite install
次に、 application.html.erb
を書き換えます。
とはいえ、ほぼほぼ適用済みなので、整理だけします。
<!DOCTYPE html> <html> <head> <title>ViteRailsExample</title> <meta name="viewport" content="width=device-width,initial-scale=1"> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= vite_client_tag %> <%= vite_typescript_tag 'application' %> <%= vite_stylesheet_tag 'application' %> </head> <body> <%= yield %> </body> </html>
p { color: red; }
Hot Module Replacement できるようにプラグインを導入する
次に、Hot Module Replacement(HMR)ができるように、プラグインを導入しておきます。
$ yarn add -D vite-plugin-full-reload
プラグインを適用するために、vite.config.ts
を書き換えます。
import { defineConfig } from 'vite' import RubyPlugin from 'vite-plugin-ruby' import FullReload from 'vite-plugin-full-reload' export default defineConfig({ plugins: [ RubyPlugin(), FullReload(['config/routes.rb', 'app/views/**/*'], { delay: 100 }), ], })
適当なControllerを生成して試してみる
適当なControllerを作成して、試してみます。
$ bundle exec rails g controller home index $ bundle exec rails s $ bin/vite dev
以下のような形で、HMRによりブラウザでリロードなどを挟まずにサクッと反映されます。
まとめ
新規作成したRailsプロジェクトに、 vite_rails
を用いて Viteを導入して、Hot Module Replacement ができるようにしました。
本番への適用などまで考えると、設定などをしっかり見ていく必要がありそうですが、とりあえず導入するというところまでであれば、かなり簡単にできそうですね。