Cube のプロジェクト構成およびビルド&テスト方法

現在、cube-soft@GitHub には CubePDFCubeICE 等の実装コードを始めとして様々なリポジトリが存在します。この記事では、これらのリポジトリを修正する際の基本的な情報について記載します。

ディレクトリ構成

<WorkDirectory>
  + Cube.Core
  + Cube.FileSystem
  + Cube.FileSystem.SevenZip
  + Cube.Forms
  + Cube.Images
  + Cube.Net
  + Cube.Pdf
  + Cube.Xui
  + packages
  + resources
    + native
      + x86
      + x64

Cube プロジェクトの各リポジトリは、ローカル環境において上記のように配置されている事を想定しています。ただし、Cube.* ディレクトリに関しては異なるリポジトリ間では NuGet パッケージ経由で参照設定を行っているので、必要な(修正したい)リポジトリのみが配置されていれば問題ありません。

packages ディレクトリには NuGet で取得したパッケージ、resources ディレクトリにはそれ以外のライブラリを配置します。packages ディレクトリに関しては、nuget コマンドまたは Visual Studio 経由でパッケージの復元を実行すれば自動的に配置されるため、特に気にする必要はありません。resources ディレクトリには、native と言うサブディレクトリを作成し、そこにアンマネージド・ライブラリを x86/x64 別に配置します。現在、Cube プロジェクトで利用しているアンマネージド・ライブラリは以下の 2 種類です。

リポジトリ ライブラリ ディレクトリ
Cube.Pdf Ghostscript gs
Cube.FileSystem.SevenZip 7-Zip 7z

これらのライブラリは必ずしもここに配置する必要はありませんが(最終的な実行ディレクトリに存在しておけば良い)、後述する Rakefile との兼ね合い、および Continuous Integration (CI) 環境である AppVeyor とディレクトリ配置を統一する意味で、このディレクトリ構成としています。尚、Cube プロジェクトで使用しているアンマネージド・ライブラリは cube-soft@GitHub 内の各種 GitHub Releases からもダウンロード可能です。詳細については、下記を参照下さい。

Git ブランチ構成

Cube プロジェクトには、master, stable, net35 と言う 3 種類のブランチが存在します。この中で、特に何もしなくてもビルド可能なブランチは stable ブランチとなります。そのため、通常は stable ブランチを起点にすると楽です。net35 ブランチは、stable ブランチと同等の内容を .NET Framework 3.5 ターゲットでビルド可能にしたものなので、必要な場合以外は無視して構いません。

master ブランチは、開発中のものまで含めた最新の状態であるため、NuGet でまだ公開されていないバージョンを参照する事があります。リポジトリ直下に配置している NuGet.config に開発中の NuGet パッケージを取得するための URL を記述しているため、master ブランチでも問題なくビルドできるとは思いますが、予期せぬ不都合が発生する可能性もあります。また、参照されている NuGet パッケージ自体にも、該当バージョンが NuGet パッケージとして公開されるまでに度々、修正が行われます。ビルドに失敗する等の問題が発生した場合は rake clean コマンドを実行するか、packages ディレクトリにある各種 cube.* ディレクトリを手動で削除して下さい。

ビルド&テスト方法

ビルドは Visual Studio を起動して「ビルド」メニューを選択すれば、特に難しい点はないかと思います。テストフレームワークとして NUnit を使用しているので、Visual Studio 上でユニットテストを実行する場合は拡張機能から NUnit3 Test Adapter を選択してインストールして下さい。

コマンドライン上からの各種実行に関しては Rakefile に記述しているため、Ruby および Rake の実行環境が必要となります。Rakefile に記述しているタスクは clean, build, copy, pack, test の 6 種類で(copy は存在しない場合もある)、デフォルトでは test 以外のタスクが順に実行されます。clean は対象オブジェクトを消去し、build はその名の通りビルドを実行、pack は NuGet パッケージの作成用タスクです。尚、これらのタスク実行中には stable ブランチと net35 ブランチを何度か切り替えるので注意して下さい。

copy タスクは、必要なアンマネージド・ライブラリを bin 下の各ディレクトリにコピーします。この時、コピー元のファイル群は resources/native に存在する事を想定しているので、それらのファイルは該当ディレクトリに配置して下さい。また、Architecture (x86, x64, AnyCPU), Configuration (Debug, Release), Branch (stable, net35) 毎に出力ディレクトリが異なるので、最終的に 12 種類のディレクトリにコピーされます。

test タスクは、現在のブランチを対象にして、ビルドと NUnit によるテストを実行します。これ以外のタスクは、現在のブランチが何かに関わらず stable, net35 の 2 種類のブランチを対象とするので、このタスクのみ特殊となります。尚、ユニットテストは、ローカル環境における開発中は Visual Studio の GUI で確認する事が多いので、現状では net35 ブランチのテスト結果確認用と言う意味合いが強くなっています(Visual Studio の該当機能が .NET Framework 3.5 非対応となったため)。

その他、AppVeyor における CI 実行内容はリポジトリ毎に存在する AppVeyor.yml に記述しているので、こちらも何かの理解に役立つかもしれません。