ひさびさに機能追加しましたよ!Redmine Issue Templates Plugin v0.3.1を出しました。
みなさんこんにちは!はてなの記事、25件めになります。
実は、コツコツ作っているRedmineのプラグイン、あまり「リリースしましたー」というのをブログに書いたことがありません。
だいたいTwitterと本家に投稿するくらいなのですが、今回は久しぶりにテーブル追加が入ったので、記録しておこうと思います。
そもそものきっかけ
Redmine Issue Templates pluginは、着手し始めてからもう7年近く!になります。
本家に登録してからのChangelogを眺めると、時間はかけていますが、色々調整していったのがわかります...。
さて、このプラグインは、そもそもはチケットの本文にテンプレートを差し込めるというもの。狙いは「メールで回っているワークフローをチケットに置き換えたい」というところからでした。
最初はヒアリングで「カスタムフィールド追加すればいいかな」と思っていたのですが、
- メールがフリーフォーマットで柔軟性が高い分、なかなかチケットに置き換えにくいところがある
- 必ず「カスタムフィールドを追加して」といった依頼が出てくる
- 全部対応すると、申請系の項目なんて毎回変わったりするので、管理者の作業が追いつかないし、フィールドを作っても、それが適切に利用されるかがわからない
- トラッカーも増える
という状況になってきました。わたしは面倒臭がりやなのと、この細かい設定を考えていったら、いつまでもチケットベースに乗らないだろうという気がしていたので、とにかく「メールの置き換えなんだからメールの申請フォーマットをそのまま貼り付ける」だけを第一目標にしました。
テンプレは返信側にも必要
さて、今回の機能追加は、「コメント(注記)」に対するテンプレートの適用です。
申請系ではなくて、サポート依頼の場合などは、おそらく最初はお客様からの「助けて」的な短いメッセージが多いかと思います。
そちらの要望を汲み取るために、返信の際に「これこれこういうことを伺いたい」という、サポート側としてのテンプレートがあるかと思います。
また、クロージングの際のメッセージなども、ある程度一定の文ではないでしょうか。
実は、わたしはRedmineは使う前に、サポート用チケットシステムを内製しており、こちらには「テンプレート機能」を実装していました。
また、Redmineのように本文があってコメントが続く...というのではなく、同等のメッセージが続く形式だったので、テンプレートはどの場合でも利用できるようになっていました。とくに「サポート側からお客様への返信の際のテンプレート」を色々と登録していました。
この経験があったので、「コメントにもテンプレは必要だなあ」と、ぼんやりと考えていました。
さて、何年かRedmineと関わって、プラグインを使っていただくことも増えてくると、やはり「返信にテンプレートを使いたい」というリクエストも頂くようになりました。
できなかった理由
作り上げる気力とスキルが足りなかったのが一番だとは思います...。
最初のころは、見よう見まねで作っていたので、Redmine 1系から2系へのバージョンアップだけで、瀕死の痛手でした。
ただし、その時点では職場でも使っていたので、わたしが対応しないと会社のRedmineのバージョンが上げられません。必要に迫られて、プラグインのバージョンアップ対応をしました。
その後少しずつRedmineのリリースサイクルに慣れて行き、なんとか対応しつつ機能を増やしていきました。
それでもやはり失敗は多かったのですが、転職を踏まえてRailsを扱う現場に入ったこと、テストも重視するスタイルに変えたおかげで、Redmine 3.2系から先の対応が、グッと楽になってきました。
この期間に、Rails4, Rails5双方のアプリケーションを見ていたので、Redmine4 (Rails5)対応も早めには取り掛かっていました。
ただし、なかなかRedmine4がリリースされなかったので、大きな変更は加えにくく、この期間での「コメント用テンプレート」の対応は無理でした...。
モチベーションの維持と密接に関わっている
もう一つ、正直な気持ちを書いておきます。
機能の追加は、モチベーションの維持が無いと出来ません。
Redmineを使う現場から離れてもう3年以上経ちますので、使っていない(自分自身が困っていない)ものに対して、「そこまでして改善する必要があるのか?」というモチベーションの維持が大変です。
「本当にこれは使われてるの?」「役に立ってるの?」という声もあまり聞こえてこないし、対応するとなると個人の時間を削ってなので、シビアに考えると割りに合いません。
それでも続けているのは、Redmineそのものへのモチベーションというよりは、小さくても開発を続けることで得られる知識、経験を踏まえてのことだったりします。
たとえば、Rails4 -> 5への移行でなにがあるかを把握する、新しいCIを使ってみる、フロントの動きや見た目を変えてみる、テストの書き方を変えてみる、E2Eテストを試してみるなど。
ソースコードをGitHubに置いているので、GitHubとそのエコシステムの連携なども、試してみやすいということもあります。
そうはいっても、v0.3.0を出して、大きめのRedmine4.x対応が終わったので、じつはそろそろ手を引こうとも考えていました。
今回のこころみ
とか言いつつ、今回0.3.1に乗り出したのは、ちょっとした悔しさからです。
まあそういうこともあるのです。
勢いで、今回は以下の対応をいたしました。
機能面:
- 返信(note もしくはコメント)フィールドに対するテンプレートを利用できるようにする
- チケットの新規作成だけでなく編集時にも、トラッカーに応じたテンプレートを本文に差し込むことができるようにする
(ただし、編集時に関しては、デフォルトテンプレートの指定があっても上書きをしてしまうわけにはいかないので、自動適用は行わない動きをしています)
裏側・テストなどの調整:
機能には直結しませんが、裏側も同じく調整しています。今回はNote Template用のテーブル追加もあるので、そのあたりから。
- テーブル追加
- テストコードの追加・調整・不要な箇所の削除
- ネイディブJavaScriptとCSSだけで対応できそうなところは、なるべくjQueryを使わずに対応する
また、毎回ですが、合わせてテストコード系の修正が多く入っています。
Rails5になると、minitestもrspecも少し書き方が変わります。
今回はNote Templateのコントローラに対しては、request specを取り入れるなど、ちょこちょこ入れ替えを行なっています。
コードだけではわかりにくいかと思いますが、プルダウンの表示などは、サーバ側のレスポンスを受けてJSで描画するといったこともあるので、E2Eのテストも差し込んでいます。
ここでは、「チケット編集時に編集画面にテンプレート選択のプルダウンが表示されるか」ということと、「同じくチケット編集時の返信フォームに、コメント用テンプレート選択のリンクが表示されるか」のチェックをしています。
(ポップアップしてクリックして適用、というテストも本当は必要なのですが、今回はここまで)
JSでの調整があると、ここまで試さないと(私自身)信用できないというのがそもそもの理由です....。
また、こちらに関しては、Qiitaにも関連する記事を上げておきました。
できあがったもの
とりあえず、v0.3.1としてリリースをしています。
今回もDockerで簡単に確認できるように、Dockerfile & docker-compose.yml を添えています。
Play with Dockerで動かせた、よかったよかったー😆#Redmine Issue Templateプラグインのコメント用テンプレートの作成と適用、チケット編集時のテンプレートの有効化の画面です。
— たかのあきこ@freeCodeCamp攻略中 (@akiko_pusu) 2019年3月7日
こんな感じになります!使えそうかな? pic.twitter.com/Cbiya70ACM
ただし、前回v0.3.0に上げてから今のところissueはそこまで上がってきていない様子を見ると、まだRedmine4系自体に移行しているところが少ないのかな、という気がしています。
フィードバックはもう少し様子を見ますが、1件ご要望をいただいたのでそこまではおそらく対応する予定です。
もちろん、入れてみた際に管理者さんが困らないように、テストもしっかりつけて参ります!合わせて、もう少し必要になる技術があれば、そこもカバーできるように精進するつもりです。
それ以降は、おそらくRedmine本体にテンプレート機能実装のissueが上がっているので、今度こそそちらにお任せして、手を放していけたらなあとは思います^^
とりあえず願っているもの
OSSということでRedmineに関わっていますが、わたしは実のところITS / BTS といったものにこだわりはなく、実際に色々使っていまして、どれも好きです。
「使う人が操作しやすい」「それとなく案内がある」「管理者でなくとも登録できる」「まずはメールを置き換えられる」というところを目指しているので、Redmine本体(もしくはRedmineでなくてもいろんなツール)にそういうものが提供されることが、一番の願いであったりします。