1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RailsVite - Vite 連携の新たな選択肢

1
Last updated at Posted at 2026-04-23

RailsとViteの連携は、Vite Ruby(vite_rails)がこれまで唯一の選択肢でしたが、Laravel(PHP)のViteプラグインにインスパイアされて開発された、新たな選択肢が登場しました。

まだバージョンは若いですが、RailsサーバとViteの連携を問題なく行えます。

また、vite_railsのユーザー(ヘビー?)により開発されているため、vite_railsから容易に移行できます。

特徴

Rack Proxy要らず

vite_railsはRailsサーバーとViteの連携にRack Proxyを利用していますが、プロキシなしにRailsサーバーとViteの連携を行います。

独自の設定ファイルなし

vite_railsにはViteとの連携の設定を記述する config/vite.json が存在しましたが、独自の設定ファイルは存在しません。

How It Works

Rackプロキシも、config/vite.jsonも、余計なbinstubsも必要ありません。

Development

Viteプラグインが開発サーバーのURLを tmp/rails-vite.json に書き込み、Railsのヘルパーがそれを読み取って、Viteを直接参照するscriptタグを生成します。ブラウザはViteと直接通信を行うため、Puma(Railsサーバー)がアセットを処理することはありません。

Production

vite build は、標準的なViteマニフェストと共に public/vite/ ディレクトリへフィンガープリント付きアセットを出力します。Railsのヘルパーがそのマニフェストを読み取り、適切なタグを生成します。

インストール

gem "rails_vite"
bundle install
bin/rails generate rails_vite:install

Vite 設定

Viteまわりの設定は、Viteの設定ファイルである vite.config.js(|ts)に記述します。

import { defineConfig } from 'vite';
import rails from 'rails-vite-plugin';

export default defineConfig({
  plugins: [
    rails(),
  ],
});

フロントエンド

ソース・ディレクトリ

app/frontend にフロントまわりのコードを置く場合、次のように記述します。(app/javascriptがsourceDirのデフォルト値です。)

import { defineConfig } from 'vite';
import rails from 'rails-vite-plugin';

export default defineConfig({
  plugins: [
    rails({ sourceDir: 'app/frontend' }),
  ],
});

エントリーポイント

(sourceDir)/entrypoints がある場合、(sourceDir)/entrypointsを
、ない場合、(sourceDir)直下を、エントリーポイントの置き場所とします。

View Helper

Viteはビルド結果のファイル名にdigest(内容から算出されるハッシュ値)を付与するため、Rails標準のView Helperを利用できないので、vite_rails同様、独自のヘルパーが用意されています。

Helper 説明
vite_tags(*entries, **options) スクリプト/スタイルシート モジュール・リロードのタグに対応、拡張子必須
vite_javascript_tag(*entries, **options) vite_tagsと同じ、拡張子.js必須
vite_stylesheet_tag(*entries, **options) vite_tagsと同じ、拡張子.css必須
vite_typescript_tag(*entries, **options) vite_tagsと同じ、拡張子.ts必須
vite_asset_path(name) マニフェストからフィンガープリント付きのパスを返します
vite_image_tag(name, **options) マニフェストによって解決されたsrcを持つ画像タグ

Vite Ruby (vite_rails)からの移行

手順

bin/rails generate rails_vite:install

ジェネレータを実行/上書き後、上書き前との差分を反映(書き戻)します。

削除すべきファイル

  • bin/vite
  • config/vite.json

修正すべきファイル

  • Procfile.dev
  • vite.config.js(|ts)

Procfile.dev

基本、ジェネレータにより作成/上書きされます。

上書きされない場合、Viteまわりを次のように書き換えます。

# vite: bin/vite dev
js: pnpm vite

vite.config.js(|ts)

Vite プラグインを導入している場合、その設定を反映します。

上書きせず、vite_rails用の設定を削除し、RailsVite用の記述を追加する、のもありです。

移行例

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?