Redmineが20周年だそうです。おめでとうございます。 あとクリアコードが20周年だそうです。 そして私も社会人20周年っぽいです。阿部です。
REDMINE JAPAN vol.5で「Redmineで欲しい情報を見つける、そしてAIに賢く答えてもらおう」というタイトルで発表予定です。 スライドも公開しますが、発表用のスライドのため十分な説明が記載されていないので、解説テキストを追加したブログ記事も残します。
はじめに
Redmineを使っているとどんどんデータが溜まっていきます。 有益な情報もたくさんあるので、あとから参照して活かしたいです。
例えば直近で「認証に失敗する不具合」があったときに、過去に同様に問題がなかったか検索したりするでしょう。 そのときに「認証に失敗する不具合」で検索して欲しい情報にたどり着けるでしょうか?
もしかしたら過去の情報には「ログイン」や「サインイン」、「バグ」という用語が使われているかもしれません。 そうすると「認証に失敗する不具合」で検索していてはたどり着けません。
検索して情報が見つからないと、近年話題のAIも活用しきれません。 基本的にAIは一般的なことしか知らないので、Redmineに記載されている内部情報は知りません。 ですので、Redmineの情報をAIに与え、その上でAIに回答してもらう方法を取ります。 しかし、先ほどのように欲しい情報が検索できないと、AIに必要な情報が与えられず、AIにいい感じの回答をしてもらえません。
と、言うことでRedmineにいい感じに検索できる何かを追加して、いい感じの検索結果を得て、それをAIに与えることでAIに賢く答えてもらおう、を試みた結果についての記事です。
(いろいろ試行錯誤中だったりで、運用にすぐ使える状態ではないですが、動いてはいるので改善すれば近々利用できるはず!)
課題の整理と解決方法
課題は上述の通り表記ゆれなどで見つけたい情報が見つけられないことです。 どこかで聞いたことのある課題です。 そう!「PostgreSQLでのセマンティックサーチへの挑戦」で見ましたね! そして、その課題はセマンティックサーチを使えば解決できそうです。 (なぜ、セマンティックサーチを使うと解決するのか、など細かい話は↑の記事に書いてあるのでそちらを参照してください。)
「PostgreSQLでのセマンティックサーチへの挑戦」の記事によればPGroongaを使えば、セマンティックサーチが使えるらしいです。 Redmine + PGroongaといえば、そう!「全文検索プラグイン」ですね!
ということで、「全文検索プラグイン」を使ってセマンティックサーチをして、どのくらい検索が改善しそうかと、AIがどのくらい賢く答えてくれそうか試していきます!
このあとは、
- 「全文検索プラグイン」でセマンティックサーチを使ったようす
- まだ絶賛開発中なので、2026年6月時点の情報です
- その検索結果をもとにAIを使ってみているようす
を紹介します。
「全文検索プラグイン」でセマンティックサーチ
「全文検索プラグイン」ではPGroongaを利用し、そのPGroongaのセマンティックサーチの機能を使います。
PGroongaのセマンティックサーチは内部的に自動でベクトルを生成するので、ベクトルを生成するための言語モデルを指定する必要があります。1
今回はhf:///groonga/bge-m3-Q4_K_M-GGUFを指定しました。
さっそくセマンティックサーチでどのくらいいい感じの結果になるか試した結果を示します。
テストに使ったデータはRedmineのユニットテストで使うデータに8件ほど適当なデータを足したものです。 件数は少ないですが、欲しい情報が得られてそうなようすは確認できます。
これまでのキーワード検索でキーワード検索らしく「認証 不具合」で検索

これまでのキーワード検索で「認証に失敗する不具合」で検索

セマンティックサーチで「認証に失敗する不具合」で検索

セマンティックサーチの方は見つけられていますね! セマンティックサーチの性質上無関係なチケットも表示されていますが、そこは仕方ないところもあります。今後の改善項目です。
参考
見つけたチケットの内容:

先ほどの検索クエリーの「認証」、「失敗」、「不具合」のいずれのキーワードも含まれないのに見つけられています。
補足: PGroongaの検索速度や追加されるインデックスサイズについて
セマンティックサーチ用のPGroongaインデックスを追加するので、その分保存するデータ量が増えます。 どのくらい増えるかについては「PostgreSQLでのセマンティックサーチへの挑戦」で触れているのでご確認ください。 検索速度についての説明もあります。
検索結果をもとにAIを使う
「Redmine AI Helper」というプラグインがあるので、そちらで「全文検索プラグイン」のセマンティックサーチを使ったとき、使わなかったときでAIの回答がどのように変わるのか試してみます。 (「Redmine AI Helper」は「全文検索プラグイン」を使う作りにはなっていないので、そのままでは動きません。 「全文検索プラグイン」を使えるようにコードを追加して検証しています。)
セマンティックサーチOFF

セマンティックサーチON

予想通りだと思いますが、セマンティックサーチONでは知りたかったチケットについて言及して回答してくれています。
この例だとありがたみがわかりにくいかもしれないですが、もっとデータ量の多いRedmineであればセマンティックサーチを使うことでこれまでよりも欲しい情報をAIに渡せて、それを元にAIが回答してくれるので、AIの回答精度が高まることが期待できます。
補足: ローカルAI
今回はOllama(モデル: qwen2.5:14b)のローカルAIで試しました。
PGroongaもローカルでベクトル化をするので、すべてローカルのみで完結する構成です。
PGroongaの方は、今回はデータ量が少ないこともありGPUなしでも処理速度は気になりませんでした。 ただし、ベクトル生成自体は重い処理なので、データ量が増える実運用ではGPUを使える構成が望ましいです。
Ollamaの方は今回のデモレベルでも、GPUなしだと1つの質問に回答するまで5分以上かかったので、実用には耐えられなさそうです。 (AWS EC2のGPUありのg5.xlargeスペックだとよくあるAIツールくらいのレスポンススピードでした。)
補足: セマンティックサーチ
「Redmine AI Helper」でも「ベクトル検索を有効にする」というオプションがあり、これを使うことでベクトル検索(= セマンティックサーチ)ができます。類似チケット検索などで利用できます。
ただし、ベクトルデータベース(Qdrant)が必要であるなど、追加のリソースが必要です。 PGroongaの場合はそういった追加のリソースが不要でお手軽に始められるので、今回はPGroongaを利用しました。
まとめ
「Redmineで欲しい情報を見つける、そしてAIに賢く答えてもらおう!」の発表スライドを補足する記事でした。
Redmineでセマンティックサーチがしたい、Redmineでより良い検索をしたい、などRedmineで期待通りの検索ができずお困りの場合はお問い合わせよりご連絡ください。
それ以外にもRedmineの改善・バージョンアップ、Redmineプラグインの開発、メンテナンスなど幅広く対応いたしますので、サービスページもご確認の上、検索以外についてもお気軽にご連絡ください!
補足: 使ったもの
https://github.com/abetomo/example-redmine-semantic-search
今回のデモ用に少し手を入れた「Redmine AI Helper」や、すべてローカル環境でお試しできるRedmineの環境が立ち上がります。
-
自動でベクトル生成など、詳細については「PostgreSQLでのセマンティックサーチへの挑戦」の記事をご確認ください。 ↩