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

Post on 13-Dec-2014

5.522 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

第11回RxTstudyの公園資料

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を管理

開発ツールのおすすめは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 => :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

せっかく作ったプラグイン、自分だけで使っていたらもったいない。 思い切って公開しよう。

公開場所を決める• www.redmine.orgは情報は載せてくれるがリポジトリは提供されない。

www.redmine.orgに登録するまず最初にユーザー登録

Plugin情報を登録審査なしで誰でも登録できる。

全部英語で頑張って登録

宣伝しよう• 公開したら宣伝

• ブログ、SNS等

!

• もれなくあきぴーさんが拾って「プログラマーの思索」で紹介されるシステム。

宣伝しよう2• 勉強会でLTしよう

• twitterで一気に拡散される

まとめsummary

• 開発ツールのお勧めはRubyMine

• Plugin generatorで雛形作成

• 他のプラグインを真似する

• 作ったら公開しよう

• 公開したら宣伝しよう

これであなたもプラグイン作者!!

top related