Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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のプラグイン開発ガイド(...
でも一番の参考書は公開され
ているプラグインのコードで
す。
気になるプラグインのコード
を真似するのが一番。
はじめの一歩
Getting started
用意するもの
• 開発マシン
• 開発ツール
• Ruby
• Redmine
開発マシン:OSは何でもよい
Windowsは環境構築に
ちょっと苦労するかも・・・
Ruby
Windows
• RubyInstaller for Windows + DevKit +pikがお勧め
• http://rubyinstaller.org
• 面倒ならBitNamiでRedmineごとインストール
• http...
開発ツールのおすすめは
RubyMine
• http://www.jetbrains.com/ruby/
デモ
準備が整ったら早速開始
Plugin Generator
$ $ ruby script/rails generate redmine_plugin redmine_demo	
create plugins/redmine_demo/app	
create plugi...
プラグインの構造はミニrails
• プラグインの下に
controllers, helpers,
models, views…
modelとcontrollerもスクリ
プトで生成
$ ruby script/rails generate redmine_plugin_model redmine_demo
sample_models field1:string fiel...
init.rb
Redmine::Plugin.register :redmine_demo do	
name 'Redmine Demo plugin'	
author 'Author name'	
description 'This is ...
デモ
拡張ポイント
初級編
• メニュー追加
• Wiki マクロ
• Hook
メニューの追加
メニューの種類
• TOPメニュー
• アプリケーションメニュー
• プロジェクトメニュー
• アカウントメニュー
• アドミンメニュー
メニュー追加は一番オーソドッ
クスな拡張方法
いろいろなプラグインが行っている
メニューの追加はinit.rbで
Redmine::Plugin.register :redmine_demo do	
[...]	
!
# プロジェクトメニューの定義	
menu :project_menu, :demo, { :contro...
デモ
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 acco...
デモ
Hook
Hookとは
• Redmineのいろいろな処理に割り込んでプラ
グイン独自の処理を挿入するしくみ。
• 割り込みポイントはRedmine内に予め用意さ
れている。
Hookの種類
• Controller Hooks
• View Hooks
• Model Hooks
• Helper Hooks
http://www.redmine.org/projects/redmine/
wiki/Hooks_L...
View Hooks
• 一番よく使うHook
• Remine本体のページに任意のhtmlコードを
挿入する
View Hooksの書き方
# リスナークラスを定義。init.rbで読み込ませる	
class DemoHookViewListener < Redmine::Hook::ViewListener	
render_on :view_issu...
デモ
Controller Hooksの書き方
class DemoHookListener < Redmine::Hook::Listener	
!
def controller_issues_new_after_save(context = { ...
デモ
上級編
JavaScriptによるページ書
き換え
JavaScriptでRedmineが吐く
HTMLを動的に書き換え
• Redmineの既存のページを変更したい場合に使
う。
• JQueryでDOMをゴリゴリ編集するロジックを
ViewHooksで挿入する。
• もはや何でもアリ。見た目...
Code Review Plugin
デモ
alias_method_chain
alias_method_chain
• Redmineの既存の処理を書き換える
def save_with_demo	
# 置き換えたい処理の内容	
end	
!
alias_method_chain :save, :demo
def sav...
しくみを詳しく知りたければ
• Rubyの魔法が判る本
• Paolo Perrotta 著
• 角征典 訳
• 定価:3,024円
デモ
公開する
Publish
せっかく作ったプラグイン、
自分だけで使っていたらもっ
たいない。
思い切って公開しよう。
公開場所を決める
• www.redmine.orgは情報は載せてくれるがリ
ポジトリは提供されない。
www.redmine.orgに登録する
まず最初にユーザー登録
Plugin情報を登録
審査なしで誰でも登録できる。
全部英語で頑張って登録
宣伝しよう
• 公開したら宣伝
• ブログ、SNS等
!
• もれなくあきぴーさんが拾って「プログラ
マーの思索」で紹介されるシステム。
宣伝しよう2
• 勉強会でLTしよう
• twitterで一気に拡散される
まとめ
summary
• 開発ツールのお勧めはRubyMine
• Plugin generatorで雛形作成
• 他のプラグインを真似する
• 作ったら公開しよう
• 公開したら宣伝しよう
これであなたもプラグイン作者!!
Upcoming SlideShare
Loading in …5
×

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

15,824 views

Published on

第11回RxTstudyの公園資料

Published in: Software

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

  1. 1. Redmineを プラグインで 拡張しよう! @haru_iida
  2. 2. 飯田治行 静岡県在住 Redmineのプラグイン開発多数 Code Review, Wiki Extensions, Logs, ThemeChanger… r-labs管理者 shinagawa.redmine立ち上げメンバ
  3. 3. 宣伝 • 日経BPムック • ¥1944 • 「必ず役立つ厳選プラ グイン20」を執筆
  4. 4. 本日お話する内容 Today s theme
  5. 5. •プラグインの作り方 •拡張ポイント •プラグインを公開する
  6. 6. プラグインの 作り方 How to make plugin
  7. 7. 参考書 おそらく世界で唯一の プラグインに関する書籍 ! (全部英語) ! Alex Bevilacqua
  8. 8. 参考書(Web) • Redmine本家のDeveloperガイド(英語) • http://www.redmine.org/projects/ redmine/wiki/Developer_Guide • r-labsのプラグイン開発ガイド(日本語) • http://www.r-labs.org/projects/r-labs/ wiki/プラグイン開発ガイド
  9. 9. でも一番の参考書は公開され ているプラグインのコードで す。 気になるプラグインのコード を真似するのが一番。
  10. 10. はじめの一歩 Getting started
  11. 11. 用意するもの • 開発マシン • 開発ツール • Ruby • Redmine
  12. 12. 開発マシン:OSは何でもよい Windowsは環境構築に ちょっと苦労するかも・・・
  13. 13. Ruby Windows • RubyInstaller for Windows + DevKit +pikがお勧め • http://rubyinstaller.org • 面倒ならBitNamiでRedmineごとインストール • https://bitnami.com/stack/redmine Mac, Linux • rbenvで複数バージョンのrubyを管理
  14. 14. 開発ツールのおすすめは RubyMine • http://www.jetbrains.com/ruby/
  15. 15. デモ
  16. 16. 準備が整ったら早速開始
  17. 17. 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インストールディレクトリ直下で実行する
  18. 18. プラグインの構造はミニrails • プラグインの下に controllers, helpers, models, views…
  19. 19. 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 テストコードのひな形も作成される
  20. 20. 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が出力した内容を適宜書き 換える。 特に公開する場合は重要な情報となる。
  21. 21. デモ
  22. 22. 拡張ポイント
  23. 23. 初級編
  24. 24. • メニュー追加 • Wiki マクロ • Hook
  25. 25. メニューの追加
  26. 26. メニューの種類 • TOPメニュー • アプリケーションメニュー • プロジェクトメニュー • アカウントメニュー • アドミンメニュー
  27. 27. メニュー追加は一番オーソドッ クスな拡張方法 いろいろなプラグインが行っている
  28. 28. メニューの追加はinit.rbで Redmine::Plugin.register :redmine_demo do [...] ! # プロジェクトメニューの定義 menu :project_menu, :demo, { :controller => 'demo', :action => 'sample_action' }, :caption => :demo end
  29. 29. デモ
  30. 30. Wikiマクロ
  31. 31. wikiマクロ • wikiの文法を拡張できる • 一つぐらいならinit.rbに定義する • たくさん作るならlibの下に定義を作ってinit.rb でロードする • Wiki Extensionsにはたくさんのwikiマクロが あるので参考にしてください。
  32. 32. 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
  33. 33. デモ
  34. 34. Hook
  35. 35. Hookとは • Redmineのいろいろな処理に割り込んでプラ グイン独自の処理を挿入するしくみ。 • 割り込みポイントはRedmine内に予め用意さ れている。
  36. 36. Hookの種類 • Controller Hooks • View Hooks • Model Hooks • Helper Hooks http://www.redmine.org/projects/redmine/ wiki/Hooks_List
  37. 37. View Hooks • 一番よく使うHook • Remine本体のページに任意のhtmlコードを 挿入する
  38. 38. 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ファイルを指定
  39. 39. デモ
  40. 40. Controller Hooksの書き方 class DemoHookListener < Redmine::Hook::Listener ! def controller_issues_new_after_save(context = { }) project = context[:project] request = context[:request] ! #ここに処理を書く end end • Listenerを継承したクラスを作成 • Hookと同じ名前のメソッドを定義
  41. 41. デモ
  42. 42. 上級編
  43. 43. JavaScriptによるページ書 き換え
  44. 44. JavaScriptでRedmineが吐く HTMLを動的に書き換え • Redmineの既存のページを変更したい場合に使 う。 • JQueryでDOMをゴリゴリ編集するロジックを ViewHooksで挿入する。 • もはや何でもアリ。見た目をどうとでも変えられる • RedmineのバージョンアップによってDOMの構造 が変わると破綻するので注意
  45. 45. Code Review Plugin
  46. 46. デモ
  47. 47. alias_method_chain
  48. 48. alias_method_chain • Redmineの既存の処理を書き換える def save_with_demo # 置き換えたい処理の内容 end ! alias_method_chain :save, :demo def save #処理 end
  49. 49. しくみを詳しく知りたければ • Rubyの魔法が判る本 • Paolo Perrotta 著 • 角征典 訳 • 定価:3,024円
  50. 50. デモ
  51. 51. 公開する Publish
  52. 52. せっかく作ったプラグイン、 自分だけで使っていたらもっ たいない。 思い切って公開しよう。
  53. 53. 公開場所を決める • www.redmine.orgは情報は載せてくれるがリ ポジトリは提供されない。
  54. 54. www.redmine.orgに登録する まず最初にユーザー登録
  55. 55. Plugin情報を登録 審査なしで誰でも登録できる。
  56. 56. 全部英語で頑張って登録
  57. 57. 宣伝しよう • 公開したら宣伝 • ブログ、SNS等 ! • もれなくあきぴーさんが拾って「プログラ マーの思索」で紹介されるシステム。
  58. 58. 宣伝しよう2 • 勉強会でLTしよう • twitterで一気に拡散される
  59. 59. まとめ summary
  60. 60. • 開発ツールのお勧めはRubyMine • Plugin generatorで雛形作成 • 他のプラグインを真似する • 作ったら公開しよう • 公開したら宣伝しよう これであなたもプラグイン作者!!

×