少し、表題の件で調べてみたのでこちらでも投稿。
ただ、プラグインアーキテクチャは2003年頃に活発な動き(論文やら記事やら)がありましたが、最近はあまり議論されない内容のようです。
今回は参考文献のサンプルを実装して基本的な作り方についての感触をつづっています。
基本的な作り方
- インターフェース(GUI、コマンド)を定義する
- インターフェースの拡張方法を定義する
- 定義したインターフェースを実装したプラグイン、ホストアプリケーションを作成する
基本的な利用方法
- プラグインは何がしかの実行形式ファイルにする
- ホストアプリケーションはそのファイルを特定の場所に格納して利用する
C#の場合
- インターフェースを定義したdllを作成する
- 定義されたインターフェースを実装したプラグインをdllで作成する
- プラグインを読み込んで利用するホストアプリケーションを作成する
Java の場合
- プラグイン用にインターフェースを定義する
- 定義されたインターフェースを実装したプラグインをjarで作成する
- Jarファイルには、プラグインクラス名を記したマニフェストファイルを作成する
- プラグインを読み込んで利用するホストアプリケーションを作成する
pythonなどインターフェースを持たないものではどう実装するのか?
Pythonはインターフェースを持たずに、多重継承を許容する仕様のようです。
実装する場合はかなり気を付けないと他モジュールの影響に苦しみそう…
こちらは引き続きの調査事項…
個人的な所感
- C#やJavaなどで実装する場合はどういうプラグインを作れるようにするかを含めたインターフェースの定義が必須になる
- IDEのようなものを実現したいならVisualStudioやEclipseのプラグイン開発のインターフェースを参考にすると良さそう
- 記載していないが、Pythonなどのインターフェースが存在しない言語では多重継承を利用して実装するみたい
- デスクトップアプリの場合、VisualStudioやEclipseの例を見る限りは、基本的なGUIの構成やデザインは現状変わっていない
- それぞれに対して拡張を定義する機構を持っている
- メニュー/ツールバー/ツールウィンドウ
[同じ内容やコードはこちらを参照してください(主にこっち)]
https://github.com/dandan611/SampleOfPluginSoftware
参考文献
- Visual Studio 拡張機能の開発を始める
- プラグイン開発入門 第1回 開発の基本 Eclipse のプラグイン開発の基本を学ぶ
- .NETによるプラグイン機能を持つテキストエディタの作成
- プラグインで拡張できるJavaプログラムを作る
- EclipseやSpringで使われている基盤技術OSGiとは
- Writing Plugin-Based Applications