SlideShare uma empresa Scribd logo
1 de 60
Baixar para ler offline
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 => :demo	
end
デモ
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.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
デモ
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]	
!
#ここに処理を書く	
end	
end
• 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で雛形作成
• 他のプラグインを真似する
• 作ったら公開しよう
• 公開したら宣伝しよう
これであなたもプラグイン作者!!

Mais conteúdo relacionado

Mais procurados

Redmineカスタムフィールド表示改善
Redmineカスタムフィールド表示改善Redmineカスタムフィールド表示改善
Redmineカスタムフィールド表示改善Yuuki Nara
 
挫折しないRedmine (2022)
 挫折しないRedmine  (2022) 挫折しないRedmine  (2022)
挫折しないRedmine (2022)Go Maeda
 
RedmineのFAQとアンチパターン集
RedmineのFAQとアンチパターン集RedmineのFAQとアンチパターン集
RedmineのFAQとアンチパターン集akipii Oga
 
うちのRedmineの使い方(2)
うちのRedmineの使い方(2)うちのRedmineの使い方(2)
うちのRedmineの使い方(2)Tomohisa Kusukawa
 
はじめる! Redmine (2021年版)
はじめる! Redmine (2021年版) はじめる! Redmine (2021年版)
はじめる! Redmine (2021年版) Go Maeda
 
Redmine 5.0 + RedMica 2.1 新機能評価ガイド
Redmine 5.0 + RedMica 2.1 新機能評価ガイドRedmine 5.0 + RedMica 2.1 新機能評価ガイド
Redmine 5.0 + RedMica 2.1 新機能評価ガイドGo Maeda
 
Redmineの開発状況のこれまでと現在
Redmineの開発状況のこれまでと現在Redmineの開発状況のこれまでと現在
Redmineの開発状況のこれまでと現在Go Maeda
 
うちのRedmineの使い方
うちのRedmineの使い方うちのRedmineの使い方
うちのRedmineの使い方Tomohisa Kusukawa
 
Redmineの意外と知らない便利機能(Redmine 4.2対応版)
Redmineの意外と知らない便利機能(Redmine 4.2対応版)Redmineの意外と知らない便利機能(Redmine 4.2対応版)
Redmineの意外と知らない便利機能(Redmine 4.2対応版)Go Maeda
 
Redmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたRedmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたKohei Nakamura
 
ある工場の Redmine 2021 ( Redmine of one plant 2021 )
ある工場の Redmine 2021 ( Redmine of one plant 2021 )ある工場の Redmine 2021 ( Redmine of one plant 2021 )
ある工場の Redmine 2021 ( Redmine of one plant 2021 )Kohei Nakamura
 
「プロジェクト管理」を超えた Redmine 活用の道のりとこれから
「プロジェクト管理」を超えた Redmine 活用の道のりとこれから「プロジェクト管理」を超えた Redmine 活用の道のりとこれから
「プロジェクト管理」を超えた Redmine 活用の道のりとこれからMinoru Maeda
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾Ryutaro YOSHIBA
 
Redmineによるメール対応管理の運用事例
Redmineによるメール対応管理の運用事例Redmineによるメール対応管理の運用事例
Redmineによるメール対応管理の運用事例Go Maeda
 
Redmineによるwebサポート窓口の実装と運用
Redmineによるwebサポート窓口の実装と運用Redmineによるwebサポート窓口の実装と運用
Redmineによるwebサポート窓口の実装と運用Go Maeda
 
講演1 Redmine導入のアンチパターン
講演1 Redmine導入のアンチパターン講演1 Redmine導入のアンチパターン
講演1 Redmine導入のアンチパターンHidehisa Matsutani
 
Redmineサーバ統合事例
Redmineサーバ統合事例Redmineサーバ統合事例
Redmineサーバ統合事例Yuuki Nara
 
はじめる! Redmine (2017)
 はじめる! Redmine (2017) はじめる! Redmine (2017)
はじめる! Redmine (2017)Go Maeda
 
はじめる! Redmine (2015)
はじめる! Redmine (2015)はじめる! Redmine (2015)
はじめる! Redmine (2015)Go Maeda
 
ある工場の Redmine 2017
ある工場の Redmine 2017ある工場の Redmine 2017
ある工場の Redmine 2017Kohei Nakamura
 

Mais procurados (20)

Redmineカスタムフィールド表示改善
Redmineカスタムフィールド表示改善Redmineカスタムフィールド表示改善
Redmineカスタムフィールド表示改善
 
挫折しないRedmine (2022)
 挫折しないRedmine  (2022) 挫折しないRedmine  (2022)
挫折しないRedmine (2022)
 
RedmineのFAQとアンチパターン集
RedmineのFAQとアンチパターン集RedmineのFAQとアンチパターン集
RedmineのFAQとアンチパターン集
 
うちのRedmineの使い方(2)
うちのRedmineの使い方(2)うちのRedmineの使い方(2)
うちのRedmineの使い方(2)
 
はじめる! Redmine (2021年版)
はじめる! Redmine (2021年版) はじめる! Redmine (2021年版)
はじめる! Redmine (2021年版)
 
Redmine 5.0 + RedMica 2.1 新機能評価ガイド
Redmine 5.0 + RedMica 2.1 新機能評価ガイドRedmine 5.0 + RedMica 2.1 新機能評価ガイド
Redmine 5.0 + RedMica 2.1 新機能評価ガイド
 
Redmineの開発状況のこれまでと現在
Redmineの開発状況のこれまでと現在Redmineの開発状況のこれまでと現在
Redmineの開発状況のこれまでと現在
 
うちのRedmineの使い方
うちのRedmineの使い方うちのRedmineの使い方
うちのRedmineの使い方
 
Redmineの意外と知らない便利機能(Redmine 4.2対応版)
Redmineの意外と知らない便利機能(Redmine 4.2対応版)Redmineの意外と知らない便利機能(Redmine 4.2対応版)
Redmineの意外と知らない便利機能(Redmine 4.2対応版)
 
Redmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたRedmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみた
 
ある工場の Redmine 2021 ( Redmine of one plant 2021 )
ある工場の Redmine 2021 ( Redmine of one plant 2021 )ある工場の Redmine 2021 ( Redmine of one plant 2021 )
ある工場の Redmine 2021 ( Redmine of one plant 2021 )
 
「プロジェクト管理」を超えた Redmine 活用の道のりとこれから
「プロジェクト管理」を超えた Redmine 活用の道のりとこれから「プロジェクト管理」を超えた Redmine 活用の道のりとこれから
「プロジェクト管理」を超えた Redmine 活用の道のりとこれから
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
 
Redmineによるメール対応管理の運用事例
Redmineによるメール対応管理の運用事例Redmineによるメール対応管理の運用事例
Redmineによるメール対応管理の運用事例
 
Redmineによるwebサポート窓口の実装と運用
Redmineによるwebサポート窓口の実装と運用Redmineによるwebサポート窓口の実装と運用
Redmineによるwebサポート窓口の実装と運用
 
講演1 Redmine導入のアンチパターン
講演1 Redmine導入のアンチパターン講演1 Redmine導入のアンチパターン
講演1 Redmine導入のアンチパターン
 
Redmineサーバ統合事例
Redmineサーバ統合事例Redmineサーバ統合事例
Redmineサーバ統合事例
 
はじめる! Redmine (2017)
 はじめる! Redmine (2017) はじめる! Redmine (2017)
はじめる! Redmine (2017)
 
はじめる! Redmine (2015)
はじめる! Redmine (2015)はじめる! Redmine (2015)
はじめる! Redmine (2015)
 
ある工場の Redmine 2017
ある工場の Redmine 2017ある工場の Redmine 2017
ある工場の Redmine 2017
 

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

Redmine plugin ハンズオン
Redmine plugin ハンズオンRedmine plugin ハンズオン
Redmine plugin ハンズオンHaruyuki Iida
 
Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13Sho Douhashi
 
ブラウザだけで学ぶWebアプリ開発【デザイン編】
ブラウザだけで学ぶWebアプリ開発【デザイン編】ブラウザだけで学ぶWebアプリ開発【デザイン編】
ブラウザだけで学ぶWebアプリ開発【デザイン編】schoowebcampus
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminarManabu Shimobe
 
Salesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれSalesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれ寛 吉田
 
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編kimulla
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていくRyo Mitoma
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshopYoichiro Sakurai
 
マイクロソフトの新しい Web 開発ツールと新しい Web ブラウザー、そして、それらの新しい機能についての話
マイクロソフトの新しい Web 開発ツールと新しい Web ブラウザー、そして、それらの新しい機能についての話マイクロソフトの新しい Web 開発ツールと新しい Web ブラウザー、そして、それらの新しい機能についての話
マイクロソフトの新しい Web 開発ツールと新しい Web ブラウザー、そして、それらの新しい機能についての話Osamu Monoe
 
devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2Yushi_Takagi
 
1分で分かるdeveloperWorks Premium
1分で分かるdeveloperWorks Premium1分で分かるdeveloperWorks Premium
1分で分かるdeveloperWorks PremiumYUSUKE MORIZUMI
 
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイPlaybay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイKazuhiro Hara
 
パワーユーザー必携の海外の拡張機能20選+α
パワーユーザー必携の海外の拡張機能20選+αパワーユーザー必携の海外の拡張機能20選+α
パワーユーザー必携の海外の拡張機能20選+αAkira Maruyama
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Shota Umeda
 
ペアプロはリモートでもできる!
ペアプロはリモートでもできる!ペアプロはリモートでもできる!
ペアプロはリモートでもできる!Tatsuya Deguchi
 
Embedded Webで加速するWeb of Things
Embedded Webで加速するWeb of ThingsEmbedded Webで加速するWeb of Things
Embedded Webで加速するWeb of ThingsFutomi Hatano
 

Semelhante a Redmineをプラグインで拡張しよう (20)

Redmine plugin ハンズオン
Redmine plugin ハンズオンRedmine plugin ハンズオン
Redmine plugin ハンズオン
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13
 
ブラウザだけで学ぶWebアプリ開発【デザイン編】
ブラウザだけで学ぶWebアプリ開発【デザイン編】ブラウザだけで学ぶWebアプリ開発【デザイン編】
ブラウザだけで学ぶWebアプリ開発【デザイン編】
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
210630 python
210630 python210630 python
210630 python
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 
Salesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれSalesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれ
 
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
 
マイクロソフトの新しい Web 開発ツールと新しい Web ブラウザー、そして、それらの新しい機能についての話
マイクロソフトの新しい Web 開発ツールと新しい Web ブラウザー、そして、それらの新しい機能についての話マイクロソフトの新しい Web 開発ツールと新しい Web ブラウザー、そして、それらの新しい機能についての話
マイクロソフトの新しい Web 開発ツールと新しい Web ブラウザー、そして、それらの新しい機能についての話
 
devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2
 
今さら聞けない人のためのGit超入門 2020/12/19
今さら聞けない人のためのGit超入門 2020/12/19今さら聞けない人のためのGit超入門 2020/12/19
今さら聞けない人のためのGit超入門 2020/12/19
 
1分で分かるdeveloperWorks Premium
1分で分かるdeveloperWorks Premium1分で分かるdeveloperWorks Premium
1分で分かるdeveloperWorks Premium
 
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイPlaybay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイ
 
パワーユーザー必携の海外の拡張機能20選+α
パワーユーザー必携の海外の拡張機能20選+αパワーユーザー必携の海外の拡張機能20選+α
パワーユーザー必携の海外の拡張機能20選+α
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
 
ペアプロはリモートでもできる!
ペアプロはリモートでもできる!ペアプロはリモートでもできる!
ペアプロはリモートでもできる!
 
Embedded Webで加速するWeb of Things
Embedded Webで加速するWeb of ThingsEmbedded Webで加速するWeb of Things
Embedded Webで加速するWeb of Things
 

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