MOSA Multi-OS Software Artists

MOSAはソフトウェア開発者を支援します

  • iPhone/iPod touch アプリ紹介
  • MOSA掲示板
  • 活動履歴
  • About MOSA(English)

MOSA Developer News[MOSADeN=モサ伝]第288号

 2008-02-26

目次

  • 「「Wonderful Server Life」    第65回   田畑 英和
  • 小池邦人のCarbon視点でCocoa探求
  • ターミナルの向こうから      第20回  海上 忍 

「Wonderful Server Life」  第65回  田畑 英和

■  〜Open Directory編〜

 Leopardのアップデートv10.5.2がリリースされました。Mac OS XとMac OS XServerの両方でアップデートが配布されています。またサーバ関連ではSAN用のファイルシステムXsanの最新版Xsan 2が発表されています。Xsan 2の発表の影ではハードウェアRAIDのXserve RAIDがひっそりとその歴史に幕を閉じました。今後大容量ストレージを利用するにはサードパーティ製品を活用することになるでしょう。

◇まずは「システム環境設定」
 さて今回からアカウント管理について取り上げていきます。Tiger Serverのころはアカウント管理には主に「ワークグループマネージャ(以下WGM)」を使用していました。WGMを使用すればローカルアカウントとネットワークアカウントの両方を管理できます。「システム環境設定」でもローカルアカウントの管理はできますが、WGMを使ったほうがより細かな設定が出来ていました。例えばユーザIDの確認や変更はWGMを使う必要がありました。

 この「システム環境設定」なのですが、実はLeopardになってかなり機能強化されていますので、まずはこちらをみていきましょう。アカウント管理には「システム環境設定」の「アカウント」を使用しますが、画面構成も若干変更されています。「パスワード」と「ピクチャ」が1つの画面に統合され、.Macのアカウントも設定できるようになりました。また「ペアレンタルコントロール」は独立した設定項目になりました。「ログインオプション」は設定項目が増え、ネットワークユーザのログインの許可を設定できます。
 さらに大きな変更点としては、登録可能なアカウントの種類が増えたことです。Leopardでは次の種類のアカウントを登録できるようになりました。

・Leopardの「システム環境設定」で登録可能なアカウント
  - 管理者
  - 通常
  - ペアレンタルコントロールで管理
  - 共有のみ
  - グループ

 管理者、通常ユーザ、ペアレンタルコントロールで管理の3つはTigerでも登録可能なユーザアカウントでした。Leopardではまず「共有のみ」のユーザが登録できるようになっています。このユーザを登録するとホームフォルダを持たずログインもできないユーザが作成されます。つまりファイル共有のためだけに使用するユーザを作成することができます。具体的にはユーザ属性が次のように設定されます。

・ホームのパス(NFSHomeDirectory)
/dev/null
・ログインシェル(UserShell)
/usr/bin/false

 基本的にはローカルユーザの一部の属性を制限しているので、Tigerでも手動でユーザ属性を変更すれば同じようなユーザを作成することはできましたが、Leoaprdでは「システム環境設定」で手軽に作成できるようになっています。
 またグループアカウントを登録できるようになったのもLeopardでの大きな変更点です。Tigerでも「NetInfoマネージャ」やコマンドラインからグループを作成することはできましたが、Leopardでは「システム環境設定」で名前を入力するだけで簡単にグループを作成できます。ちなみにユーザがデフォルトで所属するプライマリグループの仕様も変更になりました。Tigerではユーザの新規作成時に自動的作成されるグループがプライマリグループとして使用され、ユーザごとに専用のグループが存在していましたが、Leopardでは新規作成したユーザのプライマリグループはグループIDが20のstaffグループに変更になりました。Tigerからアップグレードした場合、Tiger時代の既存のユーザか、Leopardからの新規ユーザかでグループの扱いが異なることになります。

 さらにLeopardではゲストアカウントが用意されています。このアカウントを有効にするとパスワードなしでログイン可能なユーザが作成されます。ゲスアカウントでログインした場合、ログアウト時にはホームフォルダ内に作成したデータは自動的に削除されます。ただし、ホームフォルダ外に作成したデータはそのまま残ります。このゲストアカウントですが、ユーザ属性は次のように設定されます。

・ゲストアカウントの主なユーザ属性
  ホームのパス:/Users/Guest
  名前:ゲストアカウント
  ユーザ名:Guest
  ユーザID:201

 ログインウインドウをユーザのリストではなく、名前とパスワードにしていると名前もしくはユーザ名を手入力する必要がありますので、よく覚えておきましょう。ちなみにゲストアカウントが存在しない状態で「Guest」というユーザ名のユーザを作成していると、「Guest1」というユーザ名のアカウントがゲストアカウントとして作成されます。混乱を避けるため今後は「Guest」というユーザ名のユーザアカウントは作成しないほうがよいでしょう。

 これだけではありません、Leopardでは細かなユーザ属性も「システム環境設定」で管理できるようになっています。「アカウント」画面で左側に表示されるアカウントのリストから任意のアカウントを選択し、Ctrlキーを押しながらクリックします。すると「詳細オプション」メニューが表示され、次のユーザ属性が変更可能になります。

・詳細オプションで変更可能なユーザ属性
  ユーザID(UniqueID)
  グループID(PrimaryGroupID)
  ユーザ名(RecordName)
  ログインシェル(UserShell)
  ホームディレクトリ(NFSHomeDirectory)
  UUID(GeneratedeUID)
  エイリアス(2つめ以降のRecordName)

 LeopardになってからNetInfoおよび「NetInfoマネージャ」が廃止されたため、GUI上から任意のユーザ属性が管理できなくなってしまいましたが、「システム環境設定」が大幅に拡張されましたので、かなりの部分がまかなえるようになりました。また、「ワークグループマネージャ」を使ってもローカルアカウントの管理ができるのはTigerのころと同様です。

 今回は「システム環境設定」の解説になりましたが、ここで解説したことはMac OS XだけではなくMac OS X Serverにも共通のことですので、ぜひ参考にしてみてください。次回は新しい管理ツール「サーバ環境設定」でのアカウント管理について解説します。
次回へつづく                             

小池邦人のCarbon視点でCocoa探求(2008/02/22)

〜 Document-based Application 〜

今回は、「しんぶんし 3」プロジェクトを「Cocoa Document-basedApplication」に切り替えてみます。こちらのアプリケーションタイプで注意すべき点を調査しながら、モデル・オブジェクトの実装を考えたいと思います。

さて、プロジェクトの引っ越しをしましょう。Xcodeで新規プロジェクトを作成する時に「Cocoa Document-based Application」テンプレート(雛形)を選択します。プロジェクトの名称は「Shinbunshi3」を引き継ぎます。新規プロジェクトが保存されたら、前回のプロジェクトの「Resources」フォルダ内の画像、アイコン、InfoPlist.stringsファイルを移動させます。nibファイルについては、About.nibの方は、そのまま移動してもかまいませんが、MainMenu.nibは作り直す必要があります。

メニューオブジェクト(MainMenu)のタイトルやアイテムを日本語にローカライズしたら、ApplicationConrollerを再度作成して、アバウトメニューにopenAboutWindow:(アクション・メソッド)を割り当てます。この作業を行っていて気づいたのですが、編集メニューの「検索」と「自動置換」アイテムのサブメニューに、まったく同じコマンドキーが割り振られています。Xcodeのテンプレート作成時のバグだと思いますので(多分)、「自動置換」の方のコマンドキー割り当ては消しておきましょう。

前プロジェクトとは異なり、MainMenu.nibの方にはメインウィンドウのオブジェクトは登録されていません。プロジェクトのウィンドウ(今回はドキュメントウィンドウと呼ぶ)は、新規作成されたMyDocument.nibの方に登録されています。また、Info.plistファイルも、ターゲットの情報ダイアログの「プロパティ」で編集し直し、前回と同等に仕上げておきます。ただし、この時に注意しなければいけないのは、「書類のタイプ」の一番上に登録されている「名称」がDocumentTypeで「クラス」がmyDocumentの内容を消さないことです。

一番上の設定が「しんぶんし 3」のドキュメントタイプとなりますので、「拡張子」にsinbを「OSタイプ」に’SinB’を追加しておきます。その下に、前回の画像ファイルのタイプなどを追加すればOKです。それから、せっかくですので、ドキュメントファイル用のアイコンも「SinB.icns」という名称で登録しておきます。アイコンファイルの方は、アプリアイコンと同じ場所に保存しておき、アプリケーション・バンドルへとコピーされるように新プロジェクトのResourcesグループにも登録してきます。

最後はソースファイルです。アバウトダイアログ用に作成した、ApplicationConroller.mとApplicationConroller.hは、そのまま新プロジェクトに登録しても大丈夫です。それから、新プロジェクトにはMyDocument.mとMyDocument.hいう2つの新しソースファイルが登録されています。これが、Info.plistでも記載されていた、MyDocumentクラス(NSDocumentクラスのサブクラス)の実装先となります。具体的に言えば、「しんぶんし3」のドキュメントファイルの読み込み(ロード)や保存(セーブ)処理などを記述するソースファイルとなります。MyDocument.hの方は、前回からの定義を引き継げば…

@interface MyDocument : NSDocument
{
    NSMutableArray     *_list;
}
@end


といった内容になります。「しんぶんし3」のドキュメントファイルの中身は、ズバリNSMutableArrayとして保存されている_listの中身(前回示したImageFileオブジェクトの配列)ということになります。

後々必要となるオブジェクトは、先んじてMyDocument.nibの方に登録しておくこともできます。そのため、MyDocument.nibの「File’s Owner」は、MyDocumentクラスと定義されており、MyDocumentクラスの「window」アウトレットにはドキュメントウィンドウ(初期の名称はwindow)が、ドキュメントウィンドウの「delegate」には File’s Ownerが設定されています。ぜひ一度、Interface Builderのインスペクターで、この両者の関係を調べてみましょう。参考になると思います。

「Cocoa Document-based Application」がどういった物かと言うと、ワープロやペイントソフトなどのアプリケーションを思い浮かべれば良いと思います。特定のファイルをオープンしてウィンドウに表示し、それを編集した後に再度HDへ保存するという一連の処理を提供するアプリケーションのことです。こうしたアプリケーションについては、ある程度「やらなければいけない事柄」が決まっていますので、その部分をCocoa AppKit Framework(クラス)が助けてくれる仕組みが用意されていると思ってください。

助けてくれるのは、NSDocumentController、NSDocument、NSWindowController
の3つのクラスです。NSDocumentControllerはアプリケーションに関連付けされたドキュメント(Info.plistに記載されている)を管理し、ドキュメントの新規作成やファイルの読み込み処理を受け持ちます。このクラスのインスタンスはひとつだけ作られており、アプリケーションの裏方さんとして働きます。NSApplicationと似たような役割ですね。

NSDocumentのインスタンスは、ひとつのドキュメントファイルに対してひとつだけ作られます。クラスの実装は、NSDocumentのサブクラスである「MyDocument」を作成し、NSDocumentクラスのメソッドをオーバーライド(書き直す)して行きます。テンプレートから作成されたMyDocument.mには、既にオーバライドすべき(必要であれば)いくつかのメソッドが記述されており、英語のコメントで何の処理をするメソッドなのかが表記されています。とりあえず、以下の5つのメソッドがそれに相当します。

- (id)init

- (NSString *)windowNibName

- (void)windowControllerDidLoadNib:(NSWindowController *)aController

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName
                                                  error:(NSError **)outError


3つのうち最後のNSWindowControllerは、ドキュメントを表示するウィンドウのコントロール・オブジェクトです。通常、ひとつのファイルに対しドキュメントウィンドウはひとつ用意されるので、NSDocumentにひとつのNSWindowControllerのインスタンスが関連付けられます。ただし、大規模で複雑なアプリケーションによっては、ひとつのドキュメントに複数のウィンドウ(ビュー)が必要となる場合があります。そうした場合には、ウィンドウと同数のNSWindowControllerインスタンスが作成されます。

つまり、「Document-based Application」においては、NSDocumentが、モデル・コントローラ・オブジェクトで、NSWindowControllerがビュー・コントローラ・オブジェクトの役割を持ちます。次回は、MyDocument.mでオーバライドしなければいけない上記メソッドの内容を解説しながら、アプリケーション開発を進めて行きましょう。

つづく                                

ターミナルの向こうから      第20回  海上 忍

〜 スプレッドシートとの共存を考える (2)〜

 前回は、Perlモジュール「Spreadsheet::WriteExcel」を利用すれば、Excel97-2007互換のExcelブックを作成できることを紹介しました。今回は、このモジュールで日本語を扱うときの約束事を紹介します。

・MS-Office文書仕様へ自由にアクセス
 Microsoftが、保有資産の活用とサードパーティーに対する姿勢を大きく変えました。前回から(オープンソースソフトウェアを利用した)Excelブックの読み書きを取り上げているため、少し触れておきます。
 まず、MS-Office 97-2007のファイルフォーマット仕様書が自由に閲覧可能になりました。従来はメールアドレスの登録など手続きが必要でしたが、すでにWebサイト(http://www.microsoft.com/interop/docs/OfficeBinaryFormats.mspx)から自由に仕様書をダウンロードできます。ライセンスにはMicrosoft OpenSpecification Promise (OSP) が適用されるので、特許権は主張されないうえ経済的な負担も発生しません。OOXMLの普及を待たずして、MS-Office 97-2007文書完全互換のアプリケーションが開発可能になったわけです。

MS-Office 97-2007のバイナリフォーマット仕様がOSPで公開
http://journal.mycom.co.jp/news/2008/02/19/005/

 その数日後、Windows VistaやOffice 2007などMicrosoftの主要製品についても、30,000ページ以上のドキュメントがMSDNで公開されました。巷では、EUにおける独禁法訴訟対策と揶揄されているようですが、この決断により(MS社製品とそれ以外の製品との)相互運用性が高まることは確実だと思います。決断の背景はともかく、歓迎すべきことは確かだろうと思います。

Microsoft、主要製品のオープンネスを武器に – 相互運用を高める新4原則
http://journal.mycom.co.jp/news/2008/02/22/005/index.html

・Spreadsheet::WriteExcelで日本語を使う
 さて、本題に入ります。前回は、Perlの「Spreadsheet::WriteExcel」モジュールについて、なにができるかをサラリと紹介しましたが、今回はいくつかポイントを絞り解説してみます。すぐにリファレンスに当たりたい方は、こちら
(http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel2.20/lib/Spreadsheet/WriteExcel.pm)を参照してください。

1) UTF-8で統一する
 Spreadsheet::WriteExcelにおける日本語の扱いですが、2月22日現在最新のバージョン2.20では、フォント指定を含めほぼ思い通りに利用できます。
 注意点としては、文字コードをUTF-8で統一することが挙げられます。Perlには、内部の文字コードにUTF-8を利用するようになったバージョン5.8以降を用意しましょう。なお、Leopardに収録のバージョンは5.8.8なので問題ありません。
 スクリプトの冒頭には「use utf8;」と記述し、ソースコード中の文字列がUTF8であることを明示する必要があります。UTF-8で記述するのですから、スクリプトを保存するときにもエンコード形式にはUTF-8を指定します。

2) ワークシートデフォルトのフォントスタイルを設定する
 Spreadsheet:WriteExcelには、行・桁・セル毎にスタイルを指定するメソッドが用意されていますが、ワークシートデフォルトのスタイルを指定するメソッドがありません。その結果、空白セルすべてがモジュールの標準値(Arial 10pt)に設定されてしまい、思いがけないフォントで表示されます。
 以下のスクリプトでは、デフォルトのセル書式を「12ポイントのヒラギノ丸ゴ Pro、セル中央に配置」に設定しています。フォント名には、日本語を含む一般的なもの(Font Book.appに表示されるフォント名)を使用できます。メイリオやDFP勘亭流といったフォントもOKです。
 なお、「MSゴシック」ではなく「MS ゴシック」とするなど、フォント名の綴りには注意が必要です。Excel 2008で試したところ、綴りに誤りがあるフォントはOsakaに置換されてしまいました。

- - - - -
#!/usr/bin/perl -w
use strict;
use utf8;
use Spreadsheet::WriteExcel;

my $mybook  = Spreadsheet::WriteExcel->new('sample.xls');

$mybook->{_formats}->[15]->set_properties(
      font  => 'ヒラギノ丸ゴ Pro',
      size  => 12,
      align => 'vcenter',
);

my $mysheet = $mybook->add_worksheet('MOSA1');
$mysheet->write(0, 0, 'もうすぐ春ですね!');
- - - - -

ニュース解説   MOSAic

★★★ 開発関連のニュースはwebに掲載中 ★★★
http://www.mosa.gr.jp/?page_id=1017

・1月のニュース
http://www.mosa.gr.jp/?p=1515

◇MOSAからのお知らせと編集後記は割愛します◇

 

 MOSA Developer News   略称[MOSADeN=モサ伝]
        配信停止 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.