これからの Redmine に期待すること
Redmine Advent Calendar 2022 の 20 日目となる記事です。「これからの Redmine に期待すること」を書きます。
Storybook 公式化
Redmine のテーマを開発する方法は大まかに以下がある。
- 標準 CSS を import して上書き
- CSS の定義が後勝ちとなることを利用して、上書きしたいスタイルを追記する
- 標準 CSS に対する差分となるため、Redmine が更新されても壊れにくい
- かわりに大胆な変更は難しい
- フルスクラッチ
- 標準 CSS を import せず、自前でスタイルを定義する
- Redmine 更新により壊れやすい
- かわりに大胆な変更も容易...というより変更量が増えたら差分定義の意味が薄れるため、おのずとこの方法になる
私の開発している minimalflat2 は文字サイズの em/rem 化やアイコンのベクター化 (アイコンフォント利用) により変更量が膨大なため、フルスクラッチを採用。デメリットの壊れやすさについては対応した Redmine バージョンの標準 CSS を保存しておき、更新の際はこれと最新版の差分をテーマ CSS に反映している。
これでなんとか運用できているのだが、残念なことに変更箇所を把握しきれていない。Redmine は CSS 定義に関するドキュメントを提供しておらず、セレクターや大まかなコメントから類推することになる。そのため既にどこか壊れている可能性も否めない。
とはいえ Redmine の開発リソース的にドキュメント提供は難しいだろう。理想はバックエンドが認証と API だけを提供し、それに基づいて自由にフロントエンド開発することだが、これも大きなアーキテクチャー変更と莫大な開発コストを要するので厳しいと思われる。
そんなモヤモヤをかかえて幾年月、redmine.tokyo 23 ですばらしい登壇があった。Redmine テーマを開発するにあたり、なんと標準テーマの Storybook を開発したというのだ。これは標準テーマの UI カタログを提供することに等しい。
- LT 今こそ、Redmine の UX / UI を考える - Speaker Deck
- redmine-theme/storybook
- Layout / Layout - Layout ⋅ Storybook
バックエンド、フロントエンド分離は難しいとしても、この Storybook を公式で運用してくれるならテーマ開発は圧倒的に楽になる。リポジトリーの public 配下に Redmine 本体の変更が反映されてゆけば、CSS 差分と Storybook の表示を見るだけで自分のテーマに必要な変更点を把握しやすい。少なくともバージョン間の CSS 差分をみて「お祈り的に」更新するよりも遥かに安全だ。
というわけで Redmine へ期待することは、この Storybook の公式化である。
リポジトリーの設計的に標準 CSS をそのまま格納しているのもよい。この方法なら公式と明言せずとも Redmine 更新にあわせて第三者が CSS 反映してゆく運用でもよさそうだ。私も協力したい。とりあえず redmine.org の Wiki にリンクするのはどうだろうか。
外部サービス連携
今年から ITS として Asana も利用するようになった。
はじめは Redmine との違いに戸惑ったものの、慣れてくると Asana のよさが見えてきた。その中でも特に素晴らしく、Redmine へ導入したら受けそうな機能として外部サービス連携がある。これは Redmine でいう WebHook に相当するのだが、違いはよく使われるサービスの膨大なプリセットを提供していること。
ユーザーが連携したいサービスをプリセットから選び、認証設定ページから許可すれば使い始められる。基本的に GUI で完結してスクリプトを書く必要がないのは非常に楽。
これをなぜ Redmine へ導入してほしいかというと、せっかく WebHook という便利機能があっても自分でスクリプトを書くハードルが高く、限られたユーザーしか活用できていないと思うから。
もうひとつ、ソフトウェア開発者からの Redmine 要望によくある GitHub の PR (Pull Request) 対応もこの機能でこたえられそうだ。Asana も Redmine と同様に PR 機能はないのだが、GitHub 連携で十分と感じる。連携といっても特別なことをしているわけではなく、単に Asana チケットで PR の URL を入力すると、PR 側のコメントにチケットのリンクが追加されるだけだ。
チケットと PR が相互リンクされるだけでも十分に実用的。タスクの進行管理は ITS である Asana 側、コードに関する作業は GitHub の PR という棲み分けにもなってよい。
Redmine も WebHook のプリセットを提供し、そこに GitHub を含めるのはどうだろうか。あわせて Slack もあると多くのユーザーに喜ばれそうだ。
ちなみに Asana は個人で無料プランを試せる。本記事のスクリーンショットも個人のほうで撮った。Redmine と比較して外部サービス連携を前提とした割り切り具合とか、タスクまわりの操作感なんかが面白いので触ってみることをオススメする。