モンキーパッチ

モンキーパッチ（Monkey patch）は、システムソフトウェアを補完するために、プログラムをその時その場の実行範囲内で拡張または修正するというテクニックである。モンキーパッチの影響はその時その場のプロセス（プログラムの実行インスタンス）だけに限定されて、プログラム本体には及ばない。
モンキーパッチは動的プログラミング分野の用語であり、その定義はRubyやPythonなどの各言語コミュニティに依存している。サードパーティ製のランタイムシステム、ソフトウェアフレームワーク、仮想マシン上で発生しがちな、好ましくない動作の違いや各種バグに対してパッチ当てすることを目的にしての、プロセス上に展開されたクラスコードやモジュールコードの動的な修正作業、という点は共通している。
語源.
当初は"モンキーパッチ"は、ルールを無視して実行時にこっそりとコードを変更することから、"ゲリラパッチ"と呼ばれていた。これらのパッチを複数当てると、時折直感に反するような相互作用が生まれることがあり、Zope 2では、交戦中のパッチと呼ばれていた。
"ゲリラ"は"ゴリラ"とほぼ同音異字であり、"ゲリラパッチ"を"ゴリラパッチ"と言う人が出てきた。そしてゴリラがより弱いモンキーとなり、戦いを思い起こさせる"ゲリラパッチ"ではなく、弱そうに聞こえる"モンキーパッチ"という言葉として使われ始めた。
それ以来"モンキーパッチ"として使用され続けているが、意味は使用するコミュニティ毎に微妙に異なっている。
Pythonでは、バグや思い通りに動かない機能の修正のために、外部のクラスにある既存のメソッドに対し、パッチを当てることで実行時のクラスを動的に変更する場合に"のみ"使用する。 他の形式の、実行時のクラスの変更には、他の名前が付いている。例えば、ZopeとPloneでは、セキュリティパッチは動的なクラスの変更によって提供されるが、これらは"ホットフィックス"と呼ばれる。
Rubyでは、「あらゆるクラスに対する動的な変更」を意味し、「実行時の動的なクラスの変更」と同義語である。
Ruby界では、"モンキーパッチング"の代わりに"ダックパンチング"という用語を使い始めた人もいる。この用語は、Adam Keysとpatrick EwingがRailsConf 2007で説明した用語で、RubyとPythonではダックタイピングが広く使われていることから来たものである: 
応用例.
モンキーパッチは以下の用途で使用される。
落とし穴.
丁寧に作られていなかったり、ドキュメントが貧弱だったりするモンキーパッチからは、以下のような問題が引き起こされることがある:
例え使用されていなかったとしても、プログラミング言語内でモンキーパッチを適用できるということは、強いカプセル化を強制することと両立しないため、モンキーパッチの機能の有用性は問題である、と見る人も中にはいる。このオブジェクト間のカプセル化は、Object-capability_modelで必要とされる。