(Translated by https://www.hiragana.jp/)
プラグイン - Wikipedia コンテンツにスキップ

プラグイン

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』

プラグイン (plug-in)

概説がいせつ

[編集へんしゅう]

通常つうじょうコンピュータうえ動作どうさするプログラムは、中心ちゅうしんとなるプログラムコードがサブルーチンして処理しょりすすめるかたち構成こうせいされる。処理しょり基本きほんながれはおなじでも、処理しょり内容ないよう詳細しょうさいことなるアプリケーションコードをつく場合ばあいには、いくつかのサブルーチンをえることにより実現じつげんする。たとえば、「ビットマップ画像がぞうファイルをんで画面がめん表示ひょうじをする」というアプリケーションの場合ばあいファイルみのサブルーチンをえることにより、「PNGんで画面がめん表示ひょうじをする」プログラムや「JPEGんで画面がめん表示ひょうじをする」プログラムなどのバリエーションをつくることができる。ぎゃく操作そうさすなわちファイル保存ほぞんかんしても同様どうようである。

おおくのソフトウェアでは、この可能かのう部分ぶぶんのサブルーチンの手順てじゅんインターフェイス)は公開こうかいされておらず、アプリケーション・コードを開発かいはつしたものだけが作業さぎょうができるようになっている。しかし、上記じょうき画像がぞうファイルのフォーマットれいのように、必要ひつようとされるすべてのサブルーチンを大元おおもと開発かいはつしゃ用意よういできるとはかぎらない場合ばあいがしばしば発生はっせいする。このような場合ばあい、サブルーチンの手順てじゅん規格きかくして公開こうかい公表こうひょうし、さらにサブルーチンの方法ほうほう提供ていきょうすれば、大元おおもと開発かいはつしゃ以外いがい第三者だいさんしゃもアプリケーションの機能きのう変更へんこう拡張かくちょうできるようになる。

このようにアプリケーションコードの一部分いちぶぶんだれでも可能かのうになっている状態じょうたいプラグ可能かのうpluggable)とび、外部がいぶから注入ちゅうにゅうされるプログラムコードおよびそのモジュールをプラグインぶ。

プラグインの機構きこう実現じつげんするためには、つぎてん外部がいぶ公開こうかい仕様しようとして明確めいかく規格きかくしなければいけない。

  • サブルーチンにあたえる(入力にゅうりょく)パラメータのフォーマットと意味いみ定義ていぎ
  • サブルーチンからる(出力しゅつりょく)データのフォーマットと意味いみ定義ていぎ
  • サブルーチンを手順てじゅん(サブルーチンの名前なまえ規約きやくなどもふくむ)
  • サブルーチンがされるタイミング(実行じっこうされるスレッドなどもふくむ)
  • モジュールを配置はいちする場所ばしょ(ディレクトリ)

また、プラグインとなるサブルーチンのコードを開発かいはつしやすいように、プラグイン開発かいはつようライブラリフレームワーク)が大元おおもとのホストアプリケーション開発かいはつしゃから提供ていきょうされることがおおい。

コンパイラもちいてつくられたアプリケーションコードでは、原則げんそくとしてサブルーチンの実行じっこうメモリアドレス相対そうたいアドレス)はコンパイル決定けっていされてしまうため、サブルーチンのえをするたび再度さいどコンパイルが必要ひつようとなる。プラグインの場合ばあいダイナミックリンクライブラリばれる機構きこう使つかって、アドレスをOSローダー決定けっていさせることによりこの問題もんだい回避かいひする。また、ヒープじょう動的どうてきメモリ確保かくほされるオブジェクトは、ランタイムライブラリにバイナリ互換ごかんせいがないかぎり、モジュール境界きょうかいえて確保かくほ解放かいほうすることができないが[1][2]たいとなる動的どうてきなメモリ確保かくほ解放かいほう処理しょりをプラグインのモジュールないめてしまうことで、プラグインの開発かいはつしゃとアプリケーションの開発かいはつしゃことなるコンパイラやことなるコンパイルオプション、ことなるプログラミング言語げんご使用しようすることも可能かのうである。

ダイナミックリンクライブラリは、WindowsではDLL形式けいしきが、macOSLinuxなどのUNIX / UnixけいOSではso形式けいしきもちいられることがおおい。これは、OSの開発かいはつしゃ規格きかくしたサブルーチン手順てじゅんであり、OSがそのしを実現じつげんする標準ひょうじゅんAPIなどを提供ていきょうしているので、プラグインを開発かいはつするものもプラグイン機構きこう開発かいはつするもの簡単かんたんにかつ安定あんていして利用りようできるからである。プラグインを実装じっそうするがわでは特定とくてい名前なまえ規約きやくつサブルーチンを実装じっそうしてシンボルをエクスポートしておき、プラグインを利用りようするホストアプリケーションがわでは実行じっこうにモジュールをロードして名前なまえ文字もじれつをもとにサブルーチンのアドレスを探索たんさくし、つかった場合ばあいはそのサブルーチンのアドレスを利用りようしてす、というダイナミックバインディング技術ぎじゅつもちいられる。

Windowsではプラグインの実現じつげんCOM/ActiveXテクノロジーがもちいられていることもある。注入ちゅうにゅうされるコードは単純たんじゅんなサブルーチンではなく、オブジェクト指向しこうインターフェイス実装じっそうしたクラスとして実現じつげんされる。.NET Frameworkではプラグイン機構きこう実現じつげん容易よういにするためのフレームワークとして、バージョン4.0でManaged Extensibility Framework英語えいごばん追加ついかされた。

なお、スクリプト言語げんご処理しょりけいをアプリケーションにんでおくことで、プラグインと類似るいじ機構きこう実現じつげんすることもできる。

セキュリティ

[編集へんしゅう]

アプリケーションの外部がいぶからコードをんで実行じっこうすることで、サードパーティせいのプラグインを利用りようできるようにすると、コードインジェクションやコードの改竄かいざんによって、アプリケーションが不正ふせい使用しようされるというセキュリティじょう問題もんだい発生はっせいする可能かのうせい大幅おおはばたかまる[3]。あらゆる可能かのうせい考慮こうりょしなければならなくなるため、アプリケーションの動作どうさ検証けんしょうむずかしくなる。アプリストアにおけるプライバシーとセキュリティの品質ひんしつ維持いじ観点かんてんから、アプリケーションのパッケージ外部がいぶにあるコードを動的どうてきんで実行じっこうしないようにポリシーをさだめているプラットフォーム[4]や、ユーザーの同意どういられた場合ばあいのみアドオンや拡張かくちょう機能きのう取得しゅとくできるようにさだめているプラットフォームもある[5]

実際じっさいに、Adobe Flash Playerのプラグインはセキュリティホール温床おんしょうとなっており[6]iOSプラットフォームじょうでは最後さいごまでサポートされなかった。

プラグインの形式けいしき

[編集へんしゅう]

プラグインとして動作どうさするソフトウェア

[編集へんしゅう]

主要しゅようなプラグイン対応たいおうホストソフトウェア

[編集へんしゅう]

脚注きゃくちゅう

[編集へんしゅう]

出典しゅってん

[編集へんしゅう]

関連かんれん項目こうもく

[編集へんしゅう]