Top Banner
Redmine4時代の プラグイン開発 強いプラグインを開発しよう Agileware Inc. Sho DOUHASHI
73

Redmine4時代のプラグイン開発 redmine.tokyo #13

Jan 21, 2018

Download

Engineering

Sho Douhashi
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Redmine4時代のプラグイン開発 redmine.tokyo #13

Redmine4時代のプラグイン開発強いプラグインを開発しよう

Agileware Inc. Sho DOUHASHI

Page 2: Redmine4時代のプラグイン開発 redmine.tokyo #13

自己紹介

Page 3: Redmine4時代のプラグイン開発 redmine.tokyo #13

自己紹介

堂端翔 ( Sho DOUHASHI )

facebook.com/douhashi

twitter @douhashi

Agileware Inc. CTO

プログラミング歴20年弱。最近はインフラ屋さん。AWS大

好き。

Page 4: Redmine4時代のプラグイン開発 redmine.tokyo #13

Agileware?

http://agileware.jp

Ruby/Railsを得意とするソフトウェアベンダー。

Redmineプラグイン「LycheeRedmine」シリーズを開発。

https://lychee-redmine.jp/

Page 5: Redmine4時代のプラグイン開発 redmine.tokyo #13

突然ですが、アンケート

Page 6: Redmine4時代のプラグイン開発 redmine.tokyo #13

Q1. Redmineバージョンいくつですか?

Page 7: Redmine4時代のプラグイン開発 redmine.tokyo #13

Q2. Redmineプラグイン使ってますか?

Page 8: Redmine4時代のプラグイン開発 redmine.tokyo #13

Q3. 独自のプラグインを開発して使ってますか?

Page 9: Redmine4時代のプラグイン開発 redmine.tokyo #13

ご協力ありがとうございます!

Page 10: Redmine4時代のプラグイン開発 redmine.tokyo #13

今日はRedmineのプラグイン開発についてお話します

Page 11: Redmine4時代のプラグイン開発 redmine.tokyo #13

本日のアジェンダ

Page 12: Redmine4時代のプラグイン開発 redmine.tokyo #13

本日のアジェンダ

1. RedmineとRailsの関係

2. 強いプラグインの開発方

3. Redmine 4.x 時代のプラグイン開発 (ダークサイド)

4. Redmine 4.x 時代のプラグイン開発 (ライトサイド)

5. まとめ

Page 13: Redmine4時代のプラグイン開発 redmine.tokyo #13

本日のアジェンダ

1. RedmineとRailsの関係

2. 強いプラグインの開発方

3. Redmine 4.x 時代のプラグイン開発 (ダークサイド)

4. Redmine 4.x 時代のプラグイン開発 (ライトサイド)

5. まとめ

Page 14: Redmine4時代のプラグイン開発 redmine.tokyo #13

RedmineとRailsの関係

Page 15: Redmine4時代のプラグイン開発 redmine.tokyo #13

の前に、

Page 16: Redmine4時代のプラグイン開発 redmine.tokyo #13

Railsのリリース傾向の話

Page 17: Redmine4時代のプラグイン開発 redmine.tokyo #13

Railsの(だいたいの)リリース傾向

● だいたい、3年スパンでメジャーが上がる

● だいたい、.0系(2.0, 3.0, 4.0)はアップデートを促すための

過渡期リリース

● だいたい、.0系リリースは旧バージョンへのDeplication

Warningを出して、その後のリリースで削除してく

● だいたい、.1 とか .2でドラスティックな機能追加、API

削除が入る

Page 18: Redmine4時代のプラグイン開発 redmine.tokyo #13

その上で、RedmineとRailsのバージョンの関係をみていきましょう。

Page 19: Redmine4時代のプラグイン開発 redmine.tokyo #13

RedmineとRailsの関係

● Redmine 2.0 ~

○ Rails 3.2系

● Redmine 3.0 ~

○ Rails 4.2 系

Page 20: Redmine4時代のプラグイン開発 redmine.tokyo #13

おわかりいただけただろうか...

Page 21: Redmine4時代のプラグイン開発 redmine.tokyo #13

RedmineとRailsの関係

● Redmine 2.0 ~

○ Rails 3.2系● Redmine 3.0 ~

○ Rails 4.2系

Page 22: Redmine4時代のプラグイン開発 redmine.tokyo #13

ド、ドラスティック...

ドラスティック【drastic】

(形動)

徹底的で激烈なさま。「政治情勢は-に展開している」「-な変

化」

Page 23: Redmine4時代のプラグイン開発 redmine.tokyo #13

なので、

Page 24: Redmine4時代のプラグイン開発 redmine.tokyo #13

Redmineプラグインあるある

Page 25: Redmine4時代のプラグイン開発 redmine.tokyo #13

新バージョンでいきなりデスる

Page 26: Redmine4時代のプラグイン開発 redmine.tokyo #13

解決策(びっくりしないために)

Page 27: Redmine4時代のプラグイン開発 redmine.tokyo #13

次リリースブランチでも動かそう

● 次期リリースバージョンのRedmineで動かしておこう。

● 毎度動かすのは大変なのでテスト書こう。

● 特に、Railsのメジャーが上がるときは覚悟しておこう。

Page 28: Redmine4時代のプラグイン開発 redmine.tokyo #13

その他にも「強い」プラグインを作る工夫は色々

Page 29: Redmine4時代のプラグイン開発 redmine.tokyo #13

ということで、次の話題

Page 30: Redmine4時代のプラグイン開発 redmine.tokyo #13

本日のアジェンダ

1. RedmineとRailsの関係

2. 強いプラグインの開発方

3. Redmine 4.x 時代のプラグイン開発 (ダークサイド)

4. Redmine 4.x 時代のプラグイン開発 (ライトサイド)

5. まとめ

Page 31: Redmine4時代のプラグイン開発 redmine.tokyo #13

弊社で実践しているプラグイン開発の仕方

Page 32: Redmine4時代のプラグイン開発 redmine.tokyo #13

ルールその1本体のDBにカラム追加/変更しない

Page 33: Redmine4時代のプラグイン開発 redmine.tokyo #13

本体のDBにカラム追加/変更しない

Page 34: Redmine4時代のプラグイン開発 redmine.tokyo #13

本体のDBにカラム追加/変更しない

● 本体DBに直接カラム追加しないことで、Redmine本体へ

の侵食を減らす

○ 本体側で同等機能が追加されてもバッティングしない

○ Redmine本体のバージョンアップを妨げない

○ 他のプラグインの動作を妨げない

Page 35: Redmine4時代のプラグイン開発 redmine.tokyo #13

ルールその2

開発時必要なGemはGemfile.localに書く(= Gemfileは最小限に留める)

Page 36: Redmine4時代のプラグイン開発 redmine.tokyo #13

プラグインあるある

● たまーに、Gemfileにバージョン指定して書いてあるプラ

グインがいる

○ 同じGemを違うバージョン指定でいれようとする

=> bundleできなくてデスる☠

=> コレ、テスト用のGemとかで非常に多い

Page 37: Redmine4時代のプラグイン開発 redmine.tokyo #13

開発時のみ必要なGemはGemfile.localに書く

● Gemfile.localに書いて、Redmine本体直下へsymlink

● Gemfileには「プラグインに必ず必要なGemのみ」書く

○ これでGemがバッティングする可能性を減らせる

○ それでもたまーにバッティングするので、その時は

githubでissueをあげてみましょう

Page 38: Redmine4時代のプラグイン開発 redmine.tokyo #13

弊社のGemfile.local

Page 39: Redmine4時代のプラグイン開発 redmine.tokyo #13

ルールその3

テストはRSpecで書く

Page 40: Redmine4時代のプラグイン開発 redmine.tokyo #13

プラグインあるある

● Redmine標準はMinitestベース

○ テストデータはfixturesで作られてる

=> 正直、fixturesでかすぎて覚えてられない。

=> setupに必要な情報が多すぎる

Page 41: Redmine4時代のプラグイン開発 redmine.tokyo #13

テストはRspecで書く

● RSpec、FactoryBotで書く

● 画面系はcapybaraでE2Eテスト

○ controllerのテストは労力に見合わないかも

=> Factory書くのしんどいけど、一回書けば使い回しできる

Page 42: Redmine4時代のプラグイン開発 redmine.tokyo #13

他にも細かいTipsはいろいろあります

Page 43: Redmine4時代のプラグイン開発 redmine.tokyo #13

細かいTips

● Rubocopいれてコードをキレイに保つ

● init.rbにはあんまり処理を実装しない

● モンキーパッチは最小限に

などなど...

Page 44: Redmine4時代のプラグイン開発 redmine.tokyo #13

語り尽くせないほどあるので、とっ捕まえて聞いてください...

Page 45: Redmine4時代のプラグイン開発 redmine.tokyo #13

次の話題

Page 46: Redmine4時代のプラグイン開発 redmine.tokyo #13

本日のアジェンダ

1. RedmineとRailsの関係

2. 強いプラグインの開発方

3. Redmine 4.x 時代のプラグイン開発 (ダークサイド)

4. Redmine 4.x 時代のプラグイン開発 (ライトサイド)

5. まとめ

Page 47: Redmine4時代のプラグイン開発 redmine.tokyo #13

いよいよ、Redmine4.0が見えてきました

Page 48: Redmine4時代のプラグイン開発 redmine.tokyo #13

Redmine 4.0開発状況

Page 49: Redmine4時代のプラグイン開発 redmine.tokyo #13

Redmine 4.0の目玉はやっぱり

Page 50: Redmine4時代のプラグイン開発 redmine.tokyo #13

Rails 5.x 対応!

Page 51: Redmine4時代のプラグイン開発 redmine.tokyo #13

Redmine4.0のRailsバージョンは...

Page 52: Redmine4時代のプラグイン開発 redmine.tokyo #13
Page 53: Redmine4時代のプラグイン開発 redmine.tokyo #13

ド、ドラ(ryドラスティック【drastic】

(形動)

徹底的で激烈なさま。「政治情勢は-に展開している」「-な変

化」

Page 54: Redmine4時代のプラグイン開発 redmine.tokyo #13

いろんなプラグインの悲鳴が聞こえる

Page 55: Redmine4時代のプラグイン開発 redmine.tokyo #13

Rails 5で消えるAPI (影響度の大きそうなもの)

1. before_filter / after_filter (4.x時点でDeplication)

○ 歴史の古いプラグインはそのままのことが多い

2. alias_method_chain

○ Redmineの標準動作を書き換えるときの常套手段

○ お世話になってる人多いはず

Page 56: Redmine4時代のプラグイン開発 redmine.tokyo #13

対策

Page 57: Redmine4時代のプラグイン開発 redmine.tokyo #13

Rails 5対応

1. before_filter / after_filter (4.x時点でDeplication)

○ before_action / after_action を使う

2. alias_method_chain

○ Module#prepend (Ruby 2.0からの標準機能)を使う

○ https://docs.ruby-

lang.org/ja/latest/method/Module/i/prepend.html

Page 58: Redmine4時代のプラグイン開発 redmine.tokyo #13

ただし、一個問題が。

Page 59: Redmine4時代のプラグイン開発 redmine.tokyo #13

問題: Redmine 3.x系との共存

Page 60: Redmine4時代のプラグイン開発 redmine.tokyo #13

課題: Redmine 3.xとの共存

1. Redmine 3.x は ruby 1.9.3 もサポートしている

○ つまり、ruby 2.0.0 からの Module#prepand が使えな

=> コード内にバージョン判別書くのはしんどい...

=> しばらくbranch分けるとかで様子見か...?

Page 61: Redmine4時代のプラグイン開発 redmine.tokyo #13

こんな、後ろ向きな話ばかりじゃないよ

Page 62: Redmine4時代のプラグイン開発 redmine.tokyo #13

本日のアジェンダ

1. RedmineとRailsの関係

2. 強いプラグインの開発方

3. Redmine 4.x 時代のプラグイン開発 (ダークサイド)

4. Redmine 4.x 時代のプラグイン開発 (ライトサイド)

5. まとめ

Page 63: Redmine4時代のプラグイン開発 redmine.tokyo #13

Rails 5.1の目玉機能

Page 64: Redmine4時代のプラグイン開発 redmine.tokyo #13

ActionCable!

Page 65: Redmine4時代のプラグイン開発 redmine.tokyo #13

ActionCableって?

1. Rails上でWebSocket通信を実現するためのライブラリ

2. ソケット通信のように双方向の通信がリアルタイムで行

えるので、よりインタラクティブなプラグインが作れる

Page 66: Redmine4時代のプラグイン開発 redmine.tokyo #13

例えば...

Page 67: Redmine4時代のプラグイン開発 redmine.tokyo #13

Redmine上にチャットシステム導入!

Page 68: Redmine4時代のプラグイン開発 redmine.tokyo #13

例えば...

Page 69: Redmine4時代のプラグイン開発 redmine.tokyo #13

チケット更新のリアルタイム通知!

Page 70: Redmine4時代のプラグイン開発 redmine.tokyo #13

夢が広がりますね!

Page 71: Redmine4時代のプラグイン開発 redmine.tokyo #13

本日のアジェンダ

1. RedmineとRailsの関係

2. 強いプラグインの開発方

3. Redmine 4.x 時代のプラグイン開発 (ダークサイド)

4. Redmine 4.x 時代のプラグイン開発 (ライトサイド)

5. まとめ

Page 72: Redmine4時代のプラグイン開発 redmine.tokyo #13

まとめ

1. Redmineはドラスティックに変わる

○ 強いプラグインの開発が大事

2. Redmine 4.x でもドラスティックに変わる

○ 旧バージョンとの共存が課題

○ Rails5のおかげで夢が広がる!

Page 73: Redmine4時代のプラグイン開発 redmine.tokyo #13

ご清聴ありがとうございました