Sitecoreのライブラリを開発する
Tags: sitecore, nuget, dotnet
Published: 2020-12-24 06:08:54

先日Sitecoreのレコメンドライブラリ「[Cairngorm](https://github.com/xirtardauq/Cairngorm)」をリリースしました。作成にあたって色々詰まったところがあったので、今回は一からライブラリを作成する方法を解説します。

Sitecoreのライブラリに特有の作業は「プロジェクトの作成」節だけなので、パッケージの作成方法をご存じの方はそれ以外は飛ばしてOKです。

## プロジェクトの作成
まずはVisual Studioで以下の設定でプロジェクトを作成します。

- テンプレート: `クラス ライブラリ (.NET Framework)`
- フレームワーク: `.NET Framework 4.5.2`

つぎにライブラリの作成にあたって必要になるSitecore関連のパッケージをNuGetでインストールします。
インストールするバージョンは**8.2.160729**を指定してください。今回は例として、`Sitecore.Kernel`をインストールして進めます。

一度Visual Studioを閉じて、プロジェクトフォルダにある "packages.config" を開いてください。Sitecore.Kernelのpackageノードに`developmentDependency="true"`を追加しましょう。

```xml
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Sitecore.Kernel" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
</packages>
```

これで、Sitecoreのバージョンに依存しないライブラリが作成できます。具体的には Sitecore 8.2.1 - 9.x に対応できます。おそらく10にも対応できると思いますが、試していないのでわかりません。  

## ライブラリの実装
Visual Studioを開き、ライブラリの中身を実装します。ここは特に注意点はありません。好きなようにコードを書いてください（もちろん、.NET Framework 4.5.2なので構文には制限があります）。

configファイルを使うライブラリの場合は、プロジェクトにファイルを追加してプロパティでビルドアクションを「コンテンツ」に設定しておいてください。こうしておくと、NuGetでライブラリをインストールすると自動的にconfigファイルが追加されるようになります。  

## NuGetパッケージの設定
実装を終えたら、`AssemblyInfo.cs`を編集します。それぞれの項目に何を設定すべきかは調べれば出てくると思いますが、ひとまず以下の項目を記述しておけばOKです。  

- `AssemblyTitle`: ライブラリ名
- `AssemblyCompany`: 作成者の名前
- `AssemblyProduct`: ライブラリ名
- `AssemblyCopyright`: `"Copyright c {年} {作成者名}"`
- `AssemblyVersion`: 適当なバージョン
- `AssemblyFileVersion`: 適当なバージョン

私は初めてのバージョンは大体`0.1.0`を設定しますが、別に`1.0.0`でも問題ないと思います。

次にプロジェクトフォルダ以下に`{プロジェクト名}.nuspec`という名前でファイルを作成します。ファイルの中身は以下を貼り付けてください。

```xml
<?xml version="1.0" encoding="utf-8"?>
<package>
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <license type="expression">MIT</license>
    <description>$description$</description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright @2020 $author$</copyright>
  </metadata>
</package>
```

ライセンスは好きなものを設定しましょう。また上記以外にも色々と設定項目があるので、詳しくは以下のURLを参照してください。

- https://docs.microsoft.com/ja-JP/nuget/reference/nuspec


## NuGetパッケージの作成
パッケージの作成にはNuGet CLIを使います。以下のURLからnuget.exeをダウンロードして適当なフォルダに配置し、パスを通しておいてください。

- https://docs.microsoft.com/ja-jp/nuget/consume-packages/install-use-packages-nuget-cli

まずはプロジェクトをRelease構成でビルドしてください。
ビルドが終わったらPowerShellを開き、以下のコマンドを実行します。

```powershell
$ cd /path/to/solution/project # プロジェクトのフォルダに移動
$ nuget pack -Prop Configuration=Release
```

処理が終わると、作業フォルダに `{プロジェクト名}.{バージョン}.nupkg` という名前でパッケージが生成されているはずです。

## パッケージの公開
最後に以下のサイトに従ってNuGet Galleryにパッケージを公開することができます。**一度公開したパッケージは削除できないので注意してください**。

- https://docs.microsoft.com/ja-jp/nuget/nuget-org/publish-a-package

上記以外にも`nuget push`コマンドを使って公開することもできます。どちらを使っても同じなので好きな方を選んでください。

また、NuGet Galleryに公開しなくても.nupkgファイルさえあればプロジェクトにインストールすることができます。

- [共有フォルダを利用してnugetパッケージを管理する方法 - Qiita](https://qiita.com/Midoliy/items/86c7d6b53bf226368f62#2-nuget-%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E7%AE%A1%E7%90%86%E7%94%A8%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%82%92%E7%94%A8%E6%84%8F%E3%81%99%E3%82%8B)

はじめから公開するのは怖い、という方や社内でだけ共有したい、という方はこちらの方法を使うことをオススメします。

## 最後に
今回はソースコードだけを提供するライブラリの作成方法でした。ライブラリの一部としてSitecoreのアイテムも提供したい場合は今回の方法では実現できません。  

アイテムも提供したい場合は、一度ライブラリを適用したSitecoreの環境を作成して、Sitecoreのパッケージを作成しましょう。作成したパッケージはGitHubやSitecore Marketplaceで公開すればOKです。

ライブラリの作成はいい経験にもなりますし、Sitecore MVPへの応募時のアピールにもなります。皆さんもぜひライブラリを作成して公開していきましょう。

それでは、Happy Sitecoring！