scriptフォルダとジェネレータ
Rails 8.0では、1回限りのスクリプトや汎用スクリプトを保存するためのscriptフォルダが利用可能になりました。具体的には、データ移行のためのスクリプトや、クリーンナップのためのスクリプトを置く、ということになっています。Railsアプリケーションを作成すると、中身のないscriptフォルダが作成されています。
スクリプトは、ジェネレータによって以下のように作成します。
% rails generate script some_script
コマンドの実行で、script/some_script.rbファイルが作成されます。ファイルの中身は以下のようになっています。
require_relative "../config/environment" # Your code goes here
require_relativeにて、環境設定ファイルを1回だけ読み込むようになっています。続けて、スクリプトとして実行したいコードを書いていきます。例えば、以下のようにテーブルの一部を手動で更新、追加するというスクリプトです。
require_relative "../config/environment" # Your code goes here name, title = ARGV if post = Post.find_by(name: name) post.update!(title: title) else Post.create!(name: name, title: title) end
実行は、Rails経由ではなく、Rubyインタプリタからプロジェクトのルートで直接行います。
% ruby script/some_script.rb Nao Hello
Propshaftがデフォルトで採用
Rails 8.0では、従来のSprocketsに替わりPropshaftがデフォルトのアセットパイプラインになりました。Propshaftは、Rails 7.0で導入されたアセットパイプラインのためのライブラリです。このバージョンでは、Railsアプリケーション作成時に-aオプションを指定することで、デフォルトになっているSprocketsの代わりにPropshaftを使用することができました。Rails 8.0では、-aオプションなしでPropshaftが使用されます。
PropshaftがSprocketsと大きく異なる点は、Propshaftはトランスパイル、圧縮・連結などの処理を行わないことです。単にダイジェスト(コンテンツから計算される一意のID)をアセットのファイル名に付加して公開フォルダにコピーするだけなので、高速に動作します。
この背景には、HTTP/2の普及を含むネットワーク環境の高速化、バンドル済みのアセットを直接利用することでのバンドルの必要性の低下などがあります。
