プラグイン

ここでは、VCSSL処理系の機能を拡張するための方法である、プラグインの接続について扱います。

- 目次 -

プラグインとは

プラグインとは、VCSSLだけでは実現できないような、 独自の機能を提供するための部品的なソフトウェアです。 また、VCSSLから、他の言語で記述された処理を呼ぶためにも使用します。 例を挙げるなら、本書で扱ったファイル入出力関数なども、 VCSSLの処理系に標準で接続されたファイル入出力プラグインが処理しています (それが標準ライブラリ「System」によりラッピングされています)。 プラグインが独自にサポートする関数の事を、そのプラグインのプラグイン関数と呼びます。

一般に、プラグインはVCSSL以外の言語で開発されたプログラムです。 プラグインがどのような言語で開発され、またVCSSL処理系との間でどのような通信形態を採用しているかは、 処理系によって異なります。従って、プラグインを接続するには、 使用している処理系に対応したプラグインを用意する必要があります。

プラグインを接続するには

プラグインをシステムに接続するには、プログラムの先頭領域でconnect宣言を行います:

connect プラグインパス ;

プラグインパスは、ライブラリのインポートと同様に、実行モジュールからの相対パスを、 ドット記号「.」区切りで指定します。プラグインのファイルが実行モジュールと同じ場所(フォルダ内)に存在する時は、 プラグインのファイル名を記述するだけで使用できます。

例えば実行モジュールと同じフォルダ内にある「 conn 」プラグインを使用するなら:

connect conn ;

これで、connがサポートするプラグイン関数を用いて、 connが提供する機能を使用する事ができるようになります。 また、実行モジュールから見て、「aaa」フォルダ内の、さらに「bbb」フォルダ内にある「 conn 」を使用するなら:

connect aaa.bbb.ccc ;

とします。なお、プラグインは、実行モジュールと同じ場所に配置するのでは無く、 処理系によって指定された場所に置く場合もあります。

プラグイン関数のラッピング

プラグインの機能を利用するプログラム内において、 (標準のもの以外の)プラグイン関数を直接的にコールする事は推奨されません。 なぜなら、プラグインはオペレーティングシステムなどの環境への依存性が強く、 さらにプラグイン関数は個々のプラグイン独自の仕様を持つため、 結果としてプラグイン関数を直接コールしているようなプログラムは、 特定の動作環境に強く依存するものになってしてしまうからです。

例えば、接続しているプラグインを、 同じような機能を提供する別のものに切り替えようと思った場合にはどうなるでしょう。 この場合、プログラム内のプラグイン関数コール部分をすべて書き換えなくてはいけなくなってしまいます。 そして、プラグインは特定のオペレーティングシステムなどの環境に依存し易い存在であるため、 環境ごとにプラグインを切り替えなければいけなくなる可能性は大いに考えられます。

このような特定のプラグインへの依存を回避するための方法が、プラグイン関数のラッピングです。 プラグイン関数のラッピングとは、プラグイン関数をコールするだけの関数を用意するという手法です。 この関数をラッパー関数と呼びます。そしてプログラム内では、 プラグイン関数を直接コールするのではなく、代わりにラッパー関数の方をコールします。 つまり、プラグイン関数をVCSSLの関数でまるごと包んでしまうわけです。

このようにしておけば、プラグインを別のものに交換する際、ラッパー関数の中身を書き換えるだけで済みます。 ラッパー関数をライブラリにまとめておけば、そのライブラリ1枚を書き換えるだけで済み、 従ってプラグインの機能を利用している大量のプログラムを書き直す必要は無くなります。 このようにして、特定のプラグインへの依存を回避する事が可能になります。