MemoryPackは、Neueccさんが開発し、CySharpからリリースされている、シリアライザーと呼ばれる機能を提供するOSSライブラリです。
シリアライザーは、データを永続化(シリアライズ)する為の物で、インスタンスが持つデータをバイナリデータに変換する「シリアライズ」と、そのバイナリデータからインスタンスを再構築する「デシリアライズ」という2つの機能から構成されます。
今回MemoryPackを使ってみたところ、「これこそ求めていた物だ!」的な感触を得たので、触りの部分を何回かに分けて解説してみたいと思います。まずはVisualStudio2022での環境構築から。
関連コンポーネントの追加インストール
今回はコンソールアプリを作ります。UnityのみでVisualStudio2022を使っている場合、コンソールアプリ開発に必要なコンポーネントをインストール出来てないかもしれません(土屋がそうでした)。
「新しいプロジェクトの作成」ウィンドウで「コンソールアプリ」を選択出来ない場合は、「更にツールと機能をインストールする」を選択します。
「.NETデスクトップ開発」を確認し、必要なコンポーネントをインストールしてください。
プロジェクトの作成
準備が出来たので、新規プロジェクトを作成し、そのプロジェクトにMemoryPackをインストールします。
「新しいプロジェクトの作成」で「コンソールアプリ」を選択します。
プロジェクト名を入力して「次へ」を選択。
追加情報のフレームワークはデフォルトの「.NET8.0(長期的なサポート)」を選択して「次へ」。これで新規プロジェクトが作成されます。
NuGet経由でMemoryPackをインストールする
プロジェクトが作成されたら、ツリー内のプロジェクト名を右クリックし「NuGetパッケージの管理」を選択します。
「参照」タブを選択し、テキストボックスに"MemoryPack"と入力します。そうすると、NuGetに登録されたライブラリ内から検索結果が下部に列挙されます。一番上に表示される"MemoryPack"を選択し、右ペインの「インストール」を選択します。他にも"MemoryPack.Core""MemoryPack.Generator"など色々ありますが、これらは依存ライブラリだったり追加パックだったりするので気にしなくて大丈夫です。
「変更のプレビュー」ダイアログが表示されるので「適用」を選択します。これで必要なパッケージが全てインストールされます。
先程の画面に戻り「インストール済み」タブを開くと、MemoryPackパッケージがインストールされた事がシメされています。
無事にパッケージのインストールが終わりました。次回はコードを書いてみます。
"NuGet"について&名称の由来
NuGetは、マイクロソフトが開発・運用しているパッケージマネージャーと呼ばれるwebサービスです。クラウドで.NETライブラリのデータベースを管理し、VS経由で任意のパッケージを、他ライブラリとの依存関係を自動的に対応しながらインストールできます。 今回のMemoryPackのように、ユーザーもデータベースにパッケージを登録できます。
ライブラリは依存性の管理というのが大変でして、例えばAというライブラリがBCDというライブラリを内部で参照している場合、ABCDを全部インストールする必要があります、もちろんBCDも他のライブラリに依存している場合があります。
また、AはBのVer1.0には対応していますが、BのVer1.2は互換性が確認出来ていない場合とかが起こりえます。その為、適切なバージョンの依存ライブラリをインストールする必要があります。NuGetを使えば、このような依存性を自動的に対応してくれるわけです*1。
この"NuGet(「ニューゲット」と読むのが一般的らしい)"が何故"NuGet"と名付けられたのか以前から疑問で、しかし調べる程には興味がなかったんですが、良い機会なので調べてみました。公式な記録が無いので以下は検索した結果からの推測です。
"NuGet"は、元々は"NuPack"と言う名称で開発されていました。この名前は"新しい(Nu=New)パッケージ(Package)マネージャー"という意味だったと思われます。
しかし、既に"NUPACK"というソフトウェア*2が存在したため、名前の混同を避ける為に"NuGet"に改名したそうです。
"Pack"から"Get"への変更はまあ自然に思えます。ちなみに、"Nougat(ヌガー)"というお菓子を「ヌーゲット」と読む駄洒落みたいのがあり、それと"NuGet"をかけているのではないかとも言われているようです。
参考リンク
https://codeknowledge.livedoor.blog/archives/19433487.html
今回及び次回以降のコンソールアプリで使うソースコードはこちらのサイトの記事を参考にしています。この記事が無ければMemoryPackに対する苦手意識を克服出来なかったので、大変感謝しています。