Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

週刊Railsウォッチ: SeleniumでRubyの全クラスとモジュールにRBSが追加ほか(20240410後編)

こんにちは、hachi8833です。以下の脆弱性対応はもうお済みですか?

週刊Railsウォッチについて

  • 各記事冒頭には🔗でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
  • お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙏

TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)

🔗Ruby

🔗 2要素認証のブルートフォーステストをRubyで書く(Ruby Weeklyより)


つっつきボイス:「ちょっとしたセキュリティ検証用のコードをRubyで書いたという感じのgistですね: repeated_permutationですべての順列(permutation)を列挙して大量のパターンで無慈悲に攻撃を仕掛けている」「Rubyにrepeated_permutationというメソッドがあるんですね」

# 同記事より
(0..9).to_a.repeated_permutation(4).each do |numbers|
# (略)

参考: Array#repeated_permutation (Ruby 3.3 リファレンスマニュアル)
参考: 順列 - Wikipedia


結果は貼りませんが、たとえば暗証番号4桁を1111から9999まで網羅するには以下のように書けますね。

(1..9).to_a.repeated_permutation(4).to_a

🔗 SeleniumですべてのRubyクラスやモジュールにRBSが追加された


つっつきボイス:「Seleniumで使われているRubyコードの全クラスとモジュールにRBSファイルが追加されたという話をruby-jp Slackで見かけました」「お〜これは偉業🎉」「182ファイルも追加されているのでさすがにコミットログが長いですね」「Seleniumのような大規模なライブラリほどRBSの型情報があると嬉しいですね👍」

# https://github.com/SeleniumHQ/selenium/blob/trunk/rb/sig/lib/selenium/webdriver.rbsより
module Selenium
  module WebDriver
    class Point
      attr_reader x: Integer
      attr_reader y: Integer

      def initialize: (Integer x, Integer y) -> void
    end

    class Dimension
      attr_reader width: Integer
      attr_reader height: Integer

      def initialize: (Integer width, Integer height) -> void
    end

    class Rectangle
      attr_reader x: Integer
      attr_reader y: Integer
      attr_reader width: Integer
      attr_reader height: Integer

      def initialize: (Integer x, Integer y, Integer width, Integer height) -> void
    end

    @root: String

    def self.root: () -> String

    def self.for: (*untyped args) -> untyped

    def self.logger: (**String | Symbol opts) -> WebDriver::Logger
  end
end

参考: Selenium: https://www.selenium.dev/ja/

🔗 その他Ruby


つっつきボイス:「下の書き方初めて見ました」「一瞬なにこれ?って思ったけど、続きを見るとPathNameにある/メソッドを使っているのか!」「Railsの機能かと思ったらRubyの機能なんですね」

# 同ツイートより

Rails.root.join("app", "join")


Rails.root / "app" / "jobs"

参考: Pathname#+ (Ruby 3.3 リファレンスマニュアル) -- Pathname#/はエイリアス

「Ruby 2.2から使えるらしいから割と前からあるのね↓」

/で書くのはたしかに直感的で面白いけど、既存の他のコードでjoinを使っているところにこれを混ぜて書くと気持ち悪がられそうなのと、左側がPathnameでない場合にはエラーになる点は注意が必要でしょうね」「もしかするとRuboCopに怒られるかもしれませんね👮🏽」「気の利いた書き方をしてもRuboCopに取り締まられるのはありがち」

参考: Rails のルーティング - Railsガイド

Railsのルーティングを極める(前編)

🔗 設計

🔗 書籍『Enterprise Integration Patterns』(Ruby on Rails Discussionsより)


つっつきボイス:「以下のRuby on Rails Discussionsのエントリ↓で、Martin Fowlerの動画と合わせてこの"Enterprise Integration Patterns"という書籍に言及していたのを見つけました」

参考: Combining API/DB results into one - is this a good case for sidekiq or rabbitmq? - rubyonrails-talk - Ruby on Rails Discussions

「お、図のスタイルは懐かしいというかだいぶ昔っぽいけど、メッセージングの普遍的なパターンが色々網羅されていてよさそう👍」「古典的名著という感じですね」「こういうパターンは昔からあって時が経っても変わりにくいですね: メッセージングとは別の話ですが、Railsの機能名にもなったMartin FowlerのActive Recordパターンなどもご存知の通り長年使われていますし、時を経て再評価されたりしていますね」

↓リンク先ではこの図の項目が全部リンクになっています。


Messaging Patterns Overview - Enterprise Integration Patternsより

「Enterprise Integrationの日本語を探してみると、マイクロソフトなどで"エンタープライズ統合"という用語にしているようですね↓」

参考: Azure での基本的なエンタープライズ統合 - Azure Architecture Center | Microsoft Learn

「英語版のみですが、書籍も随分前からあるんですね↓」「ハードカバー版が高いのでKindle版ポチろうと思ったら、何と数年前に既に買っていたことが判明」「私も時々やっちまいます」

🔗 書籍『データ匿名化手法』


つっつきボイス:「上のツイートでこの『データ匿名化手法』を知りました」「お、このテーマの本は現代なら1冊持っていてよいと思います👍: 少なくともデータ匿名化の概念やどんな手法があるかぐらいはひととおり知っていないとまずい」

参考: O'Reilly Japan - データ匿名化手法

🔗CSS/HTML/フロントエンド/テスト/デザイン

🔗 hotwire_combobox: gem形式のコンボボックス拡張(Ruby Weeklyより)


つっつきボイス:「Hotwireアプリのコンボボックスを拡張するhotwire_comboboxというgemだそうです」

josefarias/hotwire_combobox - GitHub


同サイトより

「やりたいことはわかるけど、gemの形になっているのが気になるかな: 10年前くらいにjQueryとかBootstrapあたりをgemの形でインストールしてgemで管理するのが流行った時期はあるんですが、今の時代にこういう小さめの機能で使うアセットを追加したりするためにgemを追加して依存関係を増やすことはためらう気持ちがありますね」「言われてみれば、importmap-railsとかjsbundling-railsとかでHotwireらしくインストールする方が現代的な感じはしますね、でもアセットは追加しにくいのか...」

Rails 7: importmap-rails gem README(翻訳)

jsbundling-rails README(翻訳)


後編は以上です。

バックナンバー(2024年度第2四半期)

週刊Railsウォッチ: solid_queueとmission_control-jobsが正式にRailsのgemに、Rubyの"チルド"文字列ほか(20240402)

ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。

Ruby Weekly

Ruby on Rails Discussions


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。