MOSA Multi-OS Software Artists

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

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

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

2008-03-11

目次

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

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

  〜Open Directory編〜

 それでは今回は、Leopard Serverの新しい管理ツール「サーバ環境設定」を使ったアカウント管理を解説します。ひょっとすると前回解説した「システム環境設定」でのアカウント管理よりもシンプルかもしれません。
 「サーバ環境設定」はLeopard Serverの初期設定時にサーバ構成を「標準」もしくは「ワークグループ」に設定したときに使用できますが、まずは「標準」の場合を前提に話を進めて行きます。「ワークグループ」でも基本的には同じなのですが、若干違いがあります。違いについては次回以降の連載で解説したいと思います。

 「標準」のサーバ構成ではOpen Directoryのマスターが自動構築されることはこれまで解説してきましたが、「サーバ環境設定」で管理するアカウントは、Open Directoryのマスターで管理されるネットワークアカウントになります。Tiger Serverと同様に「ワークグループマネージャ」でも管理はできますが、複雑な設定をしない場合などは、「サーバ環境設定」のほうが圧倒的にお手軽です。まるで「システム環境設定」を使っているような感覚でアカウント管理ができます。
 管理可能なアカウントはユーザとグループに分かれていますがまずはユーザの管理からみていきましょう。ユーザの管理画面は「アカウント」「コンタクト情報」「サービス」「グループ」の4つから構成されています。

◇アカウント
 まずは基本となる画面です。ここで既存の各ユーザの確認やパスワードのリセットができます。左側のリストには登録済みユーザの一覧が表示され、左下の「+」「ー」ボタンでユーザの登録/削除を行います。ユーザ登録時には次の4つのパラメータを指定します。

・ユーザ登録時のパラメータ
  - 名前
  - ユーザ名
  - パスワード
  - 管理者権限の有無

 パスワードの設定には「システム環境設定」と同様にパスワードアシスタントが使用できます。パスワードですがパスワードがないユーザを登録することはできず、必ずパスワードを設定する必要があります。ただし「ワークグループマネージャ」でユーザを登録する場合はパスワードをなしにすることもできます。
 「システム環境設定」でユーザを登録したときにはホームが自動的に作成されますが、「サーバ環境設定」でユーザを登録してもホームは自動的には作成されません。これは前回説明した「共有のみ」のローカルユーザとよく似ています。ユーザ属性を確認すると、ホームのパスとログインシェルはデフォルトで次のように設定されていることが分かります。

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

・「アカウント」設定画面
http://www.htabata.com/Site/LeopardServer/Pages/Server_Preferences%28Standard%29.html#2

◇コンタクト情報
 次は「コンタクト情報」です。ここでは住所などの情報を管理します。入力したコンタクト情報はネットワーク経由で「アドレスブック」から参照することができまます。ただしデフォルトでは制限なしに情報を公開してしまいますので、サーバのアドレスさえ分かればネットワーク接続可能なクライアントからは自由にアクセスすることができます。運用にはくれぐれも注意しましょう。
 日本であればぜひともここにふりがなの属性を追加して欲しいところですが、残念ながらそういった属性は用意されていません。また、同様の情報は「ワークグループマネージャ」でも管理できます。

・「コンタクト情報」設定画面
http://www.htabata.com/Site/LeopardServer/Pages/Server_Preferences%28Standard%29.html#3

◇サービス
 この設定は重要です。ユーザごとに使用可能なサービスを許可することができます。ユーザを新規に追加すると、そのときに有効になっていたサービスは自動的に許可されますが、起動していないサービスは自動的には許可されません。一方ユーザを登録した後から起動したサービスはそのままでは利用できず、ユーザごとに手動でサービスを許可する必要があります。
 ですので、ユーザを登録したら必ずサービスの許可をチェックするようにしましょう。また後からサービスを起動した場合も、しっかりと確認をするようにしましょう。特定のサービスを利用しないことが分かっているユーザは、あらかじめサービスを許可しないでおけば余計なサーバへのアクセスを防ぐことができます。
 「システム環境設定」ではユーザごとにしかサービスの許可が管理できませんが、「サーバ管理」ではグループ単位でも管理することができます。また、「サーバ管理」のほうがより多くのサービスに対する許可を設定することができます。

・「サービス」設定画面
http://www.htabata.com/Site/LeopardServer/Pages/Server_Preferences%28Standard%29.html#4

◇グループ
 最後の画面では各ユーザが所属するグループを設定します。「サーバ環境設定」でユーザを追加した場合、自動的にWorkgroupのメンバーとして登録されます。「ワークグループマネージャ」で登録したユーザは自動的にはWorkgroupには登録されません。

・「グループ」設定画面
http://www.htabata.com/Site/LeopardServer/Pages/Server_Preferences%28Standard%29.html#5

 以上「サーバ環境設定」でのユーザ管理についてみてきました。今回解説しましたように「サーバ環境設定」と「ワークグループマネージャ」では一部挙動が異なる部分もあります。混乱を避けるために「サーバ環境設定」を使ってアカウント管理を行う場合は基本的にはこれを使用し、必要に応じて「ワークグループマネージャ」も併用するといった使い方がよいでしょう。
 それでは次回は「サーバ環境設定」でのグループ管理について解説する予定です。
次回へつづく                             

iPhone SDK登場に思う(2008/03/08)          小池邦人

3月6日(日本では 3月7日の深夜)Apple社のスペシャルイベントで待望のiPhone SDKが発表されました。即座に、ADCメンバーを対象にSDKβ版のダウンロードが開始されたのですが、Apple社のデベロッパーサイトへのアクセスがものすごく、すんなりとダウンロードできるようになるまで半日以上かかりました。Appleサイトがこんな激しいトラフィックに見舞われるのは、最近では珍しいことです。それだけ注目度が高いと言うことでしょうが、残念ながら、iPhone SDKβ版はNDA(秘密保持契約)扱いになるようで、その技術的な情報を公の場で掲載、議論することはできません。つまり、6月末に予定され
ている正式版が登場するまでは、雑誌やウェブなどにおいて、その技術内容の詳細が紹介される事はありません。

オンラインADCメンバーでもダウンロード可能ですので、配布対象制限は存在しないのに等しいのですが、相変わらずお堅い話です。まあ、中途半端な完成度のSDKについて色々と論評されるのを避けたいのでしょうが、「だったら約束通り2月末までに正式版を出してね!」と、突っ込みを入れたくなります(笑)そんなわけで、技術的な話題として取り上げることができるのは、スペシャルイベントでの発表内容(そこからの推測事項)のみと言うことになります。これでは、詳細な技術議論は何もできません。SDKを普及させ、出来る限りiPhoneアプリケーションを増やしたいという気持ちは、Apple社もユーザも同じでしょうから、もう少し柔軟な取り扱いはできないものかと思ってしまいます。

ところで、今までiPhone搭載のOSは「OS X」と呼ばれていましたが、iPhoneSDKの登場により、正式に「iPhone OS」と呼ばれることになったようです。スペシャルイベントでの発表では、iPhone OSは「Core OS」「Core Services」「Media」「Cocoa Touch」の4つのレイアに分かれています。個人的に嬉しいのは、各レイアには、Mac OS Xでなじみ深い「Framework」が多数採用されていることです。これであれば、Mac OS Xで習得した技術の多くが無駄にならず、iPhoneアプリケーションの開発にそのまま生かせます。特に、MediaレイアにおけるQuartz 2D、Core Animation、OpenGLの採用は(個人的にもお得意のFrameworkなので)自作iPhoneアプリに即生かせそうです。

iPhone OSに置ける3D描画環境は「OpenGL ES(Embedded System)」が担当します。最近では、3Dだけでなく2D描画にも大きな役割を持つOpenGLですが、iPhone OSでの採用により、その認知度がさらに上がる事を期待したいと思います。OpenGL ESは、携帯電話などの組み込み用3Dシステムとしてはよく知られていますが、パソコンの3D描画環境としては、やはりWindowsの「Direct X」が主流であり、どうしても、そちらに関する書籍や資料の充実が先行します。そのため、GPUメーカの目も、まずはそちらに向きがちで、機能的にOpenGLが後手を踏む状態が続いています。iPhone OSの採用によ
り、OpenGLの有効性が広く認知されれば、パソコンにおけるOpenGL環境の充実にも一役買うかもしれません。

今のところ、iPhone SDKβ版はLeopard(Mac OS X 10.5)用しか提供されていません。つまりMacintosh専用ということになります。XcodeやInterfaceBuilderなどの既存Mac OS X開発ツールがそのまま使われるので、Windows版やLinux版が登場するかどうかは怪しいところです。ちなみに、iPhoneシミュレータの仕組みを実装することは、特定のFrameworkには依存しないでしょうから、そんなに難しくはないと思われます。たとえCocoaやObjective-Cが必須だとしても、Mac OS Xの開発環境自体を別プラットフォームへ移植する(例えばCocoa for Windowsとか)よりは壁は低いはずです。ただし、実際にMacintosh以外のプラットフォーム用のSDKが出るのかと言えば、それはあり得ないかもしれません。

なにせ、SDKの使用環境がMacとMac OS Xに限られますから、iPhone用ネイティブアプリを開発しようとすれば、必ずMacを購入することになります。Apple社としは物理的「ハロー効果」と言うべきか…大変美味しい商売になるわけです(笑)。iPhoneが全世界でどの程度普及し、その有用性がどの程度認知されるかにも関わりますが、Apple社が言うように、2008初年度だけで1000万台の販売目標が達成できるとすれば、現Macデベロッパー以外のiPhoneデベロッパーによるMac需要も、かなりの数になると予想できます。間違いなく、短期間で現在のMacデベロッパーの数を抜くでしょうね。今から、今年のWWDCでの基調講演や朝食の席取りが不安になってきます…。

iPhone用アプリ開発に魅力を感じるソフトメーカや個人が増えれば、他のプラットフォームからの乗り換えや両刀使いも促進され、Macintosh自体に目を向けてくれる技術者や開発者も増えるかもしれません。今は「仮想環境」の普及で、MacでWindowsやLinuxも利用している技術者が増えていますが、さらにその傾向に拍車をかけることになります。これは、MacプラットフォームとMacOS Xに関しても大きなメリットとなるでしょう。現在、Mac用アプリケーションの主流はCocoa FrameworkとObjective-Cで開発されています。しかし、CocoaやObjective-Cによる開発作業があまり一般的でない(マイナーな)ために、Mac OS Xでのソフト開発には興味はあるのだが、二の足を踏んでいる別プラットフォーム開発者(潜在的なMac開発者)がかなり存在しています。

iPhone OSとSDKは、そういう人達をMacに引きつける起爆剤になって欲しいところです。また、Carbonや別Frameworkを使うMac開発者は、旧資産の活用やメンテナンス、技術資料の不足といった理由から、CocoaやObjective-Cへ移行しづらい状況が続いています。つまり、個人的にはいつでもOKなのですが、会社としてそうは動けないという問題です。 Apple社も、QuickTimeやCarbonの64Bit化を中止するなど、移行促進をサポートしていますが(笑)現実はなかなか難しい状況です。ところが、iPhone SDKでは、今のところCocoaとObjective-Cを使うしかありません。やるしかないとなれば、会社としても即実行となるでしょう。それは、Cocoaの素晴らしい特徴を多くの開発者にアピールする絶好の機会にもなり、関連技術資料や書籍の充実にも貢献するはずです。

今回、開発者(特に小規模や個人)にとって最も魅力的な発表は、開発したアプリケーションの配布に「App Store」が用意されている点だと思います。ソフト登録の仕組みや利益配分率なども「ざっくり」とシンプルで分かり易く定義されています。アプリケーション登録(出店)についても、難しい認定を得る必要もなく、$99の費用で「iPhone Dveloper Program」に加入しさえすればOKのようです。このあたりの仕組みは、さすがにApple社、さすがにJobs CEOと言ったところでしょうか(笑)。ただし「iPhone Developer Program」は米国先行となっています。その点は、日本の開発者としては少々不満なのですが、すみやかに加入手続きが始まることを期待したいと思います。

まあ、インターネット経由でのソフト販売そのものは珍しい事ではありません。筆者も何度か販売経験がありますが、供給元が一本に絞られているというのは結構魅力的です。購入したいお客を集約でき、煩雑な手間を省けます。Webアプリケーション開発者であれば、サイトにアクセスするためのアプリを有料で提供することで、今までは個人レベルでは難しかった「課金」という仕組みを簡単に実現できそうです。また、iPhoneアプケーションは物理的に小規模ですので、膨大な資金と人材を使い力ずくで開発した「モンスターソフト」が市場を荒らす可能性も少ないでしょう。つまり、個人や小規模といった
点がデメリットとはならず、アイデアに対して小回りが利くというメリットになる可能性が大きいのです。
パソコン自体、もしくはApple IIや初代Macが登場した時もそうでしたが、新しいプラットフォームが登場したばかりには、それを所有しているユーザには大きな「飢餓感」があります。つまり、面白くて変わっていて興味ある物なら何でも購入するのです(笑)。それの価格が1万であれば、少し「ためらい」が生じますが(昔はそれも無かった)1000円なら一瞬考えるだけ、100円なら間違いなく「即ポチ」するでしょう。自動販売機で缶コーヒーを購入する気軽さと同じです。価格の妥当性まで考えが及ぶ暇もなくダウンロードされていくわけです。最初のうちは英語版さえ作成しておけば(多分)市場ターゲットは全世界です。100円の商品を年間10万本販売できれば1000万の収入となります。大企業であれば大したことはないのですが、個人であれば大変魅力的な金額です。

App Storeが成功するかどうかは、今後、iPhoneが魅力的なプラットフォームとしてユーザを魅了するかどうかにかかっています。しかし、たとえ成功したとしても、上記の様な活況は一定期間経てば収束するでしょう。今回はその期間が短いかもしれません。いかなる時もそうでしたが、大量の製品が登場し出せば、同様なアイデアを実装したライバルも増えます。一旦そうなってしまうと、幾らか技術的アドバンテージがあろうとも、多くの類似品の中に埋もれる可能性が高くなります。そして、10円単位の価格競争が起こるかもしれません(笑)。ですから、もし素晴らしいアイデアがあるなら、誰よりも先んじて実
現し、App Storeに出店することが肝心です。それが多くのユーザに受け入れられれば、短期間で大きな利益(個人的レベルの話です)を生み出せるはずです。

ある意味、筆者が夢に描いていた「ソフト屋商売のビジネスモデル」が登場することになります。人生の中でもこうした大きなチャンスにはそうは何度も遭遇できません。また、Mac開発者には間違いなく先行アドバンテージがあるわけですから、それを生かせるかどうかは「あなた」次第なのです。さて皆さん、お互いに頑張りましょう(笑)。

以上

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

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

 前回は、Perlモジュール「Spreadsheet::WriteExcel」を利用し、日本語データをExcelブックに書き出す方法を紹介しました。今回は、Perlモジュール「Spreadsheet::ParseExcel」を利用し、Excelブックから日本語データを取り出してみます。

・CPANについて
 前回前々回とPerl関連の内容が続いていますが、その中で特に説明を加えないままCPAN経由でモジュールをインストールしています。意味不明に思われる方もいらっしゃるはずですので、本題に入る前に、少しばかりCPANについて説明しておきましょう。
 CPAN(Comprehensive Perl Archive Network)は、Perlモジュールおよび関連文献の集積場です。オンライン経由でアクセスすれば、Perlプログラマは必要なモジュールを入手し、そのドキュメントを参照できます。世界中にミラーサイトが設置されているため、アクセスも高速です。
 そのCPANにアクセスするためのクライアントが、「CPANシェル」です。ターミナルから「cpan」コマンドを実行すると、プロンプトが「cpan>」に変化し、cpanの内部コマンドを実行できるようになります。内部コマンドの種類と機能については、「help」で確認してください。
 これまでcpanコマンドを紹介するときには、「sudo -H cpan」として管理者権限を使用していますが、その理由はカレントユーザの作業領域(~/.cpan/)ではなく、rootの作業領域(/var/root/.cpan/)を使うためです。こうしてcpanコマンドを実行すれば、モジュールは全ユーザが利用できるよう適切なシステム領域へとインストールされます。というわけで、今回利用するモジュール「Spreadsheet::ParseExcel」、それが依存する「Jcode」を、以下の手順でインストールしてください。

- - - - -
$ sudo -H cpan
cpan> force install Jcode
cpan> force install Spreadsheet::ParseExcel
cpan> exit
- - - - -


・Spreadsheet::ParseExcelを使う
 今回紹介する「Spreadsheet::ParseExcel」は、前回紹介した「Spreadsheet::WriteExcel」とは逆に、Excel 97-2004ブック(バイナリフォーマット、拡張子は.xls)を解析し、値を取得する機能を提供します。全機能の照会はターミナルから「perldoc Spreadsheet::ParseExcel」を実行していただくとして、ここでは日本語を含むExcelブックを対象にするときの注意点など、具体的な使用事例を紹介します。
 以下のスクリプトでは、「Spreadsheet::ParseExcel」と「Spreadsheet::ParseExcel::FmtJapan」モジュールをロードします。後者のモジュールは、日本語を含むExcelブックを扱うときに必要です。

- - - - -
1: #!/usr/bin/perl -w
2: use strict;
3: use Spreadsheet::ParseExcel;
4: use Spreadsheet::ParseExcel::FmtJapan;
- - - - -


 続いて、作業対象のファイルを指定します。ここでは、ファイル名にコマンドライン引数を、文字エンコード方式にはUTF-8を指定しています。

- - - - -
5: my $file = shift @ARGV;
6: my $fmt = Spreadsheet::ParseExcel::FmtJapan->new( Code=>'utf8' );
7: my $xls = Spreadsheet::ParseExcel::Workbook->Parse($file, $fmt);
- - - - -


 Spreadsheet::ParseExcelモジュールには、Excelブックから属性情報を取得する機能も用意されています。以下の例では、ファイル名(File)、ワークシートの枚数(SheetCount)、作成者名(Author)の各プロパティから値を取得し、標準出力へ書き出しています。

- - - - -
8: print "File Name  :", $xls->{File} , "\n";
9: print "Sheet Count:", $xls->{SheetCount} , "\n";
10: print "Author:", $xls->{Author} , "\n";
- - - - -


 Excelブックに複数のワークシートがある場合、SheetCountプロパティを取得し、その情報により各ワークシートにアクセスします。各ワークシートには、行/列の有効範囲を示すプロパティとしてMinRowとMinCol、MaxRowとMaxColがあり、それを参照することでアクセス範囲を決定できます。
 以下の例では、そのMinRowやMaxColなどの値を参照し、Excelブック上に存在するすべてのワークシートについて、全データを行/列番号付きで標準出力へ書き出しています。

- - - - -
11: my($row, $col, $sheet, $cell);
12: for(my $iSheet=0; $iSheet < $xls->{SheetCount} ; $iSheet++) {
13:  $sheet = $xls->{Worksheet}[$iSheet];
14:  print "--------- : ", $sheet->{Name}, "\n";
15:
16:  for(my $row = $sheet->{MinRow} ;
17:     defined $sheet->{MaxRow} && $row <= $sheet->{MaxRow} ; $row++) {
18:     for(my $col = $sheet->{MinCol} ;
19:           defined $sheet->{MaxCol} && $col <= $sheet->{MaxCol} ; $col++) {
20:           $cell = $sheet->{Cells}[$row][$col];
21:           print "( $row , $col ) =>", $cell->Value, "\n" if($cell);
22:     }
23: }
24:}
- - - - -


 以上のリストをつなげて1つのファイルとして保存し、ターミナルから「perl ***.pl ***.xls」の要領で実行すれば、Excelブックの内容がダンプされることと思います。

ニュース解説   MOSAic

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

◇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.