Funny Walking

人の個性への好奇心

【Redmineに苦しめられる】業務の振り返り - 2019/07 2回目

ふりかえり。7/15 ~ 7/19

今週は連休入りから原因不明の腹痛に悩まされ、明けてからも2日ほど伏せっていた。梅雨のせいもあるだろうが、体調管理は気を付けたい(が、具体的に何を気を付けようか、となると、睡眠時間の確保と、根を詰めないようにすることくらいしか思い浮かばない)。

DB操作の強い味方を発見

床に臥せっていても、現場のDB環境があまりよろしくないために気になっており、Webrickのデータ閲覧機能だけでは物足りなくなっていた。DBのIDEとしていろいろ試していたところ、DBeaverというツールを見つけた。

qiita.com

データ編集の利便性、UIの分かりやすさ、日本語対応、ER図の自動生成、など、便利で生産性が高いツールなのでしばらくこちらを使うことにした。このツールの良いところは、外部キー制約の定義されたカラムへ編集をしようとすると、参照先のデータをドロップダウンで見られることだ。これは地味に嬉しい。

というわけで、こちらのツールをしばらく使っていこうと思う。

Redmineとの戦争

Redmineソースコードを相変わらず読み込む日々が続く。Redmine自体はRuby on Railsで書かれている。しかし、active_record単体で読み込んでrubyコマンドを実行させようとすると、不具合があった。

DBデータを読み出すときの不具合である。 Redmineはチケット管理システムであるため、発行したチケットが多くなってきたときには一覧検索だけでは追い付かない。そこで、フィルタ条件を独自に追加し、保存しておくことで、必要なカテゴリのチケットをすばやく検索できる機能が備わっている。これを「カスタムクエリ」という。

今回の案件では、DBに保存されたカスタムクエリのデータへ手を加えなければならない。しかし、データの格納のされ方が、YAML形式のテキスト(varchar)で格納されているのだ。それを、IssueQueryというモデルクラス経由で取得すると、プログラムで扱いやすいhash形式にできる、という類のデータなのである。

rails consoleコマンドでirbを立ち上げ、そこからモデル経由でデータを読み出すとhashになってくれるが、active_record単体を読み込み、rubyコマンドを使って実行すると、モデルクラス経由で取得したデータがhash形式にならない。単なるYAML形式のテキストのまま出力される。これで困っている。

rails runnerで起動すれば、railsアプリケーションを起動しつつバッチファイルを実行できるので、最終的な解決策としてはアリだと思うが、そうならずともactive_record単体で実行できたほうが、Redmineの動きを理解するうえでは後の為に役に立つだろう。

モデルクラスを覗いてみると、YAMLデータをパースする処理らしきものは書かれていない。だからモデル単体ではなく、モデルに紐づいたヘルパーメソッドなり、何なりが処理しているはずだ。現場担当者に聞いたところ、カスタムクエリの仕様はRedmineのメジャーバージョンが2から3に変わったときに最も大きく変化した部分でもあるらしい。だからモデルクラスに最初から定義されていないのも、なんとなくだがうなずける。フックのような機能だといえるし。

ともかく、Railsのアプリケーションロードの順序と、モデルクラスの周辺知識を得なければ、解決はしない問題だろう。来週はそこらへんを中心に進めてゆく方針である。