2014年9月23日火曜日

Redmineの用語とフィールド表示位置をカスタマイズなう(ついでに注記をチケット一覧に表示)

自社の用語や項目順に合わせ、Redmineの表示をカスタマイズした。
Redmineの中のファイルを改造しまくった。





言語ファイルの改造


チケットとかトラッカーとかプロジェクトとかステータスとか。
そんなプログラマー君たちの用語は世の中の辞書にない。
世の中で通用する用語へすべて書き換えた:
  • チケット -> 仕事
  • トラッカー -> 方式
  • プロジェクト -> 発注元(発注元別にプロジェクトを作っているので)
  • ステータス -> 状況

Noteを「注記」と訳しているのも、いかにもいいかげんな訳だ。
マニュアル類だったらそれでよい。
だがその他の世界ではそんな杓子定規な対応では通用しない。
noteという英単語を見ればなんでも注記と訳してしまうのは二重の意味でマニュアル脳だ。
まるで、Iという英単語を見たらなんでも私と訳してしまうようなものだ。
翻訳者が人間である意味がない。
noteという英単語には連絡事項という意味もある:
  • 注記 -> 連絡事項

「説明」「期日」というのもまだ、業務システムとしてしっくりこない訳語だ。
訳したひとは、日本人との業務経験がないのではないかという気がする:
  • 説明 -> 指示
  • 期日 -> 納期

その他、社内の用語などに合わせてちょこちょこ変更した。
神は細部に宿る。
用語にちょっとでも違和感があれば、ユーザーが使ってくれない可能性は飛躍的に上がる。



ビューの改造


チケットの登録・更新画面と閲覧画面において各項目の表示位置を変えるのは、簡単かとおもっていた。
が、けっこう面倒だった。
理由は:
  • 画面が細分化されてあっちゃこっちゃの部分テンプレートやらヘルパやらに入っていた
  • 標準フィールドとカスタムフィールドはアクセスのしかたがまるで別
  • 二段組にフィールドを割り振っていくコードの作法も標準フィールドとカスタムフィールドでなぜかまるで違っていた

RubyやRailsまるでわかってないのでまるまる半日かかった。

とくに、つい昨日までCoffeeScript書いてたので、細かい言語仕様の違いに気づかず書いてしまったり。

が、なんとかできた。

Subjectも表示上見出しとせず単なる一項目扱いとした。

既存の発注手順で送られている項目順とまったく同じにすることができた。

チケットIDを抹殺


チケットIDが単純通し番号で振られていくのも、笑っちゃうくらい何の役にも立たない。
「この番号は何?」という無用の疑問も招く。
「この仕事は、8月25日の1番目の仕事から数えて何番目の仕事です」
という情報にいったい何の意味があるか?
いっさい表示されなくした。

当社の実業務では、仕事は発注日-No.で参照される。
No.は日内番号である。
IRCからコミットするしくみを作る際にもそれを指定させるようにすればよい。
それで一意になる。
当日の仕事であれば日付を省いて指定できるようにもできる。

注記をチケット一覧に表示


ついでに、注記がチケット一覧に表示されるようにした。



http://reco-memo.blogspot.com/2014/03/redmine.html
を参考にさせていただいた。
ただし、列に表示させるのではなく、見やすいよう、説明同様、チェックボックスの右から表右端までをセル連結して表示するようにした。
それと、見やすいよう、各注記の間に水平線が入るようにした。

具体的には、まず、issues_helper.rbにメソッドを追加した:
  def hirota_issue_notes(id)
    oNotes = Journal.find(:all, :conditions => ["journalized_id= ?", id], :order => "created_on").map(&:notes).uniq
    sNotes = ""
    oNotes.each do |sNote|
      if sNote && '' < sNote
        sNotes << "<hr />#{sNote}<br />"
      end
    end
    sNotes.gsub(/-.*-/,'<del>\&</del>').gsub(/\r\n|\r|\n/, "<br />").html_safe
  end

俺が改修した部分が泥臭すぎる件について。
こんな泥臭い、しかもハンガリアンなコードを書いていて、Railsコミュニティに入れないことはわかっている。
動けばええやんプログラムやし!
保守性?
こんな泥臭いコードならたぶんどの言語から来たひとも一目瞭然保守できるよねって意味では保守性ありまくりとも言える(強弁)。

なんでこんな改修が必要だったかというと、
Journal.findすると、謎の空文字列入り要素とか、謎のnil入り要素がけっこう採れるのだ。
注記が1個しかないチケットなのに、戻り値の要素が3個とかあったりする。
水平線が無駄にたくさんできてしまうので、そういうのを排除。

そして、_list.html.erbの冒頭近くの
  <% issue_list(issues) do |issue, level| -%>
が末尾近くで
  <% end -%>
によって閉じられている、このendの直前に
  <tr class="even">
    <td colspan="<%= @query.inline_columns.size %>" class="description"><%= hirota_issue_notes(issue.id) %></td>
  </tr>
を挿入した。

腹減ってきたので、evenと決め打ちしてしまった。
ほんとは、issue_list(issues)ループ内で<tr>をカウントするカウンタを作ればベターだね。

Redmine 2.5.2。

0 件のコメント:

コメントを投稿