redmineをプラグインで拡張しよう
Post on 13-Dec-2014
5.522 Views
Preview:
DESCRIPTION
TRANSCRIPT
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を管理
デモ
準備が整ったら早速開始
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 => :demoend
デモ
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.\n\n" + " !{{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 endend
デモ
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]! #ここに処理を書く endend
• 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
せっかく作ったプラグイン、自分だけで使っていたらもったいない。 思い切って公開しよう。
Plugin情報を登録審査なしで誰でも登録できる。
全部英語で頑張って登録
宣伝しよう• 公開したら宣伝
• ブログ、SNS等
!
• もれなくあきぴーさんが拾って「プログラマーの思索」で紹介されるシステム。
宣伝しよう2• 勉強会でLTしよう
• twitterで一気に拡散される
まとめsummary
• 開発ツールのお勧めはRubyMine
• Plugin generatorで雛形作成
• 他のプラグインを真似する
• 作ったら公開しよう
• 公開したら宣伝しよう
これであなたもプラグイン作者!!
top related