Fess 15.6.0をリリースしました。今回もかなりの修正が入っていて、マイルストーンを見てもらうと分かりますが、ボリュームのあるリリースになりました。
主なトピックとしては、まずOpenSearch 3.6に対応しました。バンドルしているkopfプラグインも合わせて更新しています。OpenSearch側のアップデートに追従しつつ、Fessとしても安定して動くように整えています。
次に、複数インスタンスでの運用を想定した分散コーディネーションの仕組みを入れました。同じクラスタに対して複数のFessを動かすときに、スケジューラやメンテナンスタスクが競合しないようにするための基盤になります。
パスワード周りも見直しており、ローカルユーザーのパスワードハッシュをBCrypt(Spring Securityの{bcrypt}形式)に切り替えました。既存のSHA-256/512/MD5ハッシュもそのまま検証可能で、次回ログイン成功時にBCryptへ透過的に移行されます(app.password.upgrade.enabled=trueがデフォルト)。ただし、BCrypt導入前のバージョンにダウングレードすると{bcrypt}でエンコードされたパスワードは検証できなくなるので、ロールバックする場合は管理者パスワードのリセットを前提にしてください。
AI関連では、これまで「AI Chat」と呼んでいた機能を「AI Search Mode」にリネームして、RAGパイプラインも大幅に作り直しました。LLMプロバイダをプラグイン化して、OpenAIのreasoningモデルやGemini 3のthinking budgetにも対応しています。スマートサマリーモードや、会話履歴のターン単位でのパッキング、クエリの再生成によるフォールバック、検索フィルタUI、Markdownレンダリング、go URL経由でのソースへの遷移など、普段使いで気になりそうなところをかなり改善しました。エラーメッセージも構造化したLlmExceptionのエラーコードとしてUIまで届くようになっています。
運用面では、ログベースの通知機能を追加しました。ERRORやWARNのログを、SlackやGoogle Chat、メールに転送できるので、既存のアラート基盤と組み合わせて使えます。加えて、プロンプトインジェクション対策や、IndexExportJobのパストラバーサル・シンボリックリンク攻撃対策、EntraIdやSPNEGO周りのログマスクなど、セキュリティ面の強化もまとめて入れています。
管理画面まわりも地味に便利になっていて、system.propertiesの設定項目をAdminの一般設定からまとめて触れるようになったり、メンテナンスページに設定インデックスの再構築アクションを追加したり、クロール設定の複製アクションを追加したりしました。通知設定も「Notice」と「Notify」に分割して整理しています。
そのほか、Servlet APIを6.0から6.1に上げて、残っていたjavaxからjakartaへの移行も完了させました。クロール周りでもRankFusionProcessorのバウンダリ修正や、相対パスのURL解決のフォールバック強化などを入れています。
今回も、コード修正からリリースノート作成、多言語ドキュメントの更新までClaude Codeにかなり助けてもらいました。開発の回転が上がっているので、引き続き細かい改善を積み上げていこうと思います。ぜひ新しいFessを使ってみてください。