Sandcastleを最低限使うための最初のメモ

縦割りじゃなくて横割りの開発をする場合には、層ごとに公開するAPIのドキュメントは必須ですよね。
そんな訳で、Silverlight開発というか、C#開発でのAPIドキュメントの作り方を調べます。

どんな方法があるのか?

Javaで開発をしていた頃はチームの方針でJavadocを使っていました。Eclipseからもさっくり作れて簡単でした、きっとMS様のことなのでさらに簡単に作れる方法を提供してくれている事でしょう。ワクワク

とりあえず2つ

見つかりました。

  1. Sandcastle
  2. NDoc

こちらのエントリによりますと、ドキュメント作成の方法が後2つぐらいあるのと、NDocがメンテされてないSandcastleが定番という事らしいです。なるほど。

そんな訳で

Sandcastleを採用する事にします。

Sandcastleの導入

インストールしたのは以下の二つです。リンクはTopページにしてあるのでDownloadページでダウンロードしてください。
インストールはインストーラが付いているので何も考えなくてOK。

  1. Sandcastle May 2008 Release (Version 2.4.10520)
  2. Sandcastle Help File Builder 1.8.0.1 Beta

Sandcastle Help File Builder はコマンドラインSandcastleGUIで使えるようにしてくれるようです。便利!!

Sandcastleを使ってみる

自分としてはJavadocのブラウザからさくっと見られる感じが好きだったので、普通のHTML形式での出力でやってみます。

0. 準備

ドキュメントを作りたいプロジェクトをVisual Studioで作っておきましょう。今回はVisual Studio 2008 Proでやってますが、Visual Studioからは何もやってないのでバージョンは何でもいいです。
加えて以下が必要です。

  1. プロジェクトのプロパティの「ビルド」の項目において、リリースのXMLドキュメントを作成するようにチェックを付ける
  2. 参照設定されているもの全てのローカルコピーを「True」にする。(これはSandcastle側でRefelense設定するのが面倒だから。)
  3. リリースビルドをして正常終了する事を確認し、出力されたDLLとXMLファイルの場所を確認しておく。
1. 新規プロジェクトを作る


File -> New Projectを選択すると、選択画面が出てくるのでドキュメントファイル作成のルートとなる場所に名前を付けてSandcastleのプロジェクトファイル(.shfbproj)を作ります。
プロジェクト単位で作りたいなら.projファイルがある場所に同名で作る、複数プロジェクトのドキュメントを同時に作るなら、.slnファイルがある場所に同名で作ればいいんじゃないかな。(適当...)

今回はEntityDataModelSampleっていう過去に作ったプロジェクトに対してやっています。よってこんな感じ。

EntityDataModelSample/
   + EntityDataModelSample.proj
   + EntityDataModelSample.shfbproj
   + Bin/
   |  + Release/
   |      + EntityDataModelSample.dll
   |      + EntityDataModelSample.XML
   + ソースとか..

すると、こんな感じの画面が出てきます。

2. ドキュメント生成対象を設定する。

Project ExplorerからDocumentation Sourceを右クリックしAdd Documentation Source...を選択します。

ファイル選択画面になりますので、準備で生成しておいたdllを選択します。
すると、dllとxmlがProject Explorerに追加されます。

Referenceには何も設定しません、ローカルコピーで全て上記で設定したdllと同じ場所にあるからです。
(というか、正直Referenceの設定に関してはまだよく理解できていないので、とりあえずローカルコピーTrueで成功したからそうしているだけですorz..)

2.5 詳細なプロジェクトのプロパティを設定する前に..

この時点で一度ドキュメントを作ってみます。ただし、HTML Helpのコンパイラが無いと無理だけど。。持ってると仮定して。(C:\Program Files\HTML Help Workshopとかあればたぶん大丈夫。)
リリースモードにして、Documentation -> Build Projectを選択すればOKです。Build Outputタブが現れてゴリゴリと作ってくれます。

reference resolve errorみたいなのが出てたら参照がまずいと思います。ローカルコピーを確認してみてください。
さて、成功したら早速確認してみましょう!まずどこにできているかですが、以下の場所にできています。

EntityDataModelSample/
   + EntityDataModelSample.proj
   + EntityDataModelSample.shfbproj
   + Bin/
   |  + Release/
   |      + EntityDataModelSample.dll
   |      + EntityDataModelSample.XML
   + ソースとか..
   + Help  <== ココ!!
      + Documentation.chm
      + LastBuild.log

Documentationというのはデフォルトの名前なので変更可能です。

3 詳細なプロジェクトのプロパティを設定する(少しだけ..)
プロパティカテゴリ プロパティ名 変更値と理由
Build FrameworkVersion 3.0
  HelpFileFormat Website (素のHTMLで欲しいので)
Comments NamespaceSummaries 名前空間の説明を書きたい
  ProjectSummary プロジェクトの説明を書きたい
Help File Help Title タイトルを設定したい
  Language 日本語
  NamingMethod MemberName

とりあえずこれぐらいでしょうか、後はおいおい調べていかないと。。

4 Websiteとして出力する

さて、3の設定で出力をWebsite形式に変えたので、次のビルドでは出力が変わるはずです。さっそくビルドしてみます。
...こんな小さなプロジェクトでも2分近くかかりますね。。
ではフォルダ構成はどうなっているでしょうか。

EntityDataModelSample/
   + EntityDataModelSample.proj
   + EntityDataModelSample.shfbproj
   + Bin/
   |  + Release/
   |      + EntityDataModelSample.dll
   |      + EntityDataModelSample.XML
   + ソースとか..
   + Help
      + Index.html
      + Web.config
      + Index.aspx
      + .....etc

Web.configやaspx拡張子のものができている事から分かるとおり、ASP.NETのデータもできています。これをIISにホストしてもいいのですが、うちのサーバーマシンはあいにくLinuxですし、検索とは必要ないので単純に静的なページを閲覧できるだけでよいわけです。
では、Index.htmlをブラウザで開いてみましょう。APIドキュメントが表示されたでしょうか?

5 まとめ

GUIから非常に簡単にAPIドキュメントが生成できました。しかもAPIドキュメント用のプロジェクトとして残るので、名前空間やプロジェクトのSummaryも一緒にバージョン管理する事ができます。う〜ん、素晴らしい。

会社での作業はだいたい機能単位の縦割りで作業するのであんまりメンバーにAPIを公開をする必要ってないんですが(それはそれで気楽でいい)、横割りだとAPI考えたりと、また違った楽しみがありますね。