概要
このセクションでは、Fess の拡張開発について説明します。 プラグイン開発、カスタムコネクタの作成、テーマのカスタマイズなど、 Fess を拡張するための情報を提供します。
対象読者
Fess のカスタム機能を開発したい開発者
プラグインを作成したい開発者
Fess のソースコードを理解したい開発者
前提知識
Java 21の基本的な知識
Maven(ビルドシステム)の基本
Webアプリケーション開発の経験
OpenSearchの基本的な知識(Fess は検索エンジンとして OpenSearch を使用します)
開発環境
推奨環境
JDK: OpenJDK 21以上
IDE: IntelliJ IDEA / Eclipse / VS Code
ビルドツール: Maven(ビルドで最小バージョンは強制されていませんが、Java 21 に対応する新しめの 3.x を推奨)
Git: バージョン管理
OpenSearch: 検索エンジンのバックエンド(IDEから起動する場合、必要なモジュールとプラグインはビルド時にダウンロードされます)
セットアップ
Fess は Maven プロジェクトとしてビルドします。開発時は IDE から起動するのが最も簡単です。
ソースコードの取得:
IDEへのインポート:
取得したディレクトリを Maven プロジェクトとして IDE にインポートします。
OpenSearch用モジュール・プラグインのダウンロード:
初回のみ、以下のコマンドで検索エンジンのモジュールとプラグインを
pluginsディレクトリに取得します。開発サーバーの起動(IDEから):
IDE上で
org.codelibs.fess.FessBootを実行またはデバッグ実行し、 ブラウザで http://localhost:8080/ を開きます。 管理画面は http://localhost:8080/admin/ (初期アカウント:admin/admin)です。パッケージのビルド(配布物の作成):
配布パッケージが必要な場合は
packageゴールを実行します。 成果物はtarget/releasesに生成されます(ユニットテストを省略するには-DskipTestsを付与)。生成された配布物を展開すると
bin/fess起動スクリプトが利用できます。
注釈
bin/fess 起動スクリプトは配布パッケージ(zip/rpm/deb)に含まれるものです。 ソースツリーで mvn package を実行しただけでは、リポジトリ直下に bin/fess は生成されません。 ソースからの開発では、上記のように IDE で FessBoot を実行するか、 展開した配布物の bin/fess を使用してください。
アーキテクチャ概要
Fess は以下の主要コンポーネントで構成されています:
コンポーネント構成
| コンポーネント | 説明 |
|---|---|
| Web層 | LastaFluteフレームワークによるMVC実装 |
| サービス層 | ビジネスロジック |
| データアクセス層 | DBFlute(ESFlute/FreeGen)による型安全なOpenSearchアクセス |
| クローラー | fess-crawlerライブラリによるコンテンツ収集 |
| 検索エンジン | OpenSearchによる全文検索 |
主要フレームワーク
LastaFlute: Webフレームワーク(アクション、フォーム、バリデーション)
DBFlute: データアクセスフレームワーク。OpenSearch向けの型安全なアクセスクラス(
Bhv/ConditionBean)は、 DBFlute の FreeGen 機能と ESFlute テンプレートによって生成されます (再生成はmvn dbflute:freegen)Lasta Di: 依存性注入コンテナ
ディレクトリ構造
拡張ポイント
Fess は以下の拡張ポイントを提供しています:
プラグイン
プラグインを使用して機能を追加できます。
データストアプラグイン: 新しいデータソースからのクロール(
AbstractDataStoreを継承)スクリプトエンジンプラグイン: 新しいスクリプト言語のサポート(
ScriptEngineを実装)Webアプリプラグイン: Webインターフェースの拡張(Lasta Di のコンポーネント上書きとリソースのマージ)
Ingestプラグイン: インデックス時のデータ加工(
Ingesterを継承)
詳細: プラグインアーキテクチャ
注釈
Fess 本体は war としてパッケージングされます。プラグインをローカルでビルドする際に、 Fess を依存関係として解決できない場合は、pom.xml の <packaging> を一時的に jar に変更して mvn clean install -DskipTests を実行し、その後 war に戻してください。
テーマ
検索画面のデザインをカスタマイズできます。
詳細: テーマ開発ガイド
設定
fess_config.properties で多くの動作をカスタマイズできます。
詳細: 設定のはじめに
プラグイン開発
プラグイン開発の詳細については、以下を参照してください:
プラグインアーキテクチャ - プラグインアーキテクチャ
データストアプラグイン開発 - データストアプラグイン開発
スクリプトエンジンプラグイン - スクリプトエンジンプラグイン
Webアプリプラグイン - Webアプリプラグイン
Ingestプラグイン - Ingestプラグイン
テーマ開発
テーマ開発ガイド - テーマのカスタマイズ
ベストプラクティス
コーディング規約
Fess の既存コードスタイルに従う
mvn formatter:formatでコードフォーマットmvn license:formatでライセンスヘッダー追加
テスト
ユニットテスト(
*Test.java): デフォルトのbuildプロファイルでmvn testとして実行されます統合テスト(
*Tests.java):mvn test -P integrationTestsで実行されます。 統合テストの実行には、稼働中の Fess サーバーと OpenSearch が必要です
ロギング
Log4j2を使用
logger.debug()/logger.info()/logger.warn()/logger.error()センシティブな情報はログに出力しない