Redmineを
プラグインで
拡張しよう!
@haru_iida
飯田治行
静岡県在住
Redmineのプラグイン開発多数
Code Review, Wiki Extensions, Logs, ThemeChanger…
r-labs管理者
shinagawa.redmine立ち上げメンバ
宣伝
• 日経BPムック
• ¥1944
• 「必ず役立つ厳選プラ
グイン20」を執筆
本日お話する内容
Today s theme
•プラグインの作り方
•拡張ポイント
•プラグインを公開する
プラグインの
作り方
How to make plugin
参考書
おそらく世界で唯一の
プラグインに関する書籍
!
(全部英語)
!
Alex Bevilacqua
参考書(Web)
• Redmine本家のDeveloperガイド(英語)
• http://www.redmine.org/projects/
redmine/wiki/Developer_Guide
• r-labsのプラグイン開発ガイド(日本語)
• http://www.r-labs.org/projects/r-labs/
wiki/プラグイン開発ガイド
でも一番の参考書は公開され
ているプラグインのコードで
す。
気になるプラグインのコード
を真似するのが一番。
はじめの一歩
Getting started
用意するもの
• 開発マシン
• 開発ツール
• Ruby
• Redmine
開発マシン:OSは何でもよい
Windowsは環境構築に
ちょっと苦労するかも・・・
Ruby
Windows
• RubyInstaller for Windows + DevKit +pikがお勧め
• http://rubyinstaller.org
• 面倒ならBitNamiでRedmineごとインストール
• https://bitnami.com/stack/redmine
Mac, Linux
• rbenvで複数バージョンのrubyを管理
開発ツールのおすすめは
RubyMine
• http://www.jetbrains.com/ruby/
デモ
準備が整ったら早速開始
Plugin Generator
$ $ ruby script/rails generate redmine_plugin redmine_demo	
create plugins/redmine_demo/app	
create plugins/redmine_demo/app/controllers	
create plugins/redmine_demo/app/helpers	
create plugins/redmine_demo/app/models	
create plugins/redmine_demo/app/views	
create plugins/redmine_demo/db/migrate	
create plugins/redmine_demo/lib/tasks	
create plugins/redmine_demo/assets/images	
create plugins/redmine_demo/assets/javascripts	
create plugins/redmine_demo/assets/stylesheets	
create plugins/redmine_demo/config/locales	
create plugins/redmine_demo/test	
create plugins/redmine_demo/test/fixtures	
create plugins/redmine_demo/test/unit	
create plugins/redmine_demo/test/functional	
create plugins/redmine_demo/test/integration	
create plugins/redmine_demo/README.rdoc	
create plugins/redmine_demo/init.rb	
create plugins/redmine_demo/config/routes.rb	
create plugins/redmine_demo/config/locales/en.yml	
create plugins/redmine_demo/test/test_helper.rb
プラグインのひな形を作成するコマンド
Redmineインストールディレクトリ直下で実行する
プラグインの構造はミニrails
• プラグインの下に
controllers, helpers,
models, views…
modelとcontrollerもスクリ
プトで生成
$ ruby script/rails generate redmine_plugin_model redmine_demo
sample_models field1:string field2:integer	
create plugins/redmine_demo/app/models/sample_models.rb	
create plugins/redmine_demo/test/unit/sample_models_test.rb	
create plugins/redmine_demo/db/migrate/001_create_sample_models.rb
$ ruby script/rails generate redmine_plugin_controller redmine_demo Demo
sample_action	
create plugins/redmine_demo/app/controllers/Demo_controller.rb	
create plugins/redmine_demo/app/helpers/Demo_helper.rb	
create plugins/redmine_demo/test/functional/Demo_controller_test.rb	
create plugins/redmine_demo/app/views/Demo/sample_action.html.erb
テストコードのひな形も作成される
init.rb
Redmine::Plugin.register :redmine_demo do	
name 'Redmine Demo plugin'	
author 'Author name'	
description 'This is a plugin for Redmine'	
version '0.0.1'	
url 'http://example.com/path/to/plugin'	
author_url 'http://example.com/about'	
end
プラグインの情報を定義する場所
Plugin Generatorが出力した内容を適宜書き
換える。
特に公開する場合は重要な情報となる。
デモ
拡張ポイント
初級編
• メニュー追加
• Wiki マクロ
• Hook
メニューの追加
メニューの種類
• TOPメニュー
• アプリケーションメニュー
• プロジェクトメニュー
• アカウントメニュー
• アドミンメニュー
メニュー追加は一番オーソドッ
クスな拡張方法
いろいろなプラグインが行っている
メニューの追加はinit.rbで
Redmine::Plugin.register :redmine_demo do	
[...]	
!
# プロジェクトメニューの定義	
menu :project_menu, :demo, { :controller => 'demo', 	
:action => 'sample_action' }, :caption => :demo	
end
デモ
Wikiマクロ
wikiマクロ
• wikiの文法を拡張できる
• 一つぐらいならinit.rbに定義する
• たくさん作るならlibの下に定義を作ってinit.rb
でロードする
• Wiki Extensionsにはたくさんのwikiマクロが
あるので参考にしてください。
twitterマクロ(from Wiki Extensions)
Redmine::WikiFormatting::Macros.register do	
# マクロの説明	
desc "Creates link to twitter account page.nn" +	
" !{{twitter(user_name)}}n”	
# マクロの定義	
macro :twitter do |obj, args|	
	
return nil if args.length < 1 #引数が無かったら何もしない	
user_name = args[0].strip # 第一引数をuser_nameに代入	
# twitterへのリンクを作成	
link_to(h("@#{user_name}"), "http://www.twitter.com/#{user_name}").html_safe	
end	
end
デモ
Hook
Hookとは
• Redmineのいろいろな処理に割り込んでプラ
グイン独自の処理を挿入するしくみ。
• 割り込みポイントはRedmine内に予め用意さ
れている。
Hookの種類
• Controller Hooks
• View Hooks
• Model Hooks
• Helper Hooks
http://www.redmine.org/projects/redmine/
wiki/Hooks_List
View Hooks
• 一番よく使うHook
• Remine本体のページに任意のhtmlコードを
挿入する
View Hooksの書き方
# リスナークラスを定義。init.rbで読み込ませる	
class DemoHookViewListener < Redmine::Hook::ViewListener	
render_on :view_issues_new_top, :partial => "Demo/issue_note"	
end
• ViewListenerを継承したクラスを作成
• render_onでHookと読み込むerbファイルを指定
デモ
Controller Hooksの書き方
class DemoHookListener < Redmine::Hook::Listener	
!
def controller_issues_new_after_save(context = { }) 	
project = context[:project] 	
request = context[:request]	
!
#ここに処理を書く	
end	
end
• Listenerを継承したクラスを作成
• Hookと同じ名前のメソッドを定義
デモ
上級編
JavaScriptによるページ書
き換え
JavaScriptでRedmineが吐く
HTMLを動的に書き換え
• Redmineの既存のページを変更したい場合に使
う。
• JQueryでDOMをゴリゴリ編集するロジックを
ViewHooksで挿入する。
• もはや何でもアリ。見た目をどうとでも変えられる
• RedmineのバージョンアップによってDOMの構造
が変わると破綻するので注意
Code Review Plugin
デモ
alias_method_chain
alias_method_chain
• Redmineの既存の処理を書き換える
def save_with_demo	
# 置き換えたい処理の内容	
end	
!
alias_method_chain :save, :demo
def save	
#処理	
end
しくみを詳しく知りたければ
• Rubyの魔法が判る本
• Paolo Perrotta 著
• 角征典 訳
• 定価:3,024円
デモ
公開する
Publish
せっかく作ったプラグイン、
自分だけで使っていたらもっ
たいない。
思い切って公開しよう。
公開場所を決める
• www.redmine.orgは情報は載せてくれるがリ
ポジトリは提供されない。
www.redmine.orgに登録する
まず最初にユーザー登録
Plugin情報を登録
審査なしで誰でも登録できる。
全部英語で頑張って登録
宣伝しよう
• 公開したら宣伝
• ブログ、SNS等
!
• もれなくあきぴーさんが拾って「プログラ
マーの思索」で紹介されるシステム。
宣伝しよう2
• 勉強会でLTしよう
• twitterで一気に拡散される
まとめ
summary
• 開発ツールのお勧めはRubyMine
• Plugin generatorで雛形作成
• 他のプラグインを真似する
• 作ったら公開しよう
• 公開したら宣伝しよう
これであなたもプラグイン作者!!

Redmineをプラグインで拡張しよう