これまでこのサイトで数回にわたって Tailwind CSS を利用している Sitecore XM Cloud のサンプルを提供していました。今回はサイトのサンプルを一新して、標準の sxastarter のサンプルとこのブログで紹介しているサンプルを共存させるように変更をしました。
これまで紹介をしてきたサンプルは以下の通りです。
- XM Cloud で Tailwind CSS のサンプルサイトを作成 - その6 Next.js に Tailwind CSS を適用する
- XM Cloud で Tailwind CSS のサンプルサイトを作成 - その5 シリアライズ
- XM Cloud で Tailwind CSS のサンプルサイトを作成 - その4 新規サイトの作成
- XM Cloud で Tailwind CSS のサンプルサイトを作成 - その3 .env ファイルを保護する
- XM Cloud で Tailwind CSS のサンプルサイトを作成 - その2 XM Cloud に展開する
- XM Cloud で Tailwind CSS のサンプルサイトを作成 - その1 新規リポジトリの作成
リポジトリの構成を変更する
今回は Tailwind CSS のサンプルのサイトに関しては引き続き変わらず利用できるように、以下のサイトに展開をしていきます。
- src\tailwindcss
一方、もともと提供されている sxastarter のサンプルを削除していました。これに関しては最新版のサンプルから取得してきて、以下のサイトで展開するように追加をします。
- src\sxastarter
これで2つの Next.js のプロジェクトが設定されることになるため、それぞれ別のレンダリングエンジンとして動くように設定をしたいと思います。この手順は以下のブログで紹介をしていました。
ローカル環境の整備
まずローカルの環境を整えていきます。今回、追加するホストの情報は .env.template のファイルに以下のコードを追加しました。
# Configure host name for tailwindcss
TAILWINDCSS_RENDERING_HOST=tailwindcss.sxastarter.localhost
docker-compose.override.yml のファイルを変更してそれぞれ個別の Node.js のコンテナを動かします。なお、デフォルトのコンテナを今回は sxastarter のほうで利用するように記述をサンプルに合わせていきます。以下のコードの違いは、volumes 、 labels および Rendering のホストになります。
rendering:
image: ${REGISTRY}${COMPOSE_PROJECT_NAME}-rendering:${VERSION:-latest}
build:
context: ./docker/build/rendering
target: ${BUILD_CONFIGURATION}
args:
PARENT_IMAGE: ${REGISTRY}${COMPOSE_PROJECT_NAME}-nodejs:${VERSION:-latest}
volumes:
- .\src\sxastarter:C:\app
environment:
SITECORE_API_HOST: "http://cm"
NEXTJS_DIST_DIR: ".next-container"
PUBLIC_URL: "https://${RENDERING_HOST}"
JSS_EDITING_SECRET: ${JSS_EDITING_SECRET}
SITECORE_API_KEY: "${SITECORE_API_KEY_xmcloudpreview}"
DISABLE_SSG_FETCH: ${DISABLE_SSG_FETCH}
depends_on:
- cm
- nodejs
labels:
- "traefik.enable=true"
- "traefik.http.routers.rendering-secure.entrypoints=websecure"
- "traefik.http.routers.rendering-secure.rule=Host(`${RENDERING_HOST}`)"
- "traefik.http.routers.rendering-secure.tls=true"
tailwindcss:
image: ${REGISTRY}${COMPOSE_PROJECT_NAME}-tailwindcss:${VERSION:-latest}
build:
context: ./docker/build/rendering
target: ${BUILD_CONFIGURATION}
args:
PARENT_IMAGE: ${REGISTRY}${COMPOSE_PROJECT_NAME}-nodejs:${VERSION:-latest}
volumes:
- .\src\tailwindcss:C:\app
environment:
SITECORE_API_HOST: "http://cm"
NEXTJS_DIST_DIR: ".next-container"
PUBLIC_URL: "https://${TAILWINDCSS_RENDERING_HOST}"
JSS_EDITING_SECRET: ${JSS_EDITING_SECRET}
SITECORE_API_KEY: "${SITECORE_API_KEY_xmcloudpreview}"
DISABLE_SSG_FETCH: ${DISABLE_SSG_FETCH}
depends_on:
- cm
- nodejs
labels:
- "traefik.enable=true"
- "traefik.http.routers.tailwindcss-secure.entrypoints=websecure"
- "traefik.http.routers.tailwindcss-secure.rule=Host(`${TAILWINDCSS_RENDERING_HOST}`)"
- "traefik.http.routers.tailwindcss-secure.tls=true"
これで2つの Next.js のプロジェクトをそれぞれのコンテナで起動できるようになりました。
XM Cloud 環境の整備
XM Cloud の環境でコンテナを追加する場合、 xmcloud.build.json のファイルにて定義を追加する必要があります。今回は以下のように記述しました。
{
"renderingHosts": {
"xmcloudpreview": {
"path": "./src/sxastarter",
"nodeVersion": "20.14.0",
"jssDeploymentSecret": "110F1C44A496B45478640DD36F80C18C9",
"enabled": true,
"type": "sxa",
"buildCommand": "build",
"runCommand": "next:start"
},
"Tailwindcss": {
"path": "./src/tailwindcss",
"nodeVersion": "20.14.0",
"jssDeploymentSecret": "110F1C44A496B45478640DD36F80C18C9",
"enabled": true,
"type": "sxa",
"buildCommand": "build",
"runCommand": "next:start"
}
},
"postActions": {
"actions": {
"warmUpCm": {
"urls": [
"/sitecore/shell",
"/sitecore/shell/Applications/Content%20Editor.aspx?sc_bw=1",
"/sitecore/client/Applications/Launchpad"
]
},
"populateSchema": {
"indexNames": []
},
"reindex": {
"indexNames": []
}
}
}
}
ポイントは、renderingHosts の定義に対して標準の xmcloudpreview だけではなく、Tailwindcss を追加している点です。これにより XM Cloud にプロジェクトを展開すると、Rendering Host のアイテムが個別に生成されます。
これにより Tailwindcss のサンプルサイトがレンダリングするにあたっては、別に作成された Rendering Host を指定するだけで切り替えが完了となります。
シリアライズデータの分離
コンテンツのデータに関して、今後は別々に管理をしたいため別のリポジトリで管理をすることにしました。リポジトリは以下のようになります。
変更ポイントは以下のような形です。
- sxastarter と tailwindcss に関してそれぞれ個別にシリアライズができるように別の json ファイルで管理をしています
- sxastarter は Rendering Host は Default を利用するようにしているため、シリアライズ対象外にしています
- tailwindcss は別の Rendering Host を利用しているため、シリアライズの対象にしています
- この場合、環境によって値が変わる形となりますので都度設定の変更が必要となります
このリポジトリを利用して、ローカルの環境も含めて作業ができるようにしました。
まとめ
sxastarter を利用して紹介をしたり、Tailwind CSS でサンプルの実装をしたり、という両方の手順を別々の Project で作成するのが手間にもなってきたこともあり、今後ブログで紹介をする際に1つのリポジトリで Tips を紹介していくために、共存させる形としました。
今の段階でのリポジトリのサンプルは以下から取得することが出来ます。
- https://github.com/haramizu/sitecoredemo-jp/tree/part-7
- https://github.com/haramizu/xmc-content/tree/part-1