Gemプラグインの仕組み
RubyGemsにはプラグインの仕組みがあって、以下のようにプラグインを検出してロードするとのこと。
Gem の rdoc より。
RubyGems Plugins
As of RubyGems 1.3.2, RubyGems will load plugins installed in gems or $LOAD_PATH. Plugins must be named ‘rubygems_plugin’ are discovered via Gem::find_files then loaded. Take care when implementing a plugin as your plugin file may be loaded multiple times if multiple versions of your gem are installed.
For an example plugin, see the graph gem which adds a `gem graph` command.
- gems または $LOAD_PATH から 'rubygems_plugin' ファイルを Gem::find_files で探して、全て load します。
- 古いバージョンのものに含まれる 'rubygems_plugin' も load されるので注意。
この仕組みだと、
- ○プラグインの追加/削除をGem経由で行える。
- 利用者は、必要なプラグインをGem経由でインストールすれば、自動で認識され利用可能になる。
- ○プログラムにプラグインを添付するのが容易。
- Gemで依存関係を設定すれば、プログラムと一緒にプラグインもインストールできる。
というメリットがあるなー。ただ、気になるのは、以下の点。
- ×古いバージョンのGemに含まれる'rubygems_plugin'がロードされる
ロードしたプラグインのクラスやメソッドが、古いバージョンのもので上書き更新されたりしそう。んー、プラグイン内ではクラス定義しないとかそういうルールになっているんだろうか?