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

60
Redmineプラグインで 拡張しよう! @haru_iida

Upload: haruyuki-iida

Post on 13-Dec-2014

5.522 views

Category:

Software


1 download

DESCRIPTION

第11回RxTstudyの公園資料

TRANSCRIPT

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

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

@haru_iida

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

飯田治行静岡県在住 Redmineのプラグイン開発多数 Code Review, Wiki Extensions, Logs, ThemeChanger… r-labs管理者 shinagawa.redmine立ち上げメンバ

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

宣伝

• 日経BPムック

• ¥1944

• 「必ず役立つ厳選プラグイン20」を執筆

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

本日お話する内容Today’s theme

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

•プラグインの作り方

•拡張ポイント

•プラグインを公開する

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

プラグインの 作り方How to make plugin

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

参考書

おそらく世界で唯一の プラグインに関する書籍

!

(全部英語) !

Alex Bevilacqua

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

参考書(Web)• Redmine本家のDeveloperガイド(英語)

• http://www.redmine.org/projects/redmine/wiki/Developer_Guide

• r-labsのプラグイン開発ガイド(日本語)

• http://www.r-labs.org/projects/r-labs/wiki/プラグイン開発ガイド

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

でも一番の参考書は公開されているプラグインのコードです。 気になるプラグインのコードを真似するのが一番。

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

はじめの一歩Getting started

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

用意するもの• 開発マシン

• 開発ツール

• Ruby

• Redmine

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

開発マシン:OSは何でもよい

Windowsは環境構築にちょっと苦労するかも・・・

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

Ruby Windows

• RubyInstaller for Windows + DevKit +pikがお勧め

• http://rubyinstaller.org

• 面倒ならBitNamiでRedmineごとインストール

• https://bitnami.com/stack/redmine

Mac, Linux

• rbenvで複数バージョンのrubyを管理

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

開発ツールのおすすめはRubyMine• http://www.jetbrains.com/ruby/

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

デモ

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

準備が整ったら早速開始

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

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インストールディレクトリ直下で実行する

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

プラグインの構造はミニrails• プラグインの下にcontrollers, helpers, models, views…

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

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

テストコードのひな形も作成される

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

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が出力した内容を適宜書き換える。 特に公開する場合は重要な情報となる。

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

デモ

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

拡張ポイント

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

初級編

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

•メニュー追加

•Wiki マクロ

•Hook

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

メニューの追加

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

メニューの種類• TOPメニュー

• アプリケーションメニュー

• プロジェクトメニュー

• アカウントメニュー

• アドミンメニュー

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

メニュー追加は一番オーソドックスな拡張方法いろいろなプラグインが行っている

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

メニューの追加はinit.rbで

Redmine::Plugin.register :redmine_demo do [...]! # プロジェクトメニューの定義 menu :project_menu, :demo, { :controller => 'demo', :action => 'sample_action' }, :caption => :demoend

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

デモ

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

Wikiマクロ

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

wikiマクロ• wikiの文法を拡張できる

• 一つぐらいならinit.rbに定義する

• たくさん作るならlibの下に定義を作ってinit.rbでロードする

• Wiki Extensionsにはたくさんのwikiマクロがあるので参考にしてください。

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

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

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

デモ

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

Hook

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

Hookとは• Redmineのいろいろな処理に割り込んでプラグイン独自の処理を挿入するしくみ。

• 割り込みポイントはRedmine内に予め用意されている。

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

Hookの種類• Controller Hooks

• View Hooks

• Model Hooks

• Helper Hooks

http://www.redmine.org/projects/redmine/wiki/Hooks_List

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

View Hooks• 一番よく使うHook

• Remine本体のページに任意のhtmlコードを挿入する

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

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ファイルを指定

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

デモ

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

Controller Hooksの書き方

class DemoHookListener < Redmine::Hook::Listener! def controller_issues_new_after_save(context = { }) project = context[:project] request = context[:request]! #ここに処理を書く endend

• Listenerを継承したクラスを作成 • Hookと同じ名前のメソッドを定義

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

デモ

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

上級編

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

JavaScriptによるページ書き換え

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

JavaScriptでRedmineが吐くHTMLを動的に書き換え• Redmineの既存のページを変更したい場合に使う。

• JQueryでDOMをゴリゴリ編集するロジックをViewHooksで挿入する。

• もはや何でもアリ。見た目をどうとでも変えられる

• RedmineのバージョンアップによってDOMの構造が変わると破綻するので注意

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

Code Review Plugin

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

デモ

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

alias_method_chain

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

alias_method_chain• Redmineの既存の処理を書き換える

def save_with_demo # 置き換えたい処理の内容end!alias_method_chain :save, :demo

def save #処理end

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

しくみを詳しく知りたければ• Rubyの魔法が判る本

• Paolo Perrotta 著

• 角征典 訳

• 定価:3,024円

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

デモ

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

公開するPublish

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

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

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

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

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

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

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

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

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

全部英語で頑張って登録

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

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

• ブログ、SNS等

!

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

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

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

• twitterで一気に拡散される

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

まとめsummary

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

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

• Plugin generatorで雛形作成

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

• 作ったら公開しよう

• 公開したら宣伝しよう

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