社内で「Redmineのカスタムフィールドのリンクに入力した値が右上の検索ボックスで検索に引っ掛からない」という問い合わせを受けました。Redmineのバージョンは3.3.2です。

私はカスタムフィールドに入力した値は無条件で検索対象になると思い込んでたのですが、どうもカスタムフィールドの設定で対象にしないといけなかったようで…

カスタムフィールドの値を検索できるようにする

ところが、今回問い合わせを受けた「書式がリンク」のものはこの設定項目が表示されません。

対応


custom_fieldsテーブルのsearchableの値を1に変更すると、画面上で設定できない書式でも検索対象にすることができます。(検索対象外のものは0)例えば、今回のリンク形式のカスタムフィールドのidを確認したいならこんな感じ。

1
select id from custom_fields where field_format = 'link';

後は、確認したidを条件にしてupdate文でsearchable1にするだけ。

1
update custom_fields set searchable = 1 where id in ('1','2');

追記 2017/09/07

今回の対応を行っても、カスタムフィールドの設定画面から更新を行うと、都度検索対象外(custom_fields.searchable0)に更新されるというのが解りました…。カスタムフィールド更新時は都度DBを手動で更新するか、定期的に更新するとか、Redmineのコードを修正するとか、そういった対応が必要になります。

なぜリンクは検索対象に設定できないの?


なんで検索対象に設定できないのか公式のRedmineのチケットとかをサラッと見たんですけど(ホントにサラッとしか見てない)理由が解りませんでした。他に設定できない書式として「真偽値・リスト・キーバリューリスト…など」もあるんですが、これらはそもそも検索対象にする需要がない(想定されていない)と思うので、たぶん設定できないようにしてるというのは解るんですが…

あとは何らかのセキュリティ的な理由があるのかなぁ…とか思ったんですが、書式をリンクにしたカスタムフィールドの値はcustom_valuesvaluesにユーザーが入力した値のみ(値に設定するリンクURLで設定したURLは含まれない)が格納されているだけであって、その値を検索しているだけのようなので変更しても特に問題ないかな…と。そもそも弊社の場合、社内からしかアクセスできないようにしてますし…

従って、単純に「書式がリンクのものを検索対象とする」というのが想定されていないんじゃないのかなぁ…と思いました。

ちなみに…


前述の通り、書式がリンクのものはcustom_valuesvaluesにユーザーが入力した値のみ格納されているので、searchable1に変更しても検索時に「値に設定するリンクURL」は含まれないです。つまり、「値に設定するリンクURL」にhttps://yoshinorin.net/%value%とか設定してもhttps://yoshinorin.net/の部分は検索対象に含まれません。

また、書式がリンクのものに限らず、searchable0の場合、つまり検索画面での対象外であっても、チケット一覧のフィルタでの絞り込み対象には使用できます。

ちなみのちなみ…


設定できない理由を調べるときにGoogleせんせーでも検索したんですけど、そもそもリンクを使っている人がそんなにいないのか、そんなに情報が引っかからなかったです。(引っかからなかったと言いつつ、こっちもサラッとしか見てないけど)

これメッチャ便利だけどなぁ…弊社だと基幹システム側の受注番号的なものとか生産管理番号的な値を入力してます。こうすると、基幹システム側の対象ページに遷移できるのでメッチャ楽です。