【Ruby3.x】Regexp::timeout()メソッドの使い方
timeoutメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
timeoutメソッドは、Rubyの正規表現(Regexp)のマッチング処理に時間制限を設定するメソッドです。このメソッドは、正規表現が入力文字列と一致するかどうかを判定する際に、処理が完了するまでの最大許容時間を秒単位で指定します。
主な目的は、正規表現の処理が無限ループに陥ったり、非常に長い時間を消費したりする状況を防ぐことです。特に、非効率な正規表現パターンや、意図的に悪意のある入力が与えられた場合に発生しうる、いわゆるReDoS(正規表現サービス拒否)攻撃からシステムを保護する役割があります。これにより、アプリケーションが応答不能になる事態を回避し、システムの安定性と可用性を維持します。
timeoutメソッドに設定された時間を超過してマッチング処理が完了しなかった場合、RubyはRegexp::TimeoutErrorという特定の例外を発生させ、処理を中断します。開発者はこの例外を捕捉することで、タイムアウト時の適切なエラーハンドリングや代替処理を実装できます。この機能はRuby 3.2以降で利用可能であり、安全な正規表現処理を実装する上で非常に重要な手段となります。
構文(syntax)
1/pattern/.timeout(seconds)
引数(parameters)
sec
- sec: timeout: 数値: 正規表現のマッチング操作のタイムアウト時間を秒単位で指定します。この時間内にマッチングが完了しない場合、例外が発生します。
戻り値(return)
Numeric | nil
Regexp#timeout メソッドは、正規表現のマッチング操作に設定されたタイムアウト時間を Numeric 型(数値)で返します。タイムアウトが設定されていない場合は nil を返します。