YUI Compressorをフォークした

FessではJavaScriptやCSSの最小化にYUI Compressorを利用しています。しかし、オリジナルのYUI Compressorは長らくメンテナンスされておらず、ES6(ECMAScript 2015)以降の構文に対応していませんでした。そこで、YUI Compressorをフォークして、ES6対応版を作成しました。

背景

YUI Compressorは、Yahoo!が開発したJavaScript/CSS圧縮ツールです。長年にわたり広く使われてきましたが、オリジナルのリポジトリはメンテナンスが停止しており、ES6で導入されたアロー関数やテンプレートリテラルなどの新しい構文に対応していませんでした。

コミュニティによるフォーク版(hazendaz版など)も存在しますが、ES6対応が十分ではなかったため、CodeLibsとして独自にフォークして対応することにしました。

codelibs/yuicompressor

codelibs/yuicompressorとして、ES6対応版のYUI Compressorを公開しました。主な変更点は以下の通りです。

  • ES6構文(アロー関数、テンプレートリテラル、const/letなど)のサポート
  • JavaScriptパーサーの更新

codelibs/yuicompressor-maven-plugin

YUI CompressorをMavenビルドで利用するためのプラグインとして、codelibs/yuicompressor-maven-pluginを作成しました。これにより、Mavenプロジェクトで簡単にES6対応の圧縮を行うことができます。

pom.xmlでの設定例:

<plugin>
    <groupId>org.codelibs.maven</groupId>
    <artifactId>yuicompressor-maven-plugin</artifactId>
    <version>2.0.0</version>
    <executions>
        <execution>
            <phase>compile</phase>
            <goals>
                <goal>compress</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Fessでの適用

Fess 15.4では、yuicompressor-maven-pluginのgroupIdをcom.github.hazendaz.mavenからorg.codelibs.mavenに変更し、バージョン2.0.0を使用するようにしました。

これにより、FessのJavaScript最小化処理がES6構文に対応し、モダンなJavaScriptコードも正しく圧縮できるようになりました。

Fessのパスマッピングの整理

Fess 15.4では、パスマッピング設定画面のラベル名を改善しました。

パスマッピングの処理種別には以下の4つの選択肢があります。

  • クロール: クロール時にURLを変換
  • 表示: 検索結果の表示時にURLを変換
  • クロール/表示: 両方のタイミングで変換
  • 保存したURL: クロールで抽出されたURLを変換

このうち「保存したURL」という名称は、その機能を正確に表現できていませんでした。実際には、クロール中に抽出されたURL(リンク先URL)を変換する機能です。

「保存したURL」(Stored URL)を「抽出URL変換」(Extracted URL Conversion)に変更しました。

この変更により、パスマッピングの各処理種別が何をするのかがより明確になりました。

Fessのダッシュボード画面の改善

FessにはKopfというクラスター管理UIがバンドルされている。元々はelasticsearch-kopfをfess用にフォークしたものを使っていたのだけど、今回fess-kopfとして新しいリポジトリに移行しました。

なぜ移行したのか

Kopfはクラスターの状態確認やインデックス管理ができるWebベースの管理ツールで、結構便利に使えるものだったりする。ただ、元々のelasticsearch-kopfはもうメンテナンスされていない状態で、何か改善しようにも手を入れづらい状態だった。

ということで、Fess専用として独自にメンテナンスできるようにフォークすることにしました。

何を変えたか

OpenSearch対応

OpenSearch 2.x/3.xで動くように、以下のあたりを対応した。

  • OpenSearchのバージョン検出を追加
  • 廃止された機能をメニューから削除
  • Percolator(Elasticsearch 5.xで非推奨になったやつ)
  • Index Warmers(同上)
  • Benchmark API(Elasticsearch 5.xで消えた)
  • 設定名をelasticsearch_root_pathからopensearch_root_pathに変更(古い設定名でも動くようにはしてある)

見た目の改善

せっかくなので、見た目も今風にしてみた。

  • AdminLTE風のボタンやレイアウトに変更
  • dark、light、fessの3テーマ対応
  • 全体的にスペーシングとか見やすさを改善

古いコードも結構残っていたので、その辺も整理した。

開発環境まわり

  • Node.js 20.0.0以上を必須に
  • GitHub ActionsでCI/CDを整備
  • テストも追加

今後について

fess-kopfとして独立したことで、Fessの管理画面で利用しているダッシュボードのUIも改善していけるようになった。今まではメンテされていないkopfをそのまま使っていたので、なかなか手を入れられなかったのだけど、これからは必要に応じて改善を進めていけるはずです。