実はクラウド版のLiferayが出始めて少ししてから、存在自体はあった「クライアント拡張(Client Extensions)」。
この概念が追加されたバージョンはDXP 7.4
Liferayの開発サイクルで四半期のリリースが始まる前から実はいました。
実にもう3年か4年経つ割にあんまり知らないこの子についてのお話です。
クライアント拡張とは
“Liferay の外観や操作性を変更したり、Liferay 外部の関数を呼び出したりして Liferay を拡張する場合は、クライアント拡張 (CX) を使用する必要があります。 クライアント拡張機能は、Liferay に直接コードをデプロイすることなく Liferay を拡張します。 自分でホストする場合でも、Liferay Cloud でホストする場合でも、クライアント拡張機能を任意の Liferay 環境にデプロイできます。 これらは、 Liferay オブジェクトなどの組み込み構成とともに、Liferay Cloud を使用して Liferay をカスタマイズする主な方法でもあります。”
https://learn.liferay.com/ja/w/dxp/development/client-extensions
これまではMVC PortletやServiceWrapperのモジュールを作成し、新規のウィジェットを追加したり、標準のサービスのカスタマイズを行いました。
それとは別のカスタマイズ方法として登場したのがこの「クライアント拡張(Client Extensions)」です。
サンプルのダウンロード
Client Extensionはこれまでのモジュールのように、Developer Studio上や、Blade CLIを使って新規作成といったことができないようです。
”残念ながら、
blade create client-extensionsはサポートされていない。 私たちは、顧客がブレードを使ってクライアントのエクステンションを作成することを望んでいません。 顧客は、クライアント拡張機能のサンプルをダウンロードするためにのみブレードを使用する必要があります。”
なぜかbladeを使ってClient Extensionを作成することが望まれていないらしい。。なんで?
サンプルのダウンロードだけはできるようなので、サンプルをダウンロードしてみます。
> blade samples client-extensions
実行するとclient-extensionsのフォルダが作成され、サンプルがダウンロードされます。

予想より大量のフォルダがダウンロードされます。
実際Client Extensionには結構な種類があります。
https://learn.liferay.com/ja/w/dxp/development/client-extensions/client-extension-reference
ダウンロードされるサンプルでパターンはだいたい網羅されているので、サンプルを参考にClient Extensionを作成してみます。
クライアント拡張の作成
Workspace内に「client-extensions」フォルダを作成し、「liferay-sample-iframe-1」をフォルダごとコピーします。
または、blade samplesのコマンドをワークスペースの直下で実行すると、すべてその階層にダウンロードされます。
Workspace
・
・
├modules
└client-extensions
└liferay-sample-iframe-1
└client-extension.yaml
「modules」と同じ階層に「client-extensions」
その配下に「liferay-sample-iframe-1」
という階層にします。
Developer Studioで表示を更新して「Gradle > Refresh Gradle Project」を実行すると、Gradle Tasksにclient-extensionsのタスクが表示されます。

「deploy」を実行するとbundles/osgi/client-extensionsにzipが作成されます。

Liferayのカスタマイズモジュールはjarで作成されていましたが、Client Extensionはzipで作成されます。
ただ、拡張子が違うだけで流れは通常のカスタマイズモジュールと同様ですね。
OSGiモジュールの場合は、JavaのComponentアノテーション内で「service」のプロパティでサービスを指定し、必要なインターフェースを実装することで動作していましたが、
Client Extensionはclient-extension.yaml内の「type」のプロパティで種類を指定します。
クライアント拡張の動作確認
作成されたzipファイルをosgi/client-extensionsに配置します。
通常のOSGiモジュールと同様に、モジュールが起動すると「STARTED」のログが出力されます。
起動後にウィジェットの一覧を見ると「Client Extensions」カテゴリに追加したものがウィジェットとして追加されます。

Gogo Shellで見てみると「lb」で普通に一覧に表示されます。

内部的にはOSGiモジュールとして動作しているようですね
最後に
Client Extensionの何たるかの紹介でした。
Liferay CMSでこれも使えたらなっていうClient Extensionもあるのでいつか紹介できればと思います。
以前の記事でこの中の一つ、「CSSクライアント拡張」を見せている記事もあるので探してみてください!
ではまた
ちなみに
動作確認のデプロイの際、通常のモジュールと同様に「deploy」フォルダに配置することでデプロイも可能です。
が、deployフォルダに配置した場合、読み込み後に「client-extensions」フォルダではなく何故か「modules」フォルダ配下に移動していきます。
動作に影響があるわけではなさそうなので、細かいこと気にしない人は別にこれでもいいかも。
Gogo Shellでバンドルとして出てくるし、実際に使ってみる分には通常のモジュールとぱっと見では判断つかないですしね。

あっきーでした






