サイト初期化ツール
Liferay DXP 2023.Q4+/Portal GA100+
サイト初期化ツールは、ページ、コンテンツ、設定などをパッケージ化することで、サイトの大部分が既に構築された状態で新しいサイトをすぐに立ち上げられるように支援します。 これらを複数のLiferayインスタンス間で再利用することで、サイトの重要なコンポーネントを迅速に複製できます。
サイト初期化クライアント拡張機能の使用方法の詳細については、 サイト初期化ツールの使用 を参照してください。
サイト初期化ツールの作成
サイト初期化子は、 クライアント拡張機能 としてデプロイされます。 サイト初期化子を作成するには、 client-extension.yaml ファイルを作成する必要があります。
client-extension.yaml プロパティを使用して、新しいサイトの名前を定義します。 クライアント拡張機能の定義に関する詳細は、 クライアント拡張機能の操作 を参照してください。の siteName
サイト設定(手動メンバーシップを使用するかどうかなど)を site-configuration.json ファイルに追加します。 このファイルを、クライアント拡張機能プロジェクトフォルダ内の site-initializer/ フォルダに追加してください。
例えば、このJSONはサイトの種類と手動メンバーシップを設定します。
{
"manualMembership": "true",
"membershipRestriction": "0",
"typeSite": "1"
}
既存のサイトの Group_ データベース テーブルのデータを検査することで、これらの設定の値を確認できます。
サイト初期化子にコンテンツを追加するには、必要なスキーマに基づいた特定の形式に従って、各アセットタイプのJSONデータを追加し、適切な場所に配置する必要があります。
インポートするアセットにファイルを追加する
ほぼすべてのアセットタイプは、 site-initializer/ フォルダーに JSON で追加されます。 ただし、データを追加する場所と方法は、資産の種類によって異なります。
- 常にLiferayインスタンス全体 にスコープが設定されているアセットタイプ(複数存在する場合もあります)の場合、 組織 や ロールなど、アセットタイプと同じ名前の単一のJSONファイルにすべて含め、
site-initializer/フォルダのルートに配置します(例:roles.json)。 - フラグメント やページなど、より複雑なアセットタイプ (単一の JSON ファイルを超える必要がある場合) の場合は、アセットタイプにちなんだ名前のフォルダ (例:
fragments/またはlayouts/) と、各アセット専用のサブフォルダ (例:fragment-1/、fragment-2/など) を追加します。 JSON ファイル名はアセットの種類にちなんで付けます (例:fragment.json)。 - その他のアセットタイプは、アセットタイプと同じ名前のフォルダ(例:
object-actions/)に格納され、各アセットには独自の JSON ファイルが含まれています。
独自のフォルダーに属するアセット タイプについては、その内容を group/、 company/、または asset-libraries/ に配置することで、それぞれインポートされたサイト、Liferay インスタンス全体、またはアセット ライブラリにスコープするように指定できます。
これらのアセットタイプは、インクルードする際に複数のJSONファイルを使用します。
- コマースカタログ には、オプション (
[カタログ名].options.json)、製品 ([カタログ名].products.json)、製品仕様 ([カタログ名].products.specifications.json)、およびサブスクリプションプロパティ ([カタログ名].products.subscriptions.properties.json ) に関する追加の JSON ファイルが含まれています。) また、カタログと同じ名前のフォルダに商品画像が保存されている場合もあります。 - Commerceの通知テンプレートでは、言語ごとにメールテンプレートの本文を記述した個別のHTMLファイル(言語コードをファイル名に含める、例:
en-US.html)が必要です。 - DDM テンプレート には、FreeMarker テンプレート自体 (JSON ファイルと同じ名前) を含む別の
.ftlファイルが必要です。 - フラグメント には、フラグメント コード用の
index.css、index.html、およびindex.jsファイルが別途必要です。 使用されていない場合は、空になっている可能性があります。 - 通知テンプレート には、言語ごとにメールテンプレート本文を含む別の HTML ファイルが必要です (言語コードで命名されます。例:
en-US.html)。 関連付けられたオブジェクトアクションは、別のnotification-template.object-actions.jsonファイルに含めることもできます。 - セグメント エクスペリエンス には、セグメント エクスペリエンスの JSON ファイルと同じ名前のフォルダーに、ページ (
page.jsonファイルを含む) とページ定義 (page-definition.jsonファイル) を含めることができます。 サブフォルダ内に子ページを含めることもできます。 - スタイルブック には、スタイルブックトークン用の別の JSON ファイル (
frontend-tokens-values.jsonファイル内) と、サムネイル用の別の画像ファイル (例:thumbnail.pngが含まれています。 - ページ、 ページ テンプレート、および ユーティリティ ページ はすべて、ページ定義 (
page-definition.jsonを含む別の JSON ファイルを必要とします。 - 語彙 には、親と同じ名前のフォルダに子カテゴリを追加することで、含まれるカテゴリとサブカテゴリを目的の階層に含めることができます。 カテゴリ は、それらを含む語彙の中に 含まれていなければなりません。
- Webコンテンツ(ジャーナル)記事 には、記事の内容を含む別のXMLファイル(JSONファイルと同じ名前)が必要です。 記事ごとにフォルダを作成する代わりに、フォルダのメタデータを含む JSON ファイルをフォルダと一緒に含めることで (例:
[フォルダ名].metadata.json)、Web コンテンツフォルダの目的の階層にネストすることもできます。 - ワークフロー定義 には、ワークフロー定義自体を含む別の XML ファイル (JSON ファイルと同じ名前) と、プロパティ用の別の JSON ファイル (
workflow-definition.properties.jsonが必要です。
上記の規則には、以下のような例外もあります。
- コマースカタログ は、アセット名の代わりに共有フォルダ内のカタログ名を使用します (例:
[カタログ名].json)。 - DDM構造 は、JSONの代わりにXML構造として含めることができます。
- ドキュメント は、ドキュメント ファイル自体 (目的のドキュメント フォルダー構造内) のみを必要とします。
- キーワード は、サイトまたはアセットライブラリにスコープされているにもかかわらず、それぞれに 1 つのファイルではなく、単一の共有 JSON ファイルに含まれています (例:
keywords/group/keywords.json)。 - ページ、 ページ テンプレート、および ユーティリティ ページ では、
ページを使用してアセット タイプにちなんで個別の JSON ファイルに名前を付ける必要があります。レイアウトの代わりに (例:page-template.json)。 - 新しいサイトのページセット は、
public/metadata.jsonまたはprivate/metadata.jsonに属します。 - ポートレット設定 は JSON ではなく FTL テンプレートとして追加されます。
JSONデータの準備
ほとんどのアセットタイプにおいて最も重要な情報は、JSONデータです。 正しいデータを取得する最も手っ取り早い方法は、別のLiferayインスタンスでデータを作成することですが、データを取得する正しい方法はアセットの種類によって異なります。 各型についてそれを取得する方法を判断するには、Liferayのソースコードを調べる必要があります。
-
追加したいアセットまたはコンテンツの種類に応じて、
liferay-portalソースコードリポジトリ にアクセスし、アセットの種類に応じた適切なInitializerクラスを検索します。BundleSiteInitializer、CommerceSiteInitializer、またはOSBSiteInitializer.Initializerクラスには、アセット名を指定した_add*または_addOrUpdate*メソッドがあります。 コード内のアセット名は、データベースで使用されている名前に従うことに注意してください(例: ジャーナル記事 は ウェブコンテンツ記事の代わりに、 レイアウト は ページ の代わりに)。 これらのInitializerクラスのいずれも目的のアセットタイプを持たない場合、サイト初期化子の一部としてはサポートされません。 -
適切な
Initializerクラスで、選択したアセットのタイプに適したメソッドを確認します (例: 通知テンプレートの場合は_addOrUpdateNotificationTemplate)。 メソッドの実装内で、以下のメソッド呼び出しを検索します。-
toDTO: メソッドにtoDTOメソッドの呼び出しが含まれている場合は、対応する REST API エンドポイント ([your domain]/o/api) を見つけて、そこでgetメソッドを使用してアセットをダウンロードし、使用可能な JSON データを取得します。 APIがIDによる取得を要求する場合、データベーステーブル内でアセットを特定する必要があります。 -
メソッドに
[AssetName]Importer.import*の呼び出しが含まれている場合 (例:layoutsImporter.importFile)、関連データを データ移行センター またはサイト メニューのコンテンツ ページの エクスポート オプションを使用してダウンロードします。 データ移行センターを有効にするには、機能フラグを有効にする必要があります。
-
バッチフレームワークのデータ移行センターは、 ベータ版機能です。
データ移行センターを使用するには、インスタンス設定 → 機能フラグでその機能フラグを有効にしてください。 ベータ機能セクションに データ移行センター (COMMERCE-8087) として記載されています。 または、Liferay を起動する前に、この ポータル プロパティ を追加してください。
feature.flag.COMMERCE-8087=true
メソッドがこれらのメソッドのいずれも呼び出さない場合、アセットはデータベーススキーマ自体に従う必要があります。 資産の設定情報を取得するには、データベース管理者にデータベースへの直接クエリを実行してもらう必要がある場合があります。
データの調整
データをJSON形式に変換した後も、調整のためにいくつかの変更を加える必要があります。 一部の情報(特定のIDなど)は、それが生成されたLiferayインスタンスでのみ適用されるため、サイト初期化子では許可されていません。
データを調整するには、以下の手順に従ってください。
-
特定のIDやその他のアセットに依存するフィールドのうち、アセットのID、作成/更新日、作成されたユーザーの情報、関連するアセットIDなど、対象のLiferayインスタンスには適用されない可能性のあるものを削除します。
-
いずれかのフィールドに、別のファイル(メール通知の本文など)で必要とされるデータが含まれている場合は、そのフィールドを削除し、別のファイルを使用してください。
-
資産に外部参照コードがある場合は、それを新しい固有の値に変更してください。
交換用トークン
置換トークンを使用すると、各デプロイメントに固有のアセットのフィールド値(サイトIDなど)を設定できます。 サイト固有の値の代わりに、以下のトークン値のいずれかを使用してください。
[$COMPANY_ID$][$GROUP_FRIENDLY_URL$][$GROUP_ID$][$GROUP_KEY$][$PORTAL_URL$]
これらのトークンは、サイト初期化ツールがデプロイされると、JSON内で文字列値(引用符を含む)に変換されます。
また、これらのトークンのいずれかを # シンボルと組み合わせて使用することもできます (例: [#GROUP_ID#])。これにより、引用符なしで値を表すことができます (たとえば、数値のみが必要な場合)。
デプロイメントまで生成されない他のアセットIDを表すために、代替トークンを使用することもできます。 例えば、生成された ObjectDefinition1 アセットの ID を使用して、 objectDefinitionId フィールドを設定できます。
"objectDefinitionId": "[$OBJECT_DEFINITION_ID:ObjectDefinition1$]"
サイト内のさまざまなアセットタイプを調整するには、Liferayのデータベースにおけるそれらの関係性に関する知識が必要です。 JSONデータへの変更は、本番環境にデプロイする前に必ず徹底的にテストしてください。
この種の置換トークンでは、以下の2つの形式が両方ともサポートされています。
[$FIELD_NAME:AssetName$]: これは、指定されたフィールドの値を、一致する名前フィールドを持つアセットの ID に設定します。[$FIELD_NAME:path/to/file/filename$]: 指定されたフィールドの値を、指定されたファイルパスにあるアセットの ID に設定します。 (パスはクライアント拡張機能のフォルダから開始し、/site-initializer/となる必要があります)。 必要なアセットに一意の名前がない可能性がある場合は、この形式を使用してください。
Liferay DXP 2026.Q3+別個のトークン[$FOR_EACH_LANGUAGE_ID$]は、言語キーからローカライズされた_i18n マップを生成します。 マップ内では、トークンをキーとして使用し、言語キーをその値として指定します。 インポート時に、このエントリはLiferayインスタンスで有効になっている言語ごとに1つのエントリに展開されます。
"value_i18n": {
"[$FOR_EACH_LANGUAGE_ID$]": "welcome-to-liferay"
}
このトークンは、ページ定義、表示ページテンプレート、オブジェクト定義ファイル、およびバッチエンジンを通じてインポートされたデータ内で解決されます。 サイト初期化子内の他の場所では、トークンは展開されず、フィールドは翻訳されないままになります。 # のバリアントはありません。
言語の優先順位、解決を制御するインスタンス設定、および言語キーが解決されない場合に何が起こるかについては、 バッチインポート値のローカライズ を参照してください。
サイト初期化ツールの展開
サイト初期化子は、他のクライアント拡張機能と同様の方法でデプロイされます。 必要なデプロイ方法は、対象となるLiferayインスタンスがどのようにホストされているかによって異なります。
詳細については、 Liferay インスタンスへのデプロイ を参照してください。