« Redmineに向いている組織はPJ型組織やマトリクス型組織ではないかという仮説 | トップページ | マイクロサービスアーキテクチャはなぜ最近になって注目されるのか~マイクロサービスは組織論の側面も持つ »

2016/08/13

ViewCustomizeプラグインでRedmineをマイクロコア化できるか

ViewCustomizeプラグインの使い道に関してメモ書き。

【参考】
Redmineのプラグイン「view customize plugin」のカスタマイズ例 - Qiita

onozaty/redmine-view-customize: View customize plugin for Redmine

onozaty/redmine-view-customize-scripts: Script list for "Redmine View Customize Plugin"

【1】ViewCustomizeプラグインは面白いプラグインだ。
CSS+JQueryを知っていれば、RedmineのUIを好きなように修正できる。

たとえば、「ある文字列を赤字にして強調したい」「背景色を変えたい」「障害チケットのテキストエリアを広げたい」「サポートチケットが起票されたら担当者はサポートユーザグループに設定したい」「二つのプルダウンリストの選択肢に制約を付けたい」などの場面に使える。

neta@とんこつしかたべないさんのツイート: "Redmine で特定PJのデフォルト期日を今日から10日後にする、できたぁああ! またこれで一つユーザ要望を叶えたので、社内Redmine導入が捗る。 ありがとう View customize plugin! https://t.co/BAJh8tEWKl"

ViewCustomizeプラグインのメリットは、他に、Redmineの再起動が不要な点だ。
また、画面UIの修正だけのプラグインをどんどん追加していくと、RedmineのVerUPも難しくなる。

つまり、画面UIの挙動を変えたいだけのプラグインを入れるよりも、ViewCustomizeプラグインで解決した方が、Redmineサーバーを再起動するなどの稼働時間を短縮させる必要もない。

ViewCustomizeプラグインが生まれた背景として、「個人が使っている Redmine用のステキなUserScriptをプロジェクト全員に適用できないか? 」という動機があったというのが興味を惹く。

【2】ViewCustomizeプラグインを使いこなせるようになれば、Redmineの画面UIをユーザが自分達の場面ごとに自由にカスタマイズできるようになる。

では、ViewCustomizeプラグインの発想を推し進めると、Redmineはどのように変化するのか?

【2-1】おそらく、RedmineをMVCモデルと捉えた時、RedmineはModel層を中心とした基盤であり、View層やController層はユーザが自由にカスタマイズできるような開発基盤として位置づけられるだろう。
つまり、Redmine自体はマイクロコアであり、画面UIや各機能は、マイクロサービスのように自分達で自由にコンポーネントやサービスを追加できるような開発基盤にできるのではないか。

このアイデアは、Redmineを開発基盤とみなせるのではないか、という考えで以前書いた。

Redmineのマイクロコア化は可能か~Redmineを開発基盤にして追加機能は着脱可能コンポーネントにできるか: プログラマの思索

u6k_yu1さんのツイート: "@u6k_yu1 思うにRedmineてマイクロコア化して構造を安定化して、プラグインで色々実現してくれた方が良いのではないかな。"

akipiiさんのツイート: "Redmine のマイクロコア化はそういう発想か。RT @forenoonM: 以前に「RedmineをMVC構造のModel層としてのみ使って、ViewとControllerを自前で作ってもいいかも」みたいな話を誰かが言っていたような。"

akipiiさんのツイート: "@u6k_yu1 RedmineをEclipseやiDempiereのように、Redmine本体は開発基盤としてVerUpしながらも、追加機能はプラグイン化で対応し、追加機能のプラグインは本体のVerUpに依存しないアーキテクチャが理想なんでしょうね。"

Redmineの裏の顔~開発基盤としてのRedmine: プログラマの思索

その頃のアイデアと違うのは、Redmineが提供する外部接続I/F、たとえば、REST APIやrakeやリポジトリ・メールのWebサービス、とは異なり、ViewCustomizeプラグインがRedmineのView層だけのカスタマイズに特化している点だ。

この特徴は、今後のRedmineの発展に役立つのではないか、と想像する。
なぜなら、Redmineの画面UIは誕生当初から十年近くほとんど変わっていないため、そろそろ現代風なUIに変えたいというユーザの要望が多いので、その実現に役立つのではないか、と思うからだ。

たとえば、JenkinsもVer2で画面UIを一新し、今風のUIで再構築しようとしている。
同様に、Redmineも今後のバージョンでは、もっとリッチで使いやすいUIにできるはず。

JenkinsのUXをモダンにする新プロジェクト「Blue Ocean」登場。統一的デザインのためのJenkins Design Language(JDL)も開発中 - Publickey

その時に、ViewCustomizeプラグインのような発想で、基盤としては核(コア)となる画面UIの骨格をCSSやJS、Railsのフック処理として作る。
ユーザは、基盤として提供されたView層の核(コア)はいじらず、核が提供する骨格をAPIとして認識して、画面UIを自分達の現場に合わせてカスタマイズすればいい。

つまり、ViewCustomizeプラグインは、Redmineの画面UIをカスタマイズする一つのマイクロサービスとして捉えれば良い。

【2-2】この発想をさらに推し進めると、どうなるか?
おそらく、Redmineの画面UIだけでなく、Redmineの各機能も開発基盤の核を提供して、ユーザが自由にカスタマイズできるように、マイクロサービス化できればなお良い。

実際、RubyやRailsはフック処理に別の処理を挿入する黒魔術のメタプログラミングが得意なのだから、Redmine自体がマイクロコアという開発基盤を提供できればよい。

そして、ViewCustomizeプラグインと同様に、Redmineを再起動しなくても、機能を自由に追加できればよい。

【2-3】では、Redmineのマイクロサービスはどのように実現できるのか?

一つのアイデアは、ViewCustomizeプラグインと同様に、Redmineの設定画面上にスクリプトを書いて実行できるようにすることだろう。

たとえば、Redmineのワークフロー管理機能に分岐やロジックを追加するプラグインredmine_custom_workflows: プログラマの思索のようなプラグインで既に実現できている。

Custom Workflows - Plugins - Redmine

anteo/redmine_custom_workflows: Allows to create custom workflows for Redmine

custom_workflowsプラグインもなかなか面白い。
ワークフローの中で、分岐や特定の処理を入れることができるのだ。
たとえば、「完了ステータス時に、進捗率を100%にして、期日に更新した日を設定する」という処理は、redmine_issue_completionプラグインで実現できるが、custom_workflowsプラグインでも同様に簡単に実現できる。

Redmineチケットの完了時に進捗率と期日を自動更新するプラグインredmine_issue_completion: プログラマの思索

他にも、稟議トラッカーでは、経費カスタムフィールドの値が20万円以上なら、部長承認が必要だが、20万円以下なら部長承認は不要、などの分岐条件も簡単にスクリプトをcustom_workflowsプラグイン上に設定できる。

このような発想を推し進めれば、他の機能も同様に、ユーザが設定画面でスクリプトを書く方法で修正可能になるはず。

【2-4】さらに、ViewCustomizeプラグインやcustom_workflowsプラグインでいくつかの独自スクリプトを設定した場合、それら独自スクリプトをXML出力したり、XMLをインポートするような機能があれば良いかなと思う。

つまり、画面UIカスマイズやワークフローカスタマイズの独自スクリプトは、DBに保存するだけでなく、XMLで保存できたり、インポートできる機能を設けることで、それら設定情報(XML)をシステム移行やデータ移行で流用したり、他の会社でも使えるようなベストプラクティスのテンプレートとして流用したいのだ。

【2-5】但し、ViewCustomizeプラグインやcustom_workflowsプラグインのデメリットもあるだろう。
デメリットとしては、カスタマイズされるソースがプラグインのDBに埋め込まれているため、プログラム単体ではどの機能がカスタマイズされたのか分かりにくいことだ。
特に、システム移行やVerUp作業時に、これらプラグインでカスタマイズした内容も考慮に入れておく必要があるだろう。

【3】とはいえ、Redmineを開発基盤として捉え直し、ちょっとした機能追加はViewCustomizeプラグインやcustom_workflowsプラグインで対応する方法は、マイクロサービスやマイクロコアという最近のアーキテクチャ設計の流れに対応しているように思える。

この辺りのアイデアも色々考えてみる。

|

« Redmineに向いている組織はPJ型組織やマトリクス型組織ではないかという仮説 | トップページ | マイクロサービスアーキテクチャはなぜ最近になって注目されるのか~マイクロサービスは組織論の側面も持つ »

Redmine」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« Redmineに向いている組織はPJ型組織やマトリクス型組織ではないかという仮説 | トップページ | マイクロサービスアーキテクチャはなぜ最近になって注目されるのか~マイクロサービスは組織論の側面も持つ »