1. tanaken on Rails
  2. #041: i18n watcher, allow_br..
2024-10-14 06:47

#041: i18n watcher, allow_browser

サマリー

このエピソードでは、Railsにおけるi18nウォッチャーの変更とアクションパックの新機能が紹介されています。特に、アプリケーション起動時の再読み込み停止とブラウザサポートメソッド名の許可について詳しく解説されています。

i18nウォッチャーの変更
第41回のtanaken on Railsを始めます。
今回はプレリクエストを2つ紹介します。
1つ目、don't execute i18n watcher on boot、
アクティブサポートに関する変更です。
Railsアプリケーションを起動する際に、i18nの再読み込みを行わないようになりました。
i18nには、翻訳ファイルの変更時に翻訳を自動再読み込みするという機能があります。
この機能に関する変更は、過去のエピソードでも紹介しました。
その過去のエピソードでは、この自動再読み込みの機能が有効になっているときに、
ジムファイル内の翻訳ファイルを監視の対象外とするという変更を紹介しました。
ジムファイル内の翻訳ファイルを監視しても、
ジムファイル内の翻訳が変更されることはないので、
アプリケーション内で変更されることはないので、監視する必要はないので監視の対象外にすると、
その結果として高速化を狙っているというプルリクエストの紹介でした。
今回のプルリクエストも高速化を行いたいという目的でのプルリクエストですが、
この著者のアプリケーションでは、翻訳ファイルが大量にあり、
つまりジムファイル以外の翻訳ファイルがたくさんあって、
ジムファイルを対象外にしてもまだまだ遅いというお話でした。
なので今回のプルリクエストでは、
アプリケーションを起動する際は再読み込みをなくすという対応をすることで、
高速化を目指していますということでしたが、一つ目です。
ブラウザサポートメソッドの新機能
続いて二つ目、Allow Browser Support Method Names for Block、
アクションパックに関する変更です。
Allow Browser Method のブロックオプションにメソッド名を渡せるようになりました。
Allow Browser とは、アクションへのアクセスを許可するブラウザーバージョンを指定するためのメソッドです。
コントローラーに書かれるイメージですね。
API ドキュメントから実装例を抜き出して、小ノートに書いてあります。
コントローラーの中で、Allow Browser Method を見出して、
引数にバージョンズというオプションを渡せて、
値としては、例えばシンボルのモダン、
あるいはハッシュでサファリ16.4、
ファイアフォークス121、
IEフォルスという形で渡せると。
例えばモダンというのを渡すと、
モダンなブラウザー、
そのモダンの定義はレールズアプリケーションのバージョンにもよると思いますが、
そのモダンという条件にマッチしたものだけアクセスを許可する。
あるいは先ほどのサファリ16.4みたいな例だと、
サファリのバージョン16.4とか、
ファイアフォークスの121だとか、
IEは許可しないとかっていうのを指定できるということになります。
というような形ですね。
加えて引数のオプションには、
オンリーだったりエクセプトだったり渡せていて、
オンリーに渡したアクション名、
コントローラーのアクション名を渡すと、
そのアクションだけ許可する。
オンリーショーとかってやると、
ショーアクションだけ指定のブラウザの条件に満たしたものを許可するというような記載ができる。
そんなメソッドです。
このメソッドにはブロックというオプションもあって、
このブロックにはコーラブルなオブジェクトを渡せます。
例えば、
アローブラウザ、バージョンズ、モダン、ブロック、矢印、中括弧のレンダー、
ファイルレールズ.ルート.ジョイン、パブリックスラ、カスタムエラー.html、
ステータスノットアクセプタブル。
このブロックに渡した内容をレンダリングする。
つまり、バージョンがモダンのときだけアクセスを許可し、
もしモダンじゃないブラウザからのアクセスが来た場合は、
ブロックに渡したコーラブルなオブジェクトの中身の処理を実行するというような機能があるよということですね。
ブロックに渡せるオブジェクトはコーラブルなオブジェクトだけで、
コーラブルというのはブロック、まさにブロック、その名の通りブロックだったり、
あとはブロッククラスのオブジェクトを渡せるよということですね。
ブロックだったりブロックだったりの話は別途、
show.node にまとめた記事のリンクを貼っておいたので、そちらも見てください。
これまでブロックオプションで受け取れるのはコーラブルなオブジェクトだけだったという紹介をしたんですけれども、
今回のプレリクエストによってメソッド名も受け取れるようになりました。
今挙げた例をメソッド名で書き換えると、
例えば handleOutdatedBrowser というメソッドを別途定義しておいて、
ブロックにはそのメソッド名を足すと。
なので、AllowBrowserVersionsModernBlockHandleOutdatedBrowser のような形で書けると。
ハンドルアウトデイティットブラウザーメソッドでは、
先ほどのレンダーの呼び出し、
レンダーファイルコロン、カスタムエラー.html で、
ステータスがNotAcceptable というような形で、
メソッドを切り出して定義することができました。
これは何が嬉しいかというと、
もともとブロックオプションにはコーラブルなオブジェクトしか渡せなかったので、
それをやると、ちょっとアローブラウザーに渡す引数が膨れるというか、
見にくくなりますよね。
というような問題があったのですが、
それをメソッドに切り出せるようになったことで、
見やすくなってすっきりしてよかったということになります。
そんなところで、今週は2つのプレリクエストを紹介しました。
ではまた来週。バイバイ。
06:47

コメント

スクロール