at_yasu's blog

ロード的なことを

コマンドラインで作るAPIリファレンスの作成方法

Objective-Cとして書いています。MacOSXにはDeveloperToolsKitにHeaderdoc2htmlというコマンドが梱包されています。これは、Appleが作成したAPIドキュメントを作るためのコマンドで、C系のコメント(/*..*/)から必要な情報を抜き出して、ドキュメントに仕上げるコマンドです。なおここではさらっとしか書きません。

コマンド

コマンドラインで使用します。

[yasui@MacMini: ~/Desktop/ReinRous][19:24] $ open ReinRous/
[yasui@MacMini: ~/Desktop/ReinRous][19:24] $ headerdoc2html -o ReinRous Rein\ Rous\ iPhone/

Documentation will be written to ReinRous
HTML output mode.
======= Parsing Input Files =======

Processing Rein Rous iPhone/main.m
    Skipping. No HeaderDoc comments found.

...

Processing Rein Rous iPhone/Classes/Rein_Rous_iPhoneViewController.m
    Skipping. No HeaderDoc comments found.
...done
[yasui@MacMini: ~/Desktop/ReinRous][20:06] $ 

タグ

専用のタグを使います。例1のようにコメントを書けば、内部のコメントを取り出し、headerdocは自身のタグと理解し読み込みます。タグの先頭には@が付き、@tagという文法で一行で書きます。注意として、タグではないが「@」を使う場合は「\@」とエスケープする必要があります。日本語などのマルチバイト文字は使えます。

/*!
 */

例1 HeaderDocが読み込むコメントの記述

具体例クラス編

以下、ガイドラインに記載されている例で説明します。

例2,例3,例4は、それぞれObjective-Cのinterface,Protocol,Categoryのタグ説明の方法です。「@class」 にインターフェース名を書きます。同様に、Protocolには「@protocol」、Categoryには「@category」と書きます。「@discussion」に作成方法などのサンプルを書きます。「@class」「@protocol」「@category」「@discussion」それぞれ引数を一つ持ち、それぞれのタグに合わせた説明を書きます。以降の部分は説明文になります。内にはHTMLタグが書けたかと思います*1

/*!
 @class myInterface
 @discussion This is a discussion.
 It can span many lines or paragraphs.
*/
@interface myInterface : NSObject
@end

例2 : インターフェースのクラス説明

/*!
 @protocol myProtocol
 @discussion This is a discussion.
 It can span many lines or paragraphs.
*/
@protocol myProtocol
@end

例2 : プロトコルの説明

/*!
 @category myCategory(myMainClass)
 @discussion This is a discussion.
 It can span many lines or paragraphs.
*/
@interface myCategory(myMainClass)
@end

例3 : カテゴリーの説明


例5は、Objective-Cのメソッドの説明の書き方です。「@method」「@abstract」「@discussion」「@param」「@result」タグそれぞれ、メソッド名、概要、使用例、パラメーター、返り値を引数に書きます。

/*!
 @method dateWithString:calendarFormat:
 @abstract Creates and returns a calendar date initialized with the date
 specified in the string description.
 @discussion [An extended description of the method...]
 @param description A string specifying the date.
 @param format Conversion specifiers similar to those used in strftime().
 @result Returns the newly initialized date object or nil on error.
*/
+ (id)dateWithString:(NSString *)description calendarFormat:(NSString *)format;

例5 : メソッドの説明

具体例define,const,enum,struct編

例6は、define文の説明です。「@defined」「@abstract」「@discussion」はそれぞれ、define名、説明、使用例、以降に補足説明です。注意すべきは「@parseOnly」で、このタグがあるdefine文は非公開であるという意味になります。

 /*!
 @defined TRUE
 @abstract Defines the boolean true value.
 @parseOnly
 @discussion Extended discussion goes here.
 Lorem ipsum....
 */
 #define TRUE 1

例6 : defineの説明


例7はconst変数の説明です。「@const」「@abstract」「@discussion」はそれぞれ、変数名、説明、使用例、補足説明です。

 /*!
 @const kCFTypeArrayCallBacks
 @abstract Predefined CFArrayCallBacks structure containing a set of callbacks appropriate...
 @discussion Extended discussion goes here.
 Lorem ipsum....
 */
 const CFArrayCallBacks kCFTypeArrayCallBacks;

例7 : constの説明


例8はenumの説明です。「@enum」「@discussion」「@constant」は他同様、列挙体名、使用例、列挙名、以降に補足説明です。

/*!
 @enum Beverage Categories
 @abstract Categorizes beverages into groups of similar types.
 @constant kSoda Sweet, carbonated, non-alcoholic beverages.
 @constant kBeer Light, grain-based, alcoholic beverages.
 @constant kMilk Dairy beverages.
 @constant kWater Unflavored, non-sweet, non-caloric, non-alcoholic beverages.
 @discussion Extended discussion goes here.
 Lorem ipsum....
*/
enum {
 kSoda = (1 << 6),
 kBeer = (1 << 7),
 kMilk = (1 << 8),
 kWater = (1 << 9)
}

例8 : 列挙体の説明



例9は構造体の説明です。「@struct」「@abstruct」「@field」「@discussion」はそれぞれ、構造体名、説明、フィールド名、使用例、補足説明です。

/*!
 @struct TableOrigin
 @abstract Locates lower-left corner of table in screen coordinates.
 @field x Point on horizontal axis.
 @field y Point on vertical axis
 @discussion Extended discussion goes here.
 Lorem ipsum....
*/
struct TableOrigin {
 int x;
 int y;
}

例9 : 構造体の説明

*1:未確認