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