Macintosh Developer Online (MDOnline)


2002年2月4日発行号 - WebDAVのmod_encoding



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃Q.オンラインショップで本を買っても送料無料ってホント? ┃今すぐ購入
┃A.本当です!【楽天ブックス】では送料無料でばんがります!┃ ↓
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ↓
 http://px.a8.net/svt/ejp?a8mat=BZFSP+3GFM7M+1N6+61C2R
 Mac OS Xプログラミング入門・Cocoa+Java―の購入はこちら
 http://px.a8.net/svt/ejp?a8mat=BZFSP+3GFM7M+1N6+61Z82&i=4877780939

例によってPDF化の部分はとりあえず動きだしているのですが、システム化を日々進めています。実は、土曜に発行してもよかったのですけど、表の部分のテキスト化をきちんと作ってからと思ったので、月曜の発行になりました。だけど、Word(あるいはOffice?)のVisual Basicはやっぱりかなり動きがあやしいです。ウインドウがアクティブじゃないのに、Command+Vで、プログラムソースのウインドウに貼付けられるってのにけっこう当たりました。検索のウインドウにペーストすると、背後のソースのウインドウに貼付けられたりします。プログラム的にも、on errorがあってもエラーでとまる命令があったりとか、いろいろ変です。まあしかし、仕方ないですが…。他には、一度マクロを記録すると、マクロを完全に削除しても、その文書を開くときにはマクロがあるとと言わせてくるとか、編集文書以外でマクロを利用するのはちょいと大変だとか、いろいろあります。また、かなりごちゃごちゃとやっていると、時々落ちますが、フッタの編集中に落ちるような気がします。もう少し手を入れればかなり執筆作業は楽になるはずなんでがんばりますが、レイアウトなどでのご要望があれば、おっしゃってください。
(新居雅行 msyk@mdonline.jp


【MacWIRE配信予定】森下克徳の崖っぷちからWebObjects》番外編〜Mac OS Xでmod_encodingのインストール

インターネット上でファイルをやり取りする場合、一対一の間であれば、メールを利用するのが一般的だ。複数の人数で共同作業を行い、そのためにファイルをインターネット上で共有したい場合は、FTPを利用することが多い。しかし最近では、WebDAVを利用してやり取りすることも多くなって来た。

WebDAVは、HTTP上でファイル共有を実現するプロトコルだ。従来HTTPといえば、まあ平たく言えばホームページの閲覧、つまりWebサーフィンに利用してきたプロトコルで、ファイルレベルでは一方的にサーバがWebブラウザにデータを送ってきてブラウザ側はそれを表示する、ということしかできなかった。しかしWebDAVによって拡張されたHTTPでは、サーバにおいたファイルを読み書きできるようになる。有名どころでは、iDiskがこのプロトコルによって実現されている。

Mac OS X Serverには、当初からこの機能を実現するためのApacheのモジュールmod_davが組み込まれており、ServerAdminからワンクリックでこの機能を稼動させることができる。

ただし、WebDAVを日本語環境で利用する場合、文字コードの違いによって、種々のトラブルが生じるのである。mod_davは、ファイル名をUTF-8としてあつかっている、クライアントから送られてきたファイル名のコードがたとえShift-JISであったとしてもEUCであったとしても、UTF-8として扱うのである。このことはすなわち、文字化けによってファイルがうまく扱えないということを意味する。もしもクライアント側がUTF-8でファイル名を送りだしているとしたら問題はないわけだが、現実には、クライアント側のローカルのファイルシステムで利用している文字コードを使って送信する場合が多いのだ。

このような文字コードの違いを克服して、日本語ファイル名を正しくやり取りできるようにしたものが、mod_encodingで、IIJのTaisuke Yamada氏が作成された。

ところで筆者は、Mac OS X Server 1.2およびMac OS X Server 10.0.4にてサーバを運用しているが、「これからはDAVや〜!」とばかりに稼動させてみたものの、やはり日本語の取扱いに困ってしまうクライアントも存在し、mod_encodingにご活躍願うこととなった。だが、残念ながら、素直にインストールすることはできず、WebDAV-Jpメーリングリストのみなさんや、MacOSX-JPメーリングリストのみなさんにご協力いただいて、あれやこれややってみて、このたびなんとか稼動させることができた。そこで、せっかくなのでパッチを作って、なるべく簡単にインストールできるようにマニュアルも作ってみた。自己責任で使ってみたいと言う方は、自由にやってみてもらいたい。(当たり前だが、自己責任ということは、何かとんでもないことになったとしても、筆者は一切関知しないということだ。)

なおドキュメントにも記載したが、mod_encodingをインストールするには、事前にlibiconvをインストールしておく必要がある。libiconvは、文字コードを扱うためのもので、mod_encodingから利用される。

今回利用する各種アーカイブは次の通り。
◇libiconvのMacOSX版パッケージ
 http://macosx.forked.net/ports/libiconv-2.0.4.pkg.tgz

◇mod_encodingのソース
 http://webdav.todo.gr.jp/download/mod_encoding-20011211a.tar.gz

◇mod_encoding_MacOSX_patch(for Rhapsody & Darwin)
 http://www.nakamano.net/patch/mod_encoding_X_patch.tar.gz

これらをダウンロードしたら作業にかかろう。
libiconvのMacOSX版パッケージは、ダブルクリックをすればインストーラがよきにはからってくれるので、それに従えばよい。その後の手順はこうだ。

手順1:mod_encodingのソースフォルダの中に、mod_encoding_MacOSX_patch内のmod_encoding-Mac1.patch、およびmod_encoding-Mac2.patchをコピーする。

手順2:Tarminal.appを起動し、表示されたterminalウインドウにて「cd」と打ち込んでスペースをあけ、Finderからフォルダmod_encoding-20011211aのアイコンをドラッグ&ドロップ。再びterminalウインドウをアクティブにしてリターン。

手順3:パッチを適用。

patch -p0 < mod_encoding-Mac1.patch
patch -p0 < mod_encoding-Mac2.patch

手順4:ダイナミックライブラリの作成。

cd ./lib
make

手順5(Darwin):ダイナミックライブラリのインストール。

sudo make install
(パスワードはあなたのパスワード)

手順5(Rhapsody)

su
(パスワードはrootのパスワード)
make install
exit

手順6:mod_encoding.soを作成。

cd ../
make

手順7(Darwin):インストール。

sudo make install
(パスワードはあなたのパスワード)

手順7(Rhapsody)

su
(パスワードはrootのパスワード)
make install
exit

以上でインストール完了である。mod_encodingを実際に利用するにはApacheの設定が必要で、インストールしただけではなんともならないのだが、mod_encodingのソースに同梱されているドキュメントを参照すれば、そんなに難しくはないであろう。

さてこのWebDAVだが、本編の連載ではまだしばらく先になるが、コミュニティサイトでファイル共有を実現する手段として活用する。その時はこのmod_encodingが組み込まれた状態で使用するつもりである。多少首を長くして、待っていてもらいたい。

◇WebDAV Resources JP
 http://webdav.todo.gr.jp/

◇MacOSX-JPメーリングリスト
 http://www.tech-arts.co.jp/macosx/macosx-jp/ml.html

[森下克徳]

カテゴリ:ネットワーク, ネットワーク管理, サーバー製品, 崖っぷちからWebObjects


今から始めるCocoaプログラミング》文書ファイルを扱うアプリケーションを作る(補足)NSBundle(1)

   この記事のPDFファイル(367KB)は以下のアドレスにあります。
   ダウンロードには、MDOnlineのアカウントが必要です。
   pdfs/MDOnline020004.pdf
 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
言語ごとに異なる文字列を得るには、NSBundleの機能を使うのがいちばん手軽だろう。言語リソースの変換テーブルを作成しておき、そこで、英語のメッセージとその言語のメッセージの対応表を作っておく。そうすれば、実行時に選択されている言語に合わせた文字列を取得することができる。

――――NSBundleと言語リソース
前回の記事では、nibファイルを言語ごとに用意するということを説明した。ウインドウのボタン名など、nibファイルで定義されるものについては、この方法で十分に国際化対応が可能になる。ただし、こうした文字列は、nibファイルに定義しているものだけでなく、ソースの中にもでてくる。もちろん、それらをテーブルとして管理して、言語に応じて…というのは簡単だが、なかなか後手後手になって、最後に苦労するということもあるかもしれない。しかしながら、NSBundleの機能を使えば、やや語弊があるかもしれないが、けっこう気楽に文字列の多言語対応ができてしまうのである。
NSBundleは、もちろんバンドルを扱うためのクラスだ。バンドルとは、実体はフォルダであるが、フォルダの中のものを一括してまとめて扱うための仕組みの一般的な名称である。アプリケーションやフレームワークはバンドルの一種である。アプリケーションの中は一定の決められたフォルダ構成となっている。こうした取り決めを、バンドルを扱うクラスで隠ぺいすることで、具体的な相対パスを知らなくても決められたメソッドを利用することで、バンドル内のさまざまなリソースにアクセスできるというわけである。
文字列の多言語対応については、その変換テーブルを言語リソースに置くのが基本だ。たとえば、日本語だと、パッケージの中のResourcesフォルダにあるJapanese.lprojフォルダに置く。だが、NSBundleでは、現在選択されている言語に応じて言語リソースを探し、優先順位に従って適切な言語リソースフォルダのテーブルファイルを参照するといったことを背後で自動的に行ってくれる。だから、プログラムの中ではファイルのパスは書かなくてもいいということである。あとは、決められた名前で決められた位置に、テーブルとなるファイルを置いておくだけでいいのである。

――――NSBundleの文字列変換機能
まず、NSBundleにあるメソッドを紹介しておこう。NSBundleにはいろいろな機能があるが、ここでは、文字列の多言語対応にかかわるもののうち、便利な機能にしぼって紹介する。いくつかのメソッドがあるが、通常は以下の1つのメソッドを使うだけで事は足りると思われる。動作については、表だけでは説明しきれないので、その後の本文を参照していただきたい。

☆指定した文字列に対し、変換テーブルに従って現在の言語に応じた文字列を得る(Static)
 String NSBundle.localizedString(String key)
 String NSBundle.localizedString(String key, String comment)
 String NSBundle.localizedString(String key, String tableName, String comment)
 戻り値 規則に従って変換された文字列
  引数 key     もとになる文字列
     comment   コメント
     tableName  テーブル名(テーブルとなるファイルのファイル名)。
            指定がない場合には、Localizableが指定されたものと
            みなす
  備考 メソッドlocalizedStringとして、この3つのメソッド以外に、異なる
     バンドルにあるテーブルを利用するものも定義されている

まず、プログラム中の文字列は、ダブルクォーテーションで囲った “String” といったものが代表的なリテラル表記である。その、文字列が、言語に応じてバリエーションを持たせる必要がある。したがって、1つの文字列に対して、複数の言語ごとの表現が存在するということになる。
こうした対応を取るために、たとえば、ある文字列が「msg1」だというキーワードで与えて、それを元に、言語ごとの文字列を "Processing" "処理中" などと表示するということは1つの方法だろう。このように、キーと値を対応付けるというやり方は、Cocoaでもよく見られる手法だ。ローカライズ文字列の処理はそれが基本とはなっている。しかしながら、もう少し簡便な方法を取っている。
まず、最初に、英語の表現を基本として、英語の文字列を決める。たとえば、"Processing" だったとしよう。英語が言語として選択されている場合には、その文字列を使う。一方、日本語が言語として選択されているのであれば、Processingをキーにして、「テーブル」を参照し、そこから "処理中" という文字列を得るという処理を行うことにする。つまり、英語の場合の文字列がキーとなって、テーブルからの表引きを行うというようにしたいということである。
ここで、テーブルというのは、実際にはファイルである。基本的には次のような規則での作成となる。


こうして、テキストファイルでテーブルを用意しておけば、実行時に、テーブルに応じて変換された文字列が、プログラムの中で得られるという具合だ。ただ、これをさらにやりやすいような仕組みが用意されている。
(この項、続く)

カテゴリ:テキスト/フォント, Cocoa, 今から始めるCocoaプログラミング


今から始めるCocoaプログラミング》文書ファイルを扱うアプリケーションを作る(補足)NSBundle(2)

――――ローカライズ文字列の実際
こうしたテーブルのひな形を作成してくれるコマンドがあり、それを利用するのが手軽である。一方、作成されたアプリケーションのパッケージに、テーブルとなるファイルがなければならないので、事実上はそのファイルはProject Builderに登録しておかなければならない。こうした一連の作業を行なうには、手順的には次のようになるだろう。
たとえば、ある変数に文字列を入力している以下のような部分があるとする。

String s = "Please Input";

まず、この部分を、次のように、ローカライズ文字列対応のメソッドを通すようにして得られるようにする。

String s = NSBundle. localizedString ("Please Input", "Comment1");

このように、NSBundleのクラスメソッドでlocalizedStringメソッドを通すようにしておくのである。2つ目の引数は適当でかまわないが、後で、テーブルのファイルのどこにでてくるかを確認してもらいたい。
続いて、Terminalで以下のようにコマンドを実行する。ここで、カレントディレクトリは、プロジェクトの存在するディレクトリだとする。上記のステートメントがソースファイルは、プロジェクトのフォルダのルートにあるとする。そこで、ソースをもとに、英語を日本語に変換するテーブルをファイルのひな形を生成する。

% genstrings -j -o Japanese.lproj/Localizable.strings PreferencesWindow.java

ここで、genstringsというコマンドを使うのだが、このコマンドにはマニュアルがない。そこで、単にこのコマンド名だけを入力すれば、ヘルプ表示がされ、もちろん参考にはなるが、間違いもあるようで、気をつける必要がある。このコマンドは、本来はObjective-C向けであるが、-jオプションをつけることで、Javaのソースにも適用きる。そして、引数に指定したソースファイルから、localizedString等のメソッドをさがして、その文字列の対応表を、-oオプションで指定したファイルに書き出すのである。いずれにしても、以上の操作で、プログラムのソースファイルからlocalizedStringメソッドを使っている部分を探し出し、文字列変換のテーブルを行うための日本語リソースとしてのLocalizable.stringsファイルが出来上がった。
続いて、こうして作成されたファイルを、Project Builderで、プロジェクトに登録する。「プロジェクト」メニューから「ファイルを追加」(Command+otption+A)を選択する。そして、genstringsコマンドで生成したテーブルファイルを選択する。

◇Localizable.stringsを選択する
 

すると、プロジェクトにLocalizable.stringsファイルが加わるが、この項目は、言語対応となっており、その下位の項目に、Japaneseが含まれている。これをクリックして、右側でそのファイルの内容を修正すればよい。最初は「”Please Input” = “Please Input”;」のようになっているが、そのイコールの右側を日本語に書き換えればよい。

◇Localizable.stringsの日本語対応テーブルを編集した
 

なお、文字列の書き換え作業は、エディタで行ってもいいのであるが、このファイルはいずれにしても、プロジェクトに登録しておく必要があるので、Project Builderで編集作業をするのが手軽だろう。日本語はシフトJISコードでかまわないようである。
ここで、もとのlocalizedStringメソッドの2つ目の引数は、テーブルファイルの中で、コメントとして見えているのがわかる。だから、テーブルを後で編集しやすくするために、適当なコメントを作っておけばいいということである。
こうしておけば、さきほどのソースのStiringクラスの文字列sでは、英語だと「Please Input」、日本語だと「入力して下さい」という文字列になるのである。LocalizedStringメソッドでテーブル名を指定しない場合には、自動的に、Localizable.stringsファイルから参照されるということになっている。なお、英語の場合は、English.lprojフォルダにあるLocalizable.stringsファイルを参照するはずであるが、そのファイルが存在しないので、もともとの「Please Input」という文字列のままになるということである。日本語だと、Localizable.stringsが存在するので、それに従って変換作業が行なわれるということである。

――――Localizable.strings以外のテーブルを使用する
なお、NSBundleのlocalizedStringメソッドでテーブル名を指定するメソッドもある。ただし、このメソッドは、genstringsコマンドではエラーとなるので、このコマンドのサポートは受けられない。ただし、同一言語でさらに状況に応じてメッセージを切り替えたいときには、複数のテーブルファイルを使うことも必要だろう。このとき、

String s = NSBundle. localizedString ("Please Input", "MyTable", "Comment1");

としておくと、たとえば日本語なら、Japanese.lprojフォルダにあるMyTable.stringsというテーブルファイルを参照して置き換えを行うというように動作をする。従って、プロジェクトの中のJapanase.lprojフォルダにMyTable.stringsファイルを作っておき、それをプロジェクトに登録をしておかなければならないということになる。
(この項、以上)

カテゴリ:テキスト/フォント, Cocoa, 今から始めるCocoaプログラミング


KBase》起動時にXキーを押したままにして、起動システムをMac OS Xに切り替え

Knowledge Baseに、Mac OS Xの起動方法に関する文書が掲載されている。MacintoshにはStarup Managerとして、起動時にoptionキーを押したままにしておくことで、起動ボリュームを選択する機能が組み込まれている。ただし、ボリュームの選択のみであるため、同じボリュームにMac OS XとMac OS 9がある場合には、あらかじめ選択されているいずれか一方だけしか起動できない。このとき、起動ディスクがMac OS 9の場合だと、起動時にXキーを押したままにしておくと、起動システムがMac OS Xに切り替わる。Xキーを押したままにするとすぐに起動音がするが、その後にすぐきキーを離す。これで、起動システムは、Mac OS Xに切り替わる。

◇Mac OS: Press X Key During Startup to Select Mac OS X on Single-Volume Installations
 http://www.info.apple.com/kbnum/n106696

◇Startup Manager: Only Displays Mac OS 9, Not Mac OS X
 http://www.info.apple.com/kbnum/n106697

◇Startup Manager: Only Displays Mac OS X, Not Mac OS 9
 http://www.info.apple.com/kbnum/n106698

カテゴリ:Knowledge Base(旧TIL), Mac OS X


KBase》ログイン時に以前にログインしていたユーザ名を表示しないようにする

Mac OS Xで、ログインパネルを表示すると、通常は、その前にログインしていたユーザ名がそのまま「名前」に設定される。複数のユーザが代わる代わる使うような場合などには、ログインパネルの「名前」を空欄しておきたいと思う場合もあるだろう。そのとき、このKnowledge Base文書で掲載されたユーティリティを使って、ログイン時に名前欄を空欄にするのか、あるいは直前にログインしていたユーザ名を自動的に設定しておくのかを選択することができる。英語版のみが公開されているが、設定の切り替えアプリケーションのメッセージの問題だけで、日本語システムでも問題なく利用できるようだ。

関連リンク:Mac OS X 10.1.2: How to Prevent Prior User’s Name from Appearing During Login
カテゴリ:Knowledge Base(旧TIL), Mac OS X


KBase》最新のPower Mac G4にMac OS X Serverをインストールする方法

2002年2月から出荷開始されるPower Mac G4 Quick Silverタイプのコンピュータに、Mac OS X Serverをインストールする方法が、Knowledge Baseに掲載された。この本体は、Mac OS X 10.1.2以降をサポートするが、Mac OS X Serverのディスクは10.1ベースのものである。そこで、まず本体をプリインストールされているMac OS X 10.1.2としてハードディスクで起動して、利用可能な状態にする。そして、Mac OS X ServerのCD-ROMを挿入する。そこにある/Welcome to Mac OS X Server/MacOSXServerInstall/MacOSXServerInstall.mpkgというパッケージファイルを直接ダブルクリックして開いてインストールを行う。再起動後にソフトウエアアップデートによってアップデートを行い、10.1.2以降のバージョンまでアップデートを行う。

関連リンク:Mac OS X Server 10.1: How to Install on Power Mac G4 (QuickSilver 2002) Computer
カテゴリ:Knowledge Base(旧TIL), Mac OS X Server, Power Mac


【MacWIRE配信予定】MDOnline Digest》2002年1月第5週のMDOnlineから

――――この原稿は、MacWIRE様に掲載していただくための原稿で、MDOnline読者様向けにはすでに周知の事実も含まれていますが、あらかじめご了承ください。

Macintosh関連の開発情報や技術情報をお届けしている有償の日刊メールマガジン「Macintosh Developer Online(MDOnline)」で、2002年1月第5週(2月第1週を含む)にお届けした内容のダイジェストを紹介しよう。

まず、日本語文字列に問題がでているMac OS 9.2.2上のAppleScriptであるが、アップデート版が近々リリースされそうだ。開発者向けにはすでに公開されており、正式リリースが近いと思われる。

2002/1/28●AppleScript 1.8.2が近々リリースへ、Mac OS XとMac OS 9の両方がアップデート

Office v.X for Macは、マクロ処理をREALbasicで作成することを、Officeの機能として組み込んでいる。確かにREALbasicのデバッグ機能などを使える点は魅力だが、日本語文字列の扱いに問題があるなど、限定された環境でしか使えない。“これから”の機能であると言えそうだ。

2002/1/30●ffice v.Xで使うREALbasicは実用にはちょっと支障あり

WebObjects 5.1の各クラスのJavaDoc形式のものが、ソフトウエア・アップデートを使って配付が始まった。すでにドキュメントは作られているが、Java開発者のなじみの形式で、リファレンスが配付されたということだ。

2002/2/1●WebObjects 5.1のJavaDoc形式のドキュメントが公開

連載のコーナのうち、大津真氏の「XはUNIXでサーバで」は、自宅のブロードバンド環境でサーバを運用したい場合にドメイン名を利用できるDynamic DNSの使い方を解説している。小池邦人氏の「プログラミング日記」のコーナでは、Carbonアプリケーションで、Dockの中に画像を独自に書き込んだりする方法が解説された。森下克徳氏の「崖っぷちからWebObjects」のコーナでは、データベースソフトのMySQLのインストール方法を具体的に解説する段階に入った。

2002/1/28●大津真=XはUNIXでサーバで》Dymamic DNSによるサーバの公開
2002/1/29●小池邦人のプログラミング日記》2002/1/29<Dockのタイル(Tile)を書き換えてしまう>
2002/1/31●森下克徳の崖っぷちからWebObjects》第22回〜MySQLでコミュニティサイトを作るv6/MySQLのインストール

Cocoaでのドキュメントベースのアプリケーション作成を解説している「今から始めるCocoaプログラミング」では、アプリケーションの環境設定のユーザインタフェースや設定値の参照方法、ユーザデフォルトを使った永続化の方法などを解説している。また、Interface Builderでメニューを追加して、何もプロプログラムを追加しなくても、高性能なワープロになってしまうところや、あるいは、国際化対応のアプリケーションをいかに最小の労力で作るかといったこともテーマとして扱った。

今から始めるCocoaプログラミング》文書ファイルを扱うアプリケーションを作る
  (16)Preferencesの組み込み
    2002/1/28●(1)環境設定のユーザインタフェース
    2002/1/28●(2)環境設定を扱うクラスの設計
    2002/1/29●(3)クラスを稼働させる
    2002/1/29●(4)環境設定の永続記憶
    2002/1/30●(5)環境設定値を記録する
  2002/1/31●(17)さらにテキスト編集機能を追加
  2002/2/1●(18)ローカライズ

なお、この週より、一部の文書については、メールとWebサイトでの参照に加えて、PDFファイルでのアップロードについても対応しはじめた。図を含むような記事については、PDFをダウンロードして紙に印刷したり、あるいはオフラインでゆっくり読むということも可能となっている。

★MDOnlineは、ローカスが発行するオンライン情報メディアで、日刊のメールマガジンを中心に、Macintoshの開発情報や技術情報をお届けしている。過去の記事はWebサイトですべて参照できるようになっている。Mac OS Xの話題を積極的に取り上げるとともに、Knowledge Baseの公開情報を要約するなどAppleからの情報をフォローし、開発ツールやシステム関連ユーティリティなどのサードパーティ情報も扱う。購読料は有償で、年間8,000円、半年5,000円、1か月1,000円(消費税込みの基準価格、支払い方法により金額が増減する)。購読はWebページから申し込むことができ、郵便振替、クレジットカード(QQQシステム)、WebMoneyやBitCash(プリペイドカードやクレジットカードでのオンライン購入)での支払いに対応している。
Macintosh Developer Online

カテゴリ:MDOnline Digest