IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Ruby on Rails 海外事情コラム

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  OpenStack  システムトラブルシュート 

第30回 Rails 5.2.0 RC1のリリース:Active Storage、Redisキャッシュストア、HTTP/2 Early Hint、CSP、Credentialsなど (野田貴子) 2018年7月

こんにちはー。野田貴子です。
今月も海外のRailsコラムを意訳してご紹介します。ご参考になれば幸いです。

###
今回は、David Heinemeier Hansson氏によるリリース速報をお伝えします。前のベータリリースから2ヶ月ですが、次のリリース(RC版または最終版)も1ヶ月以内に来るようです。

---
http://weblog.rubyonrails.org/2018/1/30/Rails-5-2-RC1-Active-Storage-Redis-Cache-Store-HTTP2-Early-Hints-Credentials/

Rails 5.2の最初のベータリリース(*1)から2ヶ月が経過しましたが、この間に我々は、あらゆる方法でこのベータ版を改良・研磨・調整してきました。

今回のリリースの柱となる新機能、Active Storage(*2)フレームワークは、コンテンツの種類をより厳密に識別できるようになった(*3)だけでなく、その他にもさまざまな改良が加えられました。また、Basecampなどで製品に組み込み、数ヶ月の試運用を行いました。このフレームワークは非常に堅実で、そのまま使うことができます。

ベータ版を公開している間、他にもいくつか改良点を盛り込みました。例えば、フィクスチャの超高速読み込み(*4)、Active Job discard時のカスタムエラー処理(*5)、Active Recordクエリのアクセス元サイトログ出力機能(*6)などです。Railsの勢いは全く衰えません。

次のリリースも完成間際です。Basecampや他の多くのショップでは、Rails 5.2ベータ版をすでに数ヶ月間稼働させています。次のRC版、あるいはファイナル版の目標は、今後登場するかもしれない問題の大きさにもよりますが、2月末前です。今回はRC版でしたので、今ある rails/master を rails/5-2-stable に移動して、今後 rails/master はRails 6.0の開発で使用します。

Ruby on Railsに愛とサポートを与え続けてくださっているみなさんに、再度感謝を申し上げます!

Rails 5.2ベータ発表からのハイライト要約

ずいぶんと長い間、Railsではファイルアップロードが扱いにくいままでした。すばらしいプラグインが数多く配布されていることは認識していましたが、Railsフレームワーク自体への組み込みが遅すぎました。本当にお待たせしました!

Rails 5.2の新しいActive Storage(*7)フレームワークによって、近代的な方法でファイルをクラウドに直接アップロードすることができるようになりました。デフォルトでサポートされているのは、AmazonのS3、GoogleのCloud Storage、Microsoftの Azure Cloud File Storageです。

画像を扱っている場合は、その場でバリアントを作成することができます。ビデオやPDFの場合は、その場でプレビューを作成することができます。また、コンテンツの種類に関係なく、非同期的にアップロードを分析してメタデータを抽出することができるようになっています。

Active Storageは私とGeorge Claghorn氏がBasecamp 3の機能から持ってきました。つまり、この機能はすでに製品で使用されていたというだけでなく、そもそも製品から生まれました。この事実はとても大きな保証です!

Basecampから持ってきた他の機能にはRedisがあります。Basecampで使用していた長く複雑なコードをJeremy Daerがきれいにし、パーシャルやフラグメントといったRailsのキャッシングジョブにRedisを導入しました。この煌びやかな新しいRedis Cache Store(*8)では、何年も蓄積されたベテランのコードが誰でも使用できるような結合ユニットとして組み込まれました。

新しいRedis Cache StoreはRedis::Distributedをサポートしており、Redisを介したMemcachedのようなシャーディングに使えます。耐障害性があるため、例外でリクエストを強制終了するのではなく、個々のエラーに対処できます。また、完全なパーシャルコレクションキャッシングを良く保つためにも分散型MGETをサポートしています。

これにより、キーのリサイクル(*9)と圧縮(*10)の両方がデフォルトで利用できるようになり、キャッシュ効率が大幅に向上されます。 Basecampの場合、キャッシュの寿命が2桁向上することになりました!以前は1日でキャッシュを捨てていましたが、今は数ヶ月も持てるようになりました。パーシャルキャッシングやロシアンドールキャッシングを使用している場合は、この変更によってキャッシュの有効期間が大幅に改善されることになります。

また、Aaron PattersonとEileen Uchitelleによって、HTTP/2とEarly Hintsを取り入れました。これは、リクエストされたスタイルシートやJavaScriptアセットを先に送信するようWebサーバーに自動的に指示することができます。つまり、より速くWebページが表示されるようになります。これを望まない人なんていませんよね。

パフォーマンスに関する話を続けると、RailsはデフォルトのGemfileにBootsnap(*11)を組み込みました。これはShopify社のある友人が作成したもので、アプリケーションの起動時間を通常50%以上短縮します。

Railsは最前線でセキュアなWebアプリケーションに取り組んでおり、ビルトインのCSRFとXSSの保護機能を提供し、また、Rails 5.2では、アプリケーションのContent Security Policy(*12)を定義できる新しいDSL(*13)を追加しました。グローバルなデフォルトポリシーを設定しておき、それをリソース単位でオーバーライドしたり、lambdaを使用してマルチテナントアプリケーションのアカウントサブドメインなどのヘッダーにリクエスト単位の値を注入することさえできます。

ハイライトはこれですべてではありません。Rails 5.1でEncrypted Secretsが追加されましたが、これらのsecretはいわゆる古くからの秘訣のようですが、これは、「暗号化」ですので、完全なsecretではありません。

Rails 5.2では、2種類のsecretを廃止予定にしてこの混乱を収め、Credentials(*15)という新しい共有概念を導入しました。AWSへのアクセスキーや他の形式のログイン、パスワードといった認証情報(Credentials)はsecretの主要な使い道でしたので、それをそのまま証明書(Credentials)と名付けました。

証明書は常に暗号化されます。つまり、鍵を保持している限りリビジョン管理を安全にチェックすることができます。つまり、アトミックデプロイということで、環境変数の混乱を避ける必要はなく、アプリケーションが必要なすべての証明書を一箇所で持つことができ、安全でセキュアであるという利点があります。

さらに、Railsでは証明書の基礎となるAPIを公開しているため、他の暗号化された設定や、キー、ファイルを簡単に処理できます。

Rails 5.1以降、Webpacker(*16)に関する大きな進歩もありました。そしてRails 5.2は新しいWebpacker 3.0と美しく調和することを意図しています。 RailsはWebpackによって実行される事前設定のビルドパイプラインを使用し、最新のJavaScriptを完全に使うことができます。私たちはこの関係を強化し続けています。

*1 http://weblog.rubyonrails.org/2017/11/27/Rails-5-2-Active-Storage-Redis-Cache-Store-HTTP2-Early-Hints-Credentials/
*2 https://github.com/rails/rails/blob/d3893ec38ec61282c2598b01a298124356d6b35a/activestorage/README.md
*3 https://github.com/rails/rails/commit/c2ba530c43244b5b60fd629f61cd8b44c43ecda9
*4 https://github.com/rails/rails/pull/31422
*5 https://github.com/rails/rails/pull/30622
*6 https://github.com/rails/rails/pull/26815
*7 https://github.com/rails/rails/blob/d3893ec38ec61282c2598b01a298124356d6b35a/activestorage/README.md
*8 https://github.com/rails/rails/pull/31134
*9 https://github.com/rails/rails/pull/29092
*10 https://github.com/rails/rails/pull/31147
*11 https://github.com/Shopify/bootsnap
*12 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
*13 https://github.com/rails/rails/pull/31162
*14 https://github.com/rails/rails/pull/28038
*15 https://github.com/rails/rails/pull/30067
*16 https://github.com/rails/webpacker

 


 

Ruby開発に強いTRANSNET
Ruby開発に強いトランスネットが運営する「Ruby開発・事例サイト」
  • 20以上のRuby開発の事例・提案書を公開中
  • 毎月公開されるテクニカルコラムも好評連載中
  • Rubyエンジニアも常時募集中です!

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  OpenStack  システムトラブルシュート