出力を入力へ

プログラミングに関する自分が考えた事を中心にまとめます

Redmine4(Rails5)プラグイン開発ハンズオン無料セミナーに参加しました

Redmine4(Rails5)プラグイン開発ハンズオン無料セミナーに参加しました

Redmine4を見据えた,プラグイン開発ハンズオンに参加しました.

主催のアジャイルウェアさん,会場提供のテクマトリックスさん ありがとうございました.

agileware.connpass.com

参加者

ほとんどの人がPlugin開発経験なし, Ruby(Rails)も普段バリバリ書いている人はいない という感じでした.

自分も2-3個のRailsアプリを書いたことがあるだけでほとんど知見なし, Rails5についても情報収集はあまり行っていない (開発経験もない)というスキルでの参加です.

ハンズオンの流れ

connpassにアップロードされた資料の通りです. Cloud9上でRedmineの最新版(trunk)を動作させ, サンプルのプラグインとして チケットに「いいね」ができる いいねプラグイン を写経しました. また,途中途中で講師の方から注意点や 実際のプラグイン開発の知見を説明してもらいました.

ハンズオン内容・ポイント

プラグインチュートリアル

redmine公式wikiにもプラグイン開発のチュートリアル掲載されています. しかし最終更新が2014年で,Redmine 2系を対象としており, メンテされていません. 自分も以前プラグイン作成を検討した際に 情報の古さから断念しました.

加えて,チュートリアル中では rails generate redmine_plugin コマンドにてプラグインの雛形を生成して 作成するように支持がありますが, このツールのメンテがあまり行われておらず アジャイルウェアさんでもこのツールは利用していないとのこと.

このためプラグイン開発は手作業でファイルやディレクトリを作成して進めました. しかし,Rails開発に慣れていないこともあって 多くの参加者でミス・不具合が発生(自分も何度かミスしました). 正直なところ,このツールは必要だと思ったのですが 慣れてくるとどうでもよくなるのでしょうか.

プラグインHook

Redmineにはプラグイン向けに 処理を差し込めるポイントが準備されています. Hookリストはこちら.

ただし,このHookは数が十分ではなく, 大抵のプラグイン開発で必要なHookが足りない状況におちいるとのこと. このため,ベースとなるHookポイントにテンプレートの元となる記述を書き込み, 後からJavaScriptで書き換えるのがよいそうです.

プラグイン開発パターン

issue_patch

既存のクラスに機能を追加する(モンキーパッチを当てる)仕組み. ここではIssueに対するパッチで,iine_countersテーブルへの 参照を追加しています. 他にも本プラグインではuser_patchを利用しています.

query column

Issue一覧のカラムを追加する方法です. available_columnsに追加することで実現できます.

Rail5対応に必要な変更

ActiveSupport::Reloader

Rails4ではActionDispatch::Reloaderとして実装されていましたが Rails5でActiveSupport::Reloaderとクラスが変更になっています.

Module:prepend

Rails4ではalias_method_chainを利用していましたが, Rails5からは非推奨となり,prependを利用する必要があるそうです.

その他

redminerailsの再読み込みの相性があまりよくないらしく, 開発中においてプラグインを書き換えても自動で反映されず サーバ再起動が必要になったり,ならなかったりすることがあるそうです.