Unicornのインストールとセットアップメモ

samatsu 5/9/2016 3180 N/A Sitecore Tools

Sitecoreのテンプレートやサブレイアウトのアイテムなどいわゆる定義アイテムをソースコード管理システムで管理したい場合、アイテムをテキストファイルにシリアライズすることでソースコード管理システム上でバージョン管理を行えるようになります。また、定義アイテムのマスターをmasterデータベースではなく、ソースコード管理システムで管理しているシリアライズされたファイルにすることで、他の開発の環境間で定義アイテムのツリーを同期することが簡単になります。

今回ご紹介するUnicornはアイテムを作成、保存したときのアイテムのシリアライズ処理を自動化したり、シリアル化したファイルからサイトコアアイテムへのデシリアラズを簡単に行えるようにするオープンソースのツールです。Team Development for Sitecore など商用ツールも類似した機能を提供するかもしれませんが、今回は比較的有名でメンテナンスもされており、フリーで使うことができるUnicornを導入するメモを記載します。

検証環境は次の通りです

  • Sitecore 8.1 Update2
  • Unicorn 3.2.0.0
  • Visual Studio 2013 Ultimate / Sitecore Rocks 1.5.1.8

1. Unicornのインストールとセットアップ

Unicornをインストールするのはとても簡単です、Visual Studio上でNuGetパッケージをインストールするだけです。Sitecore開発用にセットアップしたVisual StudioのプロジェクトでNuGetパッケージ管理マネージャーを起動します。オンラインタブを選択して、検索ボックスに"Unicorn"と入力してパッケージを検索して インストールボタンをクリックします。

インストールすると readme.txt がタブに表示されます。このファイルに初期セットアップ手順が記載されています。readme.txtの実体はpackagesフォルダーのUnicornフォルダーに配置されています。このファイルに記載されているとおり、サンプルの構成ファイルがデフォルトの設定例は Unicorn.Configs.Default.example に記載されています。今回は、このファイルをベースとして、Unicornが最低限動作する環境をセットアップしてみます。

サンプルの構成ファイルはかなり広いツリーの範囲をUnicornでシリアライズするように設定されています。実際の環境では開発対象のアイテムのみに絞り込むように設定ファイルを構成してください。

Unicornをインストールしたときにプロジェクトに作成されたApp_config/Include/UnicornフォルダーのUnicorn.Configs.Default.example をコピーして、 Unicorn.Configs.Default.config という名前にします。下図のようにファイルのプロパティーのビルドアクションを"コンテンツ"に忘れずに変更してください。こうすることで発行時にファイルとしてSitecore開発環境上にconfigファイルがデプロイされるようになります。

コンテンツツリーのどのサブツリーをUnicornで管理するかは、 Unicorn.Configs.Default.example の <predicate> セクションを参照してもらえると自明ですのでここでは説明しません。

とりあえず準備はOK! ということで、試しに発行してみましょう。発行のセットアップ方法に関してはこちらを参照してください。下図ではSitecoreという名前で発行プロファイルをセットアップしてあります。

Unicornのコントロールパネルを表示します。URLは /Unicorn.aspx です。下図は発行によりデプロイした開発用のSitecore環境のUnicorn.aspxページを表示しています。Sitecoreインタフェースにログインしていないと下図のようにSitecoreの管理者としてログインしくださいというメッセージが表示されるので、リンクをクリックしてSitecoreにログインします。

管理者としてログインんに成功すると、下図のようなページが表示されます。My Siteというのはconfigファイルで定義したシリアライズの設定のまとまりを表すサイト名です。名前はもちろん変更できます。設定ファイルを配置しただけで、アイテムを元にファイルにシリアライズ(リシアライゼーション)を一度も行っていないので、"This configuration does not currently have any valid serialized items. You cannot sync it until you perform an initial serialization, which will write the current state of Sitecore to serialized items." というメッセージが表示されています。

スクロールダウンすると Initial Setup というセクションが表示されます。警告メッセージ"Cannot perform initial serialization because the predicate configuration is including item paths which do not exist in the database." が表示されています。設定ファイルにmasterデータベースに存在しないパスが含まれているためこのメッセージが表示されています。実は、コピーして作成したUnicorn.Configs.Default.configには存在しないアイテムをシリアライズする設定が記載されています。

Visual Studioに戻って Unicorn.Configs.Default.config を開いて、 <predicate>セクションに移動すると下図のように YourSite というアイテムがUnicornで管理するパスが含まれていることが分かります。ここは本来は自分たちが管理するソリューションを表すフォルダーアイテムの名前に置き換えて使うようにサンプルの設定が記載されています。

今回はとりあえず動く環境を作るということで、 下記のように /YourSite の文字を削除します。

<include name="Layouts" database="master" path="/sitecore/layout/Layouts" />
<include name="Templates" database="master" path="/sitecore/templates" />

変更後は次のようになります。もちろん実際に開発するときは、Unicornで管理するツリーの範囲は絞り込むようにしてください。

再度発行して、 Unicornのコントロールパネル(/Unicorn.aspx)にアクセスしします。Initial Setupのセクションに移動すると、今度は Perform Initial Serialization of My Site というボタンがクリックできるようになっています。このリンクをクリックして初期セットアップ - アイテムからファイルにシリアライズ - を実施します。

ページ上にコンソールが表示されて、結果が表示されます。

ログレベルはUnicorn.aspxページ先頭のOptionsのリンクから変更できます。

return to the control panel? をクリックしてコントロールパネルのページに戻れます。コンテンツツリーのアイテムの内容で、シリアライズされたファイルを作成しなおす場合は、 Reserialize ボタンをクリックします。Unicornの設定を変更した後もこのボタンを使ってシリアライズしたファイルを再作成してください。ソースコード管理システムから取得した最新のシリアライズされたファイルの定義からアイテムを作成する場合は sync ボタンをクリックします。

デフォルトの設定では /Data/Unicornフォルダーにシリアライズされたファイルが格納されるようになります。

ちなみにUnicornで自動的にシリアライズされるアイテムをコンテンツエディターで表示すると、下図のようにメッセージが表示されるようになります。

2.まとめ

説明は以上です。アイテムをシリアル化し、シリアライズされたファイルをマスターとして使うことで、ソース管理システムで簡単にバージョン管理を行えるようになります。シリアル化されたファイルから定義系のアイテムを他の開発者の環境に同期できるので各開発者の開発環境をプログラムと同じように簡単に最新の状態で管理することができるようになります。

開発者は定期的にソースコードをリポジトリから取得するのと同じようにアイテムの定義をソースコード管理システムから取得してsyncボタンでアイテムとして読み込むことで定義アイテムを簡単に最新化できます。コンフリクトが発生した場合でもソースコード管理システムのマージ機能を利用することができます。

Unicornはプログラムを使ってシリアライズ/デシリアライズしたり、ファイル自身をアイテムとして読み込んだりといったより高度な方法も用意されています。詳細に関しては次のリンクをご参照下さい。

Unicorn
https://github.com/kamsar/Unicorn