こんにちは、hachi8833です。
日本時間の早朝、DHHが自らRails 5.2ベータの公開をアナウンスしましたので、駆け足で内容を追っかけてみました。
Rails 5.2 is out in beta with the brand new framework of Active Storage. File uploads and processing has never been easier! 🌟 https://t.co/K38EEcDvUO
— DHH (@dhh) November 27, 2017
過去の週刊Railsウォッチで扱った内容が多かったので、扱ったことのあるPRにはバックナンバーも貼りました。
Rails 5.2ベータの概要
プレスリリースの末尾には、Railsの5.xシリーズはこれが最後になるかもしれないとあります。既にRails 6.0を視野に入れているそうです。
Active Storageの改善
ファイルをクラウドにそのままアップロードできるようになりました。Amazon S3、Google Cloud Storage、Microsoft Azure Cloud File Storageをすぐ使うことができます。動画やPDFのプレビューも作りやすくなったそうです。
Active StorageはBasecamp 3で既に本番運用されているとのことです。
Basecamp 3 is now using Active Storage, the newest Rails component, in production. 🚀
— George Claghorn (@georgeclaghorn) August 24, 2017
- ファイルが1つの場合も複数の場合も対応
モデルでhas_one_attached
やhas_many_attached
で指定できます。
# ファイルが1つの場合
class User < ApplicationRecord
# 添付ファイルとblobが関連付けられる。ユーザーが削除されるとデフォルトで削除される
# (モデルが削除され、リソースファイルが削除される)
has_one_attached :avatar
end
# ファイルが複数の場合
class Message < ApplicationRecord
has_many_attached :images
end
- Active StorageとJavaScriptライブラリでクラウドへのダイレクトアップロードをサポート
// asset pipelineに以下を追加
//= require activestorage
// npmパッケージを利用
import * as ActiveStorage from "activestorage"
ActiveStorage.start()
<!-- フォームでアップロードを指定 -->
<%= form.file_field :attachments, multiple: true, direct_upload: true %>
なお現時点では、ActiveStorageのドキュメントはedgeguides.rubyonrails.orgにも上がっていません。
週刊Railsウォッチ(20170707)Railsの新機能ActiveStorage、高速Rubyフォーマッタrufo gemが超便利、Railscasts全コンテンツが無料公開ほか
Redisキャッシュストアが標準で使える
純粋なRedis、hiredis、Redis::Distributedをサポートし、複数Redisでのシャーディング(sharding: 複数サーバーへのデータ分散)やMGETも利用可能です。Redisサーバーにアクセスできない場合にも例外をraiseせず、ローカルキャッシュも利用できます。
# デフォルトは `redis://localhost:6379/0`
config.cache_store = :redis_cache_store
# Redis::Distributedで複数ホストをサポート
config.cache_store = :redis_cache_store, driver: :hiredis
namespace: 'myapp-cache', compress: true,
url: %w[
redis://myapp-cache-1:6379/0
redis://myapp-cache-1:6380/0
redis://myapp-cache-2:6379/0
redis://myapp-cache-2:6380/0
redis://myapp-cache-3:6379/0
redis://myapp-cache-3:6380/0
]
キャッシュの改善
キーベースのキャッシュの不要な生成を抑制して再利用を促進し、1KB以上のキャッシュをデフォルトで圧縮するようになりました。イニシャライザでcompress: false
を指定すると圧縮がオフになります。
週刊Railsウォッチ(20170526)増えすぎたマイグレーションを圧縮するsquasher gem、書籍「Complete Guide to Rails Performance」ほか
HTTP/2 early hintsを導入
- PR: #30744
HTTP/2のearly hintsに対応しました。
# actionpack/lib/action_dispatch/http/request.rb
+ def send_early_hints(links)
+ return unless env["rack.early_hints"]
+
+ env["rack.early_hints"].call(links)
+ end
参考: blog.jxck.io HTTP の新しいステータスコード 103 Early Hints
週刊Railsウォッチ(20171013)Ruby 2.5.0-preview1リリース、RubyGems 2.6.14でセキュリティバグ修正、Bootstrap 4.0がついにBetaほか
Bootsnap gemが標準に
Shopify作のbootsnap gemはRails/Rubyアプリを高速で起動できます。既存のRailsアプリのGemfileへの追加も容易です。
週刊Railsウォッチ(20170728)bootsnapがRailsで正式採用、Ruby Prizeの推薦開始、PostgreSQL配列の重複を除去ほか
Content-Security-PolicyヘッダーをDSLで設定可能に
これはRailsウォッチでは扱っていなかったものでした。
# config/initializers/content_security_policy.rb
Rails.application.config.content_security_policy do
p.default_src :self, :https
p.font_src :self, :https, :data
p.img_src :self, :https, :data
p.object_src :none
p.script_src :self, :https
p.style_src :self, :https, :unsafe_inline
# Specify URI for violation reports
# p.report_uri "/csp-violation-report-endpoint"
end
参考: MDN Content-Security-Policy
config/secrets.yml.encで秘密情報をリポジトリで一元管理可能に
EncryptedConfiguration
クラスも導入されました。
- PR: #28038 Add encrypted secrets
- PR: #30067 Add credentials using a generic EncryptedConfiguration class
週刊Railsウォッチ(20170929)特集: RubyKaigi 2017セッションを振り返る(2)Ruby 2.3.5リリースほか
Webpacker 3.0が利用可能に
- 8月のプレスリリース: Webpacker 3.0: No separate process needed, less config generated
- Webpackerリポジトリ: rails/webpacker
そういえばWebpacker 2.0が6月頃、3.0が8月末にリリースされていました。asset pipelineの出番が減りそうです。
週刊Railsウォッチ(20170602)チームが喜ぶ19のgem、Bundler 1.15が高速化&機能追加、Deviseに挑戦する新認証gem「Rodauth」ほか
番外
関連は不明ですが、早くもRails 5.1.2がらみのバグとおぼしきissueがRubyの方に上がりました。