みなさん、Sitecoreのデータ、バージョン管理できてますか?
誤って開発途中のアイテムやテンプレートを削除してしまい、数時間分の作業をパーにしてしまったことありませんか?
師走の忙しい時期です。うっかりミスをしないように対策しましょう。
本記事ではSitecore開発者向けに、Sitecoreの開発におけるアイテムやテンプレートのバージョン管理の仕方を紹介します。
改めましてこんにちは。赤澤です。
Sitecore認定デベロッパーとして、実業務でもSitecoreを利用したプロジェクトに参加しています。
今回もSitecoreについて書きたいと思います。
なお、本記事はSitecore Advent Calenderの12/16分の記事となります。サイトコア原水さん、参加させていただきありがとうございます。
※ほかの記事に見習い、ブログの投稿では、海外で撮った写真をタイトルとして利用しています。今回は数年前に旅行で訪れたグランドキャニオンの写真です。
Sitecore開発におけるバージョン管理の重要性
※ はじめに今回取り扱う内容はあくまで「開発時のバージョン管理」ですので、Sitecoreに備わっている「言語バージョン」「数値バージョン」といった運用時に必要な管理機能については取り扱いません。それらが必要であればSitecoreのリファレンスを参照ください。
Sitecoreの開発をしていると、
- アイテム
- テンプレート
- レイアウト
- サブレイアウト etc…
などなどSitecoreのデータベースの中に色々なデータを作成することになります。
さらに実際にはデータだけではなく、cssや静的画像、configファイル、レイアウトやサブレイアウトのascxやカスタマイズ処理用の.NETコードなど、関連するファイルやデータが多岐にわたります。
これらをバラバラに管理するのは大変です。一か所にまとめて管理しましょう。
具体的にはSubversionやGitなどのバージョン管理システムを使って管理します。
そうすることで
- 複数の開発者で同じ環境を共有できる
- 気軽に作業を元に戻せる
- ソースコードとデータを一元管理できる
などの利点があり、チーム開発において非常に開発効率があがります。
Sitecoreデータの管理方法
Subversionなどのバージョン管理システムでSitecoreのバージョン管理をすると書きましたが、もちろんSitecoreのデータをそのまま管理することはできません。Subversionなど一般的なバージョン管理システムはファイルを管理する仕組みですので、Sitecoreデータを管理するためにはSitecoreデータをファイルにしてあげる必要があります。
実はSitecoreにはそういった用途に使える「シリアライズ」という機能があります。
シリアライズでは、アイテム・テンプレートなどのコンテンツツリーに存在するデータ、ドメイン・ロール・ユーザーなどのセキュリティデータをファイルに出力することができます。
また、シリアライズされたファイルからSitecoreDBにデータを復元する「デシリアライズ」という機能がありますので、これを使うと何か間違いがあってもシリアライズされたバージョンにデータを復元することができますので安心です。
一度ファイルになってしまえば、後はプログラムコードと同じ要領でバージョン管理が可能です。
データをシリアライズして、Subversionで管理しましょう。
Sitecoreデータのシリアライズ
実はコンテンツエディターから任意のアイテムをシリアライズすることが可能です。(ほかにもシリアライズ専用のページ、SitecoreAPIからのシリアライズもできます)
具体的には以下の手順でシリアライズが可能です。
シリアライズ手順:
- サイトコアデスクトップにログインする
- 画面イメージ(2)の部分で対象のDBを選択する
- コンテンツエディターを開く
- 画面イメージ(1)の部分で、シリアライズ対象のアイテムを選択する
- リボンから「デベロッパー」を選択する
- 画面イメージ(3)の「ツリーをシリアル化」を選択する
デシリアライズ手順:
- サイトコアデスクトップにログインする
- 画面イメージ(2)の部分で対象のDBを選択する
- コンテンツエディターを開く
- リボンから「デベロッパー」を選択する
- 画面イメージ(4)の「データベースを元に戻す」を選択する
- シリアライズデータを元に全てのデータが更新されるため注意
- シリアライズされていないデータ(=Sitecoreにのみ存在するデータ)は削除される
- もし追加のみ行うのであれば「データベースを更新」を選択する
- 一部のアイテムやツリーだけ戻す場合には「アイテムを元に戻す」「ツリーを元に戻す」を使用してください
- シリアライズデータを元に全てのデータが更新されるため注意
なおドメイン・ロール・ユーザーなどのセキュリティ情報のシリアライズについては、サイトコアデスクトップのセキュリティツールの各機能(ロールマネージャー等)からアイテムデータと同じ要領でシリアライズすることが可能です。
シリアライズされたデータはSitecoreが動作しているサーバーのデータフォルダー配下に格納されますので、通常であれば以下のような配置になるかと思います。
- アプリケーションのドキュメントルート c:\Apps\KlingonApp\Website\
- シリアライズデータの格納フォルダ c:\Apps\KlingonApp\Data\serialization\
またシリアライズされたデータは、
$(シリアライズデータの格納フォルダ)\master\sitecore\content\Home.item
のように、アイテムパスが反映された形でファイルに出力されますので、コミットされたデータのファイルパスだけ見ても、更新されたデータが非常にわかりやすい形になっています。
なおファイル自体もテキストデータになっていますので、更新前後での差分表示ができるなど、非常に使い勝手が良くなっています。
あとはSubversionなどの管理ツールでシリアライズデータの格納フォルダを管理すれば、Sitecoreデータのバージョン管理が実現できます。
最後に
Sitecoreデータのバージョン管理、いかがでしたでしょうか。
実際にSubversionなどでバージョン管理しながら開発を始めるとなかなかバージョン管理なしの開発には戻れません。
開発者が慣れているツールを選択すると新たな学習コストもありませんし、既存のプログラムコードの管理手法を転用することも可能かと思います。
実際、弊社ではJenkinsの継続ビルド環境にSitecoreデータの自動更新と単体テストの仕組みを用意して開発時に利用しています。
研究次第で色々と出来ることがあるとおもいますので、皆様も何か面白いアイディアがあれば教えてください。
それでは皆さん、良い開発を。