Published on

ヘッドレスサイトを追加する

Authors

プロジェクトの作成、XM1 の環境整備、そして前回は SXA のモジュールのインストールをしました。今回はこのプロジェクトに対して、ヘッドレスのサイトを追加して、Next.js のプロジェクトと連携させていきます。手順が長くなるため、今回はヘッドレスのサイトを追加して、そのデータをいつでも再利用できるようにシリアライズができるところまで紹介をします。

Headless のテナントを追加する

すでに用意されている XM のインスタンスにおいて、サイトを追加していきます。まず最初に JSS テナントを追加してください。

jss

ここでは sitecoredemo-jp とします。

jss

続いてテナントの中に JSS サイトを追加します。右クリックをするとサイトの追加のメニューが表示されます。

jss

サイトの名前に関しては sitecoredemo-jp とします。

jss

利用するモジュールはすべての機能を選択します。

jss

上記の手順が終了すると、以下のようにサイトが追加されます。

jss

作成したデータのシリアライズ

今回は新規サイトを作成していきましたが、日本語リソースと同様にクリーンナップしたあと改めて同じ作業をするのは手間になります。そこで、作成したデータをいつでも戻せるように、シリアライズを実行したいと思います。

ここで Sitecore CLI を利用します。プロジェクトのトップレベルで以下のコマンドを実行して、まずはコマンドラインから Sitecore に書き込みができるようにします。

dotnet sitecore login --cm https://cm.sitecoredemo.localhost/ --auth https://id.sitecoredemo.localhost/ --allow-write true

ログイン画面が表示されて、以下のようにアクセスしてよいかの確認画面が出てきます。

jss

ここで許可をしてください。続いて Sitecore で作成をしたアイテムを取得する前に、プロジェクトで用意をしている API キーをサイトに反映させます。コマンドを実行する前に、src 直下にある json ファイルのうち、 src\InitItems.module.json だけを利用するため、これ以外のファイルの拡張子を一時的に .txt に変更します。変更後、以下のコマンドで API キーをインポートします。

dotnet sitecore ser push
jss

実行後、コンテンツエディターで API キーがインポートされていることがわかります。

jss

続いて作成をしたサイトのデータをシリアライズするために、この手順の前に変更をした2つのファイルの拡張子を json に戻してください。

標準で用意されているパスとは異なる形で今回サイトを作成したため、2つのファイルのパスを調整します。下記のパスは、作成したサイト名によって異なるため、適宜 CMS に展開されているパスを参照してください。

src\DockerStarter.module.json
{
    "namespace": "DockerStarter",
    "references": [ "InitItems" ],
    "items": {
        "includes": [
            {
                "name": "layouts",
                "path": "/sitecore/layout/Layouts/Project"
            },
            {
                "name": "placeholders",
                "path": "/sitecore/layout/Placeholder Settings/Project/sitecoredemo-jp"
            },
            {
                "name": "renderings",
                "path": "/sitecore/layout/Renderings/Project/sitecoredemo-jp"
            },
            {
                "name": "templates",
                "path": "/sitecore/templates/Project/sitecoredemo-jp"
            }
        ]
    }
}

もう一つのコンテンツに関するファイルは以下のように変更してください。

src\DockerStarter-Content.module.json
{
    "namespace": "DockerStarter-Content",
    "references": [ "DockerStarter" ],
    "items": {
        "includes": [
            {
                "name": "content",
                "path": "/sitecore/content/sitecoredemo-jp"
            },
            {
                "name": "media",
                "path": "/sitecore/media library/Project/sitecoredemo-jp"
            }
        ]
    }
}

上記の変更が終わった後、以下のコマンドを実行します。

dotnet sitecore ser pull
jss

作成をしたサイトのデータがシリアライズされて、items のフォルダの下に yaml ファイルが作成されています。

jss

Core データベースのアイテムを追加

上記のデータはすべて Master データベースに関してのシリアライズの処理をしていました。言語設定として日本語を追加しているため、core データベースのアイテムもシリアライズでエクスポートをしておきます。今回は src\InitItems.module.json のファイルに以下のように core-language という形で最後の項目を追加しておきました。

src\src\InitItems.module.json
{
    "namespace": "InitItems",
    "items" : {
        "includes": [
            {
                "name": "content-root",
                "path": "/sitecore/content",
                "scope": "singleItem",
                "allowedPushOperations": "createAndUpdate"
            },
            {
                "name": "api-key",
                "path": "/sitecore/system/Settings/Services/API Keys/DockerStarter",
                "scope": "singleItem"
            },
            {
                "name": "core-language",
                "path": "/sitecore/system/Languages",
                "database": "core"
            }
        ]
    }
}

上記の設定を実施したあと、改めてシリアライズを実行しておきます。

dotnet sitecore ser pull

インポートのテスト

上記の作業で作成をしたシリアライズのデータを、新規の環境に対してインポートできるかどうかのテストを実施します。起動している XM1 の環境を一度落として、データをクリーンナップをしてクリーンな環境で起動をします。

docker-compose down
cd docker
.\clean.ps1
cd ..
docker-compose up -d

立ち上がったあと、コマンドラインでログインをします。すでに一度上記の手続きの時にログインをしているため、今回はシンプルに以下のコマンドだけでログインすることが可能です。

dotnet sitecore login

その後、

dotnet sitecore ser push

サイトが復元されていることを確認しました。

jss

まとめ

今回は Sitcore 側にヘッドレスの Web サイトを追加しました。次回はこのサイトと Next.js のプロジェクトを連携するための手順を確認していきます。