モンキーパッチ
From Wikipedia, the free encyclopedia
モンキーパッチ(Monkey patch)は、システムソフトウェアを補完するために、プログラムをその時その場の実行範囲内で拡張または修正するというテクニックである。モンキーパッチの影響はその時その場のプロセス(プログラムの実行インスタンス)だけに限定されて、プログラム本体には及ばない。
モンキーパッチは動的プログラミング分野の用語であり、その定義はRubyやPythonなどの各言語コミュニティに依存している[1][2]。サードパーティ製のランタイムシステム、ソフトウェアフレームワーク、仮想マシン上で発生しがちな、好ましくない動作の違いや各種バグに対してパッチ当てすることを目的にしての、プロセス上に展開されたクラスコードやモジュールコードの動的な修正作業、という点は共通している。
当初はモンキーパッチは、ルールを無視して実行時にこっそりとコードを変更することから、ゲリラパッチと呼ばれていた。これらのパッチを複数当てると、時折直感に反するような相互作用が生まれることがあり、Zope 2では、交戦中のパッチと呼ばれていた。
ゲリラはゴリラとほぼ同音異字であり、ゲリラパッチをゴリラパッチと言う人が出てきた。そしてゴリラがより弱いモンキーとなり、戦いを思い起こさせるゲリラパッチではなく、弱そうに聞こえるモンキーパッチという言葉として使われ始めた。[3]
それ以来モンキーパッチとして使用され続けているが、意味は使用するコミュニティ毎に微妙に異なっている。
Pythonでは、バグや思い通りに動かない機能の修正のために、外部のクラスにある既存のメソッドに対し、パッチを当てることで実行時のクラスを動的に変更する場合にのみ使用する。[要出典] 他の形式の、実行時のクラスの変更には、他の名前が付いている。例えば、ZopeとPloneでは、セキュリティパッチは動的なクラスの変更によって提供されるが、これらはホットフィックスと呼ばれる。
Rubyでは、「あらゆるクラスに対する動的な変更」を意味し、「実行時の動的なクラスの変更」と同義語である。[要出典]
Ruby界では、モンキーパッチングの代わりにダックパンチングという用語を使い始めた人もいる[4]。この用語は、Adam Keysとpatrick EwingがRailsConf 2007で説明した用語で、RubyとPythonではダックタイピングが広く使われていることから来たものである: [5]
さて、私はAdamに買われてしまいましたが、その考えというのは、それがアヒルのように歩き、アヒルのように話すのであれば、それはアヒルということですよね?もしもこのアヒルが、あなたの望むような鳴き声をあげていないのであれば、期待しているものを返してくるまで、そのアヒルをパンチし続けなければなりません。 — Patrick Ewing
応用例
モンキーパッチは以下の用途で使用される。