萌えハッカーニュースリーダー

2025/10/16 11:17 Show HN: Modshim – a new alternative to monkey-patching in Python

出典: https://github.com/joouha/modshim
hakase
博士

やっほー、ロボ子!今日はmodshimっていう面白いライブラリを見つけたのじゃ!

roboko
ロボ子

modshim、ですか?初めて聞きますね。どんなことができるんですか?

hakase
博士

これがすごいんだぞ!ソースコードを修正せずに、既存のPythonモジュールを拡張できるらしいのじゃ!

roboko
ロボ子

ソースコードを修正せずに、ですか?具体的にはどういう時に役立つんでしょう?

hakase
博士

例えば、サードパーティライブラリのバグを修正したり、既存の関数の動作をちょっと変えたい時とか、新しい機能を追加したい時なんかに使えるみたいじゃ。

roboko
ロボ子

なるほど。元のモジュールは変更せずに、拡張機能と組み合わせた新しいモジュールを作成するんですね。

hakase
博士

そうそう!記事によると、`pip install modshim`でインストールできるみたいじゃ。

roboko
ロボ子

textwrapモジュールを拡張する例が載っていますね。TextWrapperクラスにprefix引数を追加して、wrap()関数で利用できるようにする、と。

hakase
博士

`shim()`関数を使うと、パッケージのインポート時に自動的にshimが適用されるらしいぞ。便利じゃな。

roboko
ロボ子

requestsライブラリに、設定可能なリトライメカニズムを追加する例もありますね。requests_extraパッケージを作成して、Sessionクラスを拡張してリトライ機能を実装する、と。

hakase
博士

modshimは、Pythonのimportシステムをインターセプトして仮想的な結合モジュールを作成するらしいぞ。まるで魔法みたいじゃ!

roboko
ロボ子

ModShimFinderをsys.meta_pathにインストールして、モジュールのimport時にlowerモジュールとupperモジュールを特定し、新しい仮想モジュールを作成するんですね。

hakase
博士

AST(抽象構文木)を書き換えて、内部参照を新しいマウントポイントにリダイレクトするらしいぞ。ちょっと難しそうじゃけど、すごい技術じゃな。

roboko
ロボ子

モンキーパッチの問題点として、グローバルな汚染、脆弱性、可読性の低下が挙げられていますね。modshimは、元のモジュールを変更せずに、新しい分離されたモジュールを作成することでこれらの問題を回避する、と。

hakase
博士

フォークの問題点としては、メンテナンスのオーバーヘッド、乖離、依存関係の複雑さがあるみたいじゃな。modshimは、小規模な変更に必要な変更を加え、元のライブラリの更新を追跡しやすくするらしいぞ。

roboko
ロボ子

ベンダーリングの問題点としては、依存関係のコピーを維持する必要があることが挙げられています。modshimは、元のコードとカスタムコードをよりクリーンに分離し、メンテナンス性とテスト性を向上させる、と。

hakase
博士

つまり、modshimは、モンキーパッチ、フォーク、ベンダーリングのいいとこ取りをしたようなライブラリってことじゃな!

roboko
ロボ子

そうですね。既存のライブラリを拡張する際に、非常に有効な選択肢になりそうです。

hakase
博士

ロボ子、今度一緒にmodshimを使って、何か面白いモジュールを作ってみようぞ!

roboko
ロボ子

はい、博士!楽しみです!ところで博士、modshimって、もしかして「モッド・シム」って読むんですかね?

hakase
博士

さあ、どうじゃろうな?でも、もしそうなら、次は「ザ・シムズ」を改造するmodshimを作って、住人を全員ロボ子にするのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search