Redmineプラグインの詳しい作成方法は方は下記のサイトで解説されているので、この記事ではプラグイン開発に必要なコマンドや注意点などをまとめてみる。
- Redmine - Plugin Tutorial – Redmine
Redmine本家サイトのプラグインチュートリアル。
(投票プラグインの開発を例にRedmineプラグインの作成方法を解説している。英語) - r-labs - プラグイン チュートリアル - Redmine
上記サイトの解説を日本語に翻訳したもの。 - Ruby Freaks Lounge:第34回 Redmineプラグイン開発(1)
サーバーの状態を監視するプラグインを作成しながらRedmineプラグイン開発を説明。
Redmineプラグインの開発方法
環境
ここで説明している内容は下記の環境で試した。
- WindowsXP
- Redmine 0.9.4
- Rails 2.3.5
1. プラグインのの作成
Redmineをインストールしたディレクトリーにて下記のコマンドを実行する。
> ruby script/generate redmine_plugin <プラグイン名>
たとえばSchedulerという名前のプラグインの場合は、下記のようになる。
> ruby script/generate redmine_plugin Scheduler
すると、vendor/plugins/redmine_<プラグイン名>というディレクトリーが作成され、その下にプラグイン開発に必要なファイルが自動生成される。
2. init.rbの編集
vendor/plugins/redmine_<プラグイン名>/init.rb を修正して、プラグイン情報を設定する。
3. モデルの作成
> ruby script/generate redmine_plugin_model <プラグイン名>
<モデル名> <モデルの属性...>
Schedulerプラグインに「event」というモデルを作成し、そこにタイトル、開始日時、終了日時の属性を持たせる場合は下記のようになる。
> ruby script/generate redmine_plugin_model Scheduler event
title:string start_date:date end_date:date
4. マイグレーションファイル名の修正
作成したモデルをDBに反映させるためにマイグレーションを実行するが、ここで注意が必要。 モデルを作成するとyyyymmddhhmmss_****.rbという日付が頭についた形式のマイグレーションファイルが生成される。 しかし、Redmineでは、この日付形式のマイグレーションファイルをサポートしていない。そこで、001_****.rbのようにファイル名を変更する必要がある。
> cd <REDMINE_ROOT>/vendor/plugins/redmine_scheduler/db/migrate/
> ren 20100525010956_create_events.rb 001_create_events.rb
5. DBのマイグレーションを実行
> rake db:migrate_plugins
このコマンドにより、モデルと関連するテーブルやカラムがDBに作成される。
6. コントローラーの作成
> ruby script/generate redmine_plugin_controller <plugin_name>
<controller_name> [<actions>]
例
> ruby script/generate redmine_plugin_controller Scheduler
events index
注意しなければならないのは、unloadable を生成されたコントローラーに追加すること。 この一行がなくとも最初の一回目はページが表示されるのだが、リロードするとエラーが発生する。
Ruby on Rails単体で作ったアプリをRedmineのプラグインに移植する場合、 コピー&ペーストでコントローラーやビューをプラグインに持ってくることがあると思うが、そのときはunloadableを追加するのを忘れないようにすること。(ちなみに私はこれを忘れて、プラグインが動作せず悩んだことがある。)
class SchedulerController < ApplicationController unloadable ← 重要 def index ... end ... end
以上が、Redmineでプラグインを作成するときの手順である。
Redmineプラグインの削除
追加したプラグインを削除するには、下記のコマンドでマイグレーションコマンドでDBを元に戻し、あとはプラグインのフォルダごと削除すればよい。
> rake db:migrate_plugin NAME=<プラグイン名> VERSION=0
例
> rake db:migrate_plugin NAME=Scheduler VERSION=0
そして、vendor/plugins/redmine_<プラグイン名> を丸ごと削除してしまえばよい。
Redmineプラグインのマイグレーションに関しては、下記の記事(英語)が参考になる。