II-15-8. RoRのプラグイン開発

RoRの機能を拡張するプラグインを新たに開発する方法を説明する。ジェネレータの実行や機能の実装と実行といったプラグイン作成手順の流れを示し、作成したプラグインをテストする手法を示す。また新たに作成したプラグインを利用するサンプルプログラムを示し実際の利用手順を説明する。

【学習の要点】

* プラグインの雛形はスクリプトにより自動生成することができる。

* プラグインの実装はvender/plugins/[プラグイン名]/lib/[プラグイン名].rbファイルに記述する。

* プラグインのテストはvender/plugins/[プラグイン名]/test/[プラグイン名]_test.rbファイルに記述する。

* プラグインのテストはrake test:pluginsコマンドによって実行する。

図II-15-8. プラグインの開発例

【解説】

1) プラグインの種類

RoRのほとんどの機能はプラグインとして開発可能である。以下に拡張例をあげる。

* ActiveRecord::Baseクラスに新たなメソッドを追加することで、Modelクラスに新たな機能を加える。多くの場合、Modelクラス内で「acts_as_」で始まるメソッドを呼び出すことで、機能が有効になるように作成される。

* Viewテンプレート内で利用可能なヘルパーを追加する。Viewテンプレート内でメソッドとして呼び出すことで利用することができる。

2) プラグインの開発

プラグインの開発にあたっては、「ruby script/generate plugin [プラグイン名]」スクリプトにより、雛形を生成することができる。生成されるファイルについて以下に説明する。

* vendor/plugins/[プラグイン名]/README

プラグインの利用者向けに、プラグインのインストール方法、使い方などを記述する。

* vendor/plugins/[プラグイン名]/init.rb

プラグインの初期化処理を記述する。プラグインのモジュールをRoRに組み込む処理などが該当する。init.rbで一般的に行われる処理を以下にあげる。

- ActiveRecord::Base.send(:include, [モジュール名])

Modelクラスに対し、モジュール内のメソッドを追加する。

- ActionController::Base.send(:include, [モジュール名])

Controllerクラスに対し、モジュール内のメソッドを追加する。

- ActionView::Base.send(:include, [モジュール名])

モジュール内のメソッドをViewテンプレート内で利用可能なヘルパーとして登録する。

* vendor/plugins/[プラグイン名]/install.rb

プラグインのインストール処理を記述する。JavaScriptやスタイルシートを展開する処理などを記述する。

* vendor/plugins/[プラグイン名]/uninstall.rb

プラグインのアンインストール処理を記述する。

* vendor/plugins/[プラグイン名]/lib/[プラグイン名].rb

プラグインの本体となるソースコードを記述する。「vendor/plugins/[プラグイン名]/lib/」ディレクトリは、RoRの起動時にロードパスに追加される。記述の仕方としては、プラグイン独自のモジュールを定義してその中にメソッドとして処理を記述し、init.rb内でRoRに組み込む方法が一般的である。

* vendor/plugins/[プラグイン名]/tasks/[プラグイン名]_tasks.rake

プラグイン用のrakeタスクを記述する。

* vendor/plugins/[プラグイン名]/test/[プラグイン名]_test.rb

Test::Unitモジュールを利用してプラグイン用のテストを記述する。

3) プラグインのテスト

rakeタスク「rake test:plugins」によって、全てのプラグインのテストが実行される。特定のプラグインのみテストする場合は、「rake test:plugins PLUGIN=[プラグイン名]」とする。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。