MOSA Developer News[MOSADeN=モサ伝]第268号
2007-09-25
目次
- 「「Wonderful Server Life」 第55回 田畑 英和
- 小池邦人のCarbon視点でCocoa探求
- ターミナルの向こうから 第10回 海上 忍
「Wonderful Server Life」 第55回 田畑 英和
〜NetBoot編〜
さて、今回からNetBootの解説を始めたいと思います。まずはNetBootとは何かというところから始めていきましょう。通常コンピュータを起動するには、そのコンピュータのハードディスク(外付けディスクの場合もありますね)にあらかじめOSをインストールしておき、そこから起動(Boot)します。
NetBootではその名前のとおり、ネットワークを利用したBootを行います。コンピュータに直接インストールしたOSを使用するのではなく、NetBootサーバ上に用意しておいたOSから、ネットワークを経由してコンピュータを起動します。これがNetBootなのです。
◇NetBoot環境の準備
NetBootを利用するには、NetBootサーバとして使用するMac OS X Serverをインストールしたサーバが最低1台必要になります。そしてサーバにNetBootクライアントで使用するOSを用意します。このクライアント用のOSはディスクイメージとして用意します。OSのディスクイメージは標準構成でも数ギガ程度の容量になるため、サーバのディスクには十分な空き容量が必要になります。
NetBootクライアントが複数あった場合でも、各クライアントはサーバ上の同じディスクイメージから起動することができます。また、異なる内容のシステムを使用したい場合は、サーバ上に複数のOSのディスクイメージを配置することもできます。
例えば、Intel搭載MacとPPC搭載Macが混在した環境でNetBootを行うような場合は、サーバ上にIntel用のOSディスクイメージとPPC用のディスクイメージを配置するといった使い方ができます。Intel MacをNetBootする場合ですが、NetBootサーバがPPCのMacを使用している場合でも、Intel用のディスクイメージを用意することにより運用が可能になります。
ディスクイメージの作成には、サーバ管理ツールの「システムイメージユーティリティ」を使用します。具体的なイメージの作成方法については次回解説する予定です。
NetBootサーバを構築するには、NetBootサービスを使用するだけでなく以下のようないくつかのサービスも必要になります。
・DHCP
NetBootクライアントはDHCPを使ってIPアドレスを取得するためDHCPサービスが必要になります。
・NFS
サーバ上のOSのディスクイメージはNFSを使ってNetBootクライアントに公開します。NFSが利用できない場合はHTTPを使用することもできますが、HTTPよりもNFSのほうがパフォーマンスに優れているため、通常はNFSを利用します。
・AFP
必ずしも必要ではないのですが、シャドウファイルと呼ばれるデータをサーバ上で管理するにはAFPサービスが必要になります。
以上がNetBootサーバを構築するために必要になるサービスです。さらにこれらのサービスに加えNetBoot環境では通常、ネットワークユーザおよびネットワークホームを使用します。そこで、別途Open Directoryのマスターとネットワークホームのためのファイルサーバが必要になります。
すべてのサービスを1台のサーバで運用することもできなくはないですが、これだけのサービスを1台のサーバで運用するよりも、複数のサーバを使用して負荷を分散させたほうが、システム全体のパフォーマンスを向上させることが出来ます。
次にネットワーク環境ですが、NetBoot環境ではOSのデータをネットワークを経由してやりとりするため、なるべく高速なネットワークが必要になります。できればギガビットのスイッチを使用するのがよいでしょう。
OSのディスクイメージを作成するための準備ですが、まずはNetBootのクライアントとして使用するMacを通常どおりセットアップしてください。既存のシステムからNetBoot用のディスクイメージを作成することができます。
このとき注意が必要なのは、NetBootでは複数のクライアントが共通のディスクイメージを使用するということです。つまり最初にセットアップしたシステムが複数のNetBootクライアントで使用されるということです。ですので、セットアップのさいには特定のクライアントに依存するような設定はやらないようにしましょう。たとえばアプリケーションをインストールするさいに、1台のコンピュータでしか使用できないようなライセンスのシリアルナンバーを設定すると運用上問題が発生します。
それでは、次回は具体的なOSのディスクイメージの作成方法について解説する予定です。
つづく
小池邦人のCarbon視点でCocoa探求(2007/09/21)
〜 File’s Owner 〜
今回も引き続き、Cocoaプロジェクトに含まれるMainMenu.nibとMyDocument.nibの中身を調査します。File’s OwnerとFirst Responderアイコンは具体的にどんな役割を受け持っているのでしょうか?
CarbonプログラマがInterface BuilderでCocoaプロジェクト用のNibファイルを編集しようとした時、最初に目に入るのがFile’s OwnerとFirst Responderの2つのアイコンです。
Carbon用Nibファイルにはそのようなアイコンはありませんので「これは何だ?」というわけで、入門書を引っ張り出して調べ始めます。ところが、筆者もそうでしたが、これらのアイコンの名称が混乱を招き(First Responderは別の意味で検索されたりする)明確な答えが見つからずに悩むことになります。
Interface BuilderのInstancesタブに並んでいるアイコンのほとんどは、それぞれが何らかのクラスから生成されたオブジェクトを表しており、アプリケーションにNibファイルが読み込まれた時にインスタンスが生成され実体化します。WindowとMainMenuアイコンは、それぞれがNSWindowクラスとNSMenuクラスのオブジェクト(View Object)です。ところが、File’s OwnerやFirstResponderはそれ自体からオブジェクト(インスタンス)が生成されることはなく、まったく別の役割を受け持っています。まず先んじて、File’s Ownerについて詳しく調べてみましょう。
File’s Ownerは、Nibファイルが読み込まれた時に、その中で定義されているオブジェクトと、既にメモリ内に確保されている別オブジェクト「OwnerObject」とを接続する(関係づける)ために用意されています。つまり重要なことは、Nibファイルが読み込まれても、File’s Ownerに設定してあるクラスのオブジェクトは生成されないと言う点です。例えば、NSBundleクラスには、Nibファイルを読み込み、そこに定義されているすべてのオブジェクトを生成するloadNibNamedと言うクラスメソッドがあります。
(BOOL)loadNibNamed:(NSString *)nibName owner:(id)owner;
これを使い、自作MyObjectクラスのinitメソッドにおいて、MyObject.nibに定義されているオブジェクトをすべて呼び出す(生成する)には、以下のように記述します。
- (id)init
{
self = [super init];
[NSBundle loadNibNamed:@"About" owner:self];
return self;
}
selfは、作成(alloc)されたMyObjectクラスのオブジェクト自身です。そしてメッセージとしてOwner Objectを渡している箇所が、owner:selfの部分です。
selfは先んじて生成されており、MyObject.nib内にそのオブジェクトを定義する必要はありません。続いて、MyObjectのメソッドからMyObject.nib内に定義してあるオブジェクト(ウィンドウやコントローラ)を参照しなければいけないとすると、Interface Builderで2つのオブジェクト間を接続する(線を引く)必要があります。ところが、Nibファイル側にはMyObjectアイコンがありませんので、物理的に接続することは不可能となります。
そのため、その代用として使われるのがFile’s Ownerアイコンなのです。上記の例では、InspectorでFile’s OwnerのCustum ClassにMyObjectクラスを指定してから、他のアイコンと同様にオブジェクト間の接続に利用します。アイコンがアプリケーション形状であることから分かるように、 MainMenu.nibのFile’s OwnerのCustum ClassにはNSApplicationが割り当てられています。つまり、File’s Ownerアイコンがアプリケーションが生成したNSApplicationオブジェクトの代用として使われるわけです。
例を見てみます。MainMenuから「Quit NewApplication」アイテムを選び、InspectorでConnectionsのTraget/Actionを確認すると、アクションとしてterminate:がアサインされています。terminate:はNSApplicationのメソッドであり、アプリケーションを終了させる処理を実行します。Carbonで言えば、QuitApplicationEventLoop()やExitToShell()に相当します。InterfaceBuilderでオブジェクトの接続を見ると「Quit NewApplication」アイテムからFile’s Ownerアイコンへと線が引かれていることが分かります。
それではと言うことで、試しにCustum ClassのNSApplicationをNSObjectなどに変更してみます。すると、何度も「接続が切れるぞ!」というアラートが表示されますが、その警告を無視して実行すると、File’s Ownerのアイコン形状がアプリケーションから青色立方体に変わります。この状態でアプリケーションを起動すると、もはやNSApplicationオブジェクトとの接続関係が消えてしまっているので、Quitメニューは働かず、アプリケーションを終了させることができません。
Interface Builderでは、こうしたリンク切れの発生(不注意による)に対しては厳重な注意が必要なのですが、それはさておき、今度はMyDocument.nibの方のFile’s Ownerも見てみましょう。MyDocument.nibのFile’s Ownerアイコンには、NSDocumentのサブクラスであるMyDocumentクラスが割り当てられています。そして、ソースコードのMyDocument.hにはそのクラス定義が、MyDocument.mにはオーバーライド(書き換え)するNSDocumentメソッド(雛形)が記述されています。
ソースコードの解説は省略しますが、MyDocument.nibはファイルメニューから「新規」や「開く」が選択される度に読み込まれて、そこに定義されているオブジェクトを生成します。MyDocument.nibにはNSWindowオブジェクトがひとつ登録されていますが、InspectorのConnectionsで調べると、File’s OwnerのwindowアウトレットにWindow(NSWindow)が、WindowのdelegateアウトレットにFile’s Owne(MyDocument)が接続されていることが分かります。これが、MyDocument.nibファイルが読み込まれた後に、既存オブジェクトとの接続関係を確立するための情報となっています。
このような仕組みを見ると、どうも「File’s Owner」というアイコン名は不適切でユーザを混乱させているような気がします。単純に「Owner Object」とするか、Custum Classで選択されているクラス名(Owner Objectのクラス名)が表示される方が分かりやすいと思います。例えば、MainMenu.nibならNSApplcication、MyDocument.nibであればMyDocumentですね。ただし、後で作成したオブジェクトアイコンとは役目が異うわけですから、立方体の色を変えておけば(赤色とかに)より差別化しやすいのではないでしょうか?
次回は、もうひとつの謎のアイコンFirst Responderの仕組みを調べてみましょう。こちらも、File’s Owner同様「線を引く相手がいないぞ、さてどうしよう?」と言う疑問点が重要なポイントとなっています(笑)。
つづく
ターミナルの向こうから 第10回 海上 忍
〜 自動文書作成ツール「Doxygen」その1 〜
今回は、ソースコードに添付する文書を自動作成してくれるツール「Doxygen」を紹介します。
・What’s Doxygen?
Doxygenは、プログラマのための自動文書生成ツールです。各種ソースファイルにコメントとして記載されている文を抽出、再構成してHTMLやLaTeXの文書を作成します。起承転結や序破急といった文章の体裁や、いわゆる「てにをは」の使い方がチェックされるわけではありませんが、改めて文章を記述する手間が省けます。その意味では、文書生成ツールというよりコメント収集ツールと表現したほうが正確かもしれません。
もう1つの特徴としては、クラスの派生やファイルの依存関係を調べてグラフ化する機能が挙げられます。人力で行うにはとても手間のかかる作業ですが、Doxygenに任せれば数十秒で完了します。
Doxygenが対応する文書フォーマットは、HTMLとLaTeX、Man(roff形式)、リッチテキストとXMLの5種類です。生成される文書の内容に差はありませんが、広く配布する場合にはPDFへのコンバートが容易なLaTeXがお勧めです(LaTeXの導入方法については第7回を御参照ください)。オンラインでの公開が主目的の場合には、HTMLで十分でしょう。Doxygenは日本語をサポートしているので、どちらを選んでも支障はありません。
・Doxygenをインストール&セットアップする
Doxygenのインストールは、以下のサイトで配布されているMac OS X版バイナリパッケージを利用します。本校執筆時点の最新版(v1.5.3)はユニバーサルバイナリ化されているため、PowerPC/Intelの別なく導入できます。作業はかんたん、ディスクイメージをマウントしてDoxygen.appをApplicationsフォルダへドラッグ&ドロップすれば完了です。
http://www.stack.nl/~dimitri/doxygen/download.html
なお、Mac OS X版にはGUIが装備されていますが、現行バージョンではバンドル内部に格納されているコマンドの呼び出しに失敗します。面倒でも以下の手順に従い、コマンド部分を/usr/local/binディレクトリへコピーしておきます。それでもDoxygen.appは設定ファイルの作成に役立つため、慌てて削除する必要はありません。
- - - - -
$ cd /Applications/Doxygen.app/Contents/Resources/
$ sudo cp dot doxygen doxytag mscgen /usr/local/bin/
- - - - -
・Doxygenを試す
インストールが完了したところで、早速Doxygenの機能を試してみましょう。もちろん、皆さんご自身のソースコードを利用しても構いませんが、ここではDoxygen 1.5.3のソースコード(http://ftp.stack.nl/pub/users/dimitri/doxygen-1.5.3.src.tar.gz)を使うことにします。
Doxygenを実行するときには、必ず設定ファイルが必要です。コマンド版では、オプションや引数を与えず「doxygen」とだけ実行すると、Doxygenという名称の設定ファイルが自動生成されるので、それを作業対象のソースコードにあうようテキストエディタで編集します。
Mac OS X版の場合、この作業をGUIで行うことができます。Step 1にある[Wizard...]ボタンをクリックし、以下のとおり作業してください。
1. Projectタブを開き、Project Name欄に「Doxygen」と入力する。
2. 画面中ほどの[Select...]ボタンをクリックし、解凍しておいたDoxygen
1.5.3フォルダを選択する。[Scan recursively]もチェックする。
3. 画面下の[Select...]ボタンをクリックし、生成した文書を書き出すための
フォルダを指定する(適当なもので可)。
4. Modeタブを開き、使用している言語を選ぶ。Doxygen 1.5.3の場合は
「Optimize for C output」を指定する。
5. Outputタブを開き、生成する文書フォーマットの種類を指定する(複数指
定可)。
6. [OK]ボタンをクリックしてウィザードを終了する。
続けてStep 2の[Save...]ボタンをクリックし、デスクトップへ「Doxyfile」の名で保存しておきましょう。Step 3の空欄には、一次作業用のフォルダとしてデスクトップ(たとえば/Users/shinobu/Desktop)を指定しておきます。これで、Doxygen.appは終了して構いません。
最後は、次のコマンドラインをTerminalから実行します。しばらく待てばプロンプトが復帰するので、htmlフォルダ内の「index.html」を開くなり、latexフォルダ内のTeX文書をタイプセットするなりして、どのような文書が作成されたかを確認してください。
- - - - -
$ doxygen ~/Desktop/Doxyfile
- - - - -
これで完了……ならばいいのですが、日本語を含むファイルがある場合は、エンコーディングに即した処理を行わなければなりません。次回は、Doxygenで日本語を扱うときの注意点と対策を取り上げる予定です。
◇MOSAからのお知らせと編集後記は割愛します◇
配信停止 mailto:mosaden-ml@mosa.gr.jp
記事内容に関するご意見 mailto:mosaden-toukou@mosa.gr.jp
記事投稿受付 http://www.mosa.gr.jp/?page_id=850
Apple、Mac OSは米国アップル社の登録商標です。またそのほかの各製品名等
はそれぞれ各社の商標ならびに登録商標です。
このメールの再配信、および掲載された記事の無断転載を禁じます。
特定非営利活動法人MOSA http://www.mosa.gr.jp/
Copyright (C)2007 MOSA. All rights reserved.