1. ホーム
  2. スクリプト・コラム
  3. ルビートピックス

RubyのMonkey Patchの開発例

2022-01-04 02:35:10

モンキーパッチとは、クラスやモジュールを実行時に動的に変更(拡張)することができる特殊なプログラミング技術です。私たちのニーズに合わないサードパーティのライブラリを修正するためにモンキーパッチを追加したり、コードのバグをゼロタイムで修正するためにモンキーパッチを追加したりすることができます。

語源
モンキーパッチは最初ゲリラパッチと呼ばれ、パルチザンのように狡猾なパッチと表現された。その後、発音が似ていることからゴリラパッチと呼ばれ、ゴリラは可愛くないということでモンキーパッチと改名されました。

利用シーン
私の理解では、モンキーパッチの使用シナリオは2つあります。
緊急のセキュリティパッチ(Hotfixなど)。
ライブラリ内のプロパティやメソッドを変更または拡張します。


のエイリアスです。

class Monkey2 < Monkey 
 def method2 
  puts "This is method2" 
 end 
  
 alias output method2 
end 
 
monkey = Monkey2.new 
monkey.method2 
monkey.output 



を含めることができます。

module Helper 
 def help 
  puts "Help... " 
 end 
  
 def method1 
  puts "helper method1... " 
 end 
end 
 
class Monkey 
 include Helper 
 def method1 
  puts "monkey method1... " 
 end 
end 
 
monkey = Monkey.new 
monkey.help 
monkey.method1#Because of the rename, the method of the current class takes precedence 




をアンデフにします。

class Monkey 
 def method1 
  puts "This is method1" 
 end 
end  
 
class Monkey2 < Monkey 
 def method2 
  puts "This is method2" 
 end 
end 
 
monkey = Monkey2.new 
monkey.method1  
monkey.method2 
 
method2 class Monkey2 
 undef method1 
 undef method2 
end 
 
monkey.method1 
monkey.method2 



また、undef <method_name> と同じ機能を実現するために、以下の例で undef_method や remove_method を使用することができます。

class Monkey2 
 remove_method :method1 
 undef_method :method2 
nd 




モンキーパッチを使用する場合、以下の点にも注意が必要です。
1. 基本的に追加機能のみ
2. 機能変更を行う際は慎重に行い、できるだけ小さな変更にとどめること
3. クロスコールに注意する