機械制御/振動騒音
IR情報 会社情報

PERFORCEテクニカルノート066

image_toyo_ss_img_perforce_title_perforce.gif.gif
テクニカルノート066  
image_toyo_ss_img_all_line_yellow.gif.gif
image_toyo_common_spacer.gif.gif
国際化とローカライズ
image_toyo_common_spacer.gif.gif
Unicodeモードの構成、サポートされている文字セットの使用、非ASCIIデータの取り扱いについて
image_toyo_common_spacer.gif.gif
概要
image_toyo_common_spacer.gif.gif
この記事では、Unicodeモードで動作させるためのPERFORCEサーバの構成方法、および異なる文字セットを操作するためのPERFORCEクライアントの構成方法を説明します。また、PERFORCEでマルチバイト文字(非ASCIIのデータ)を取り扱う際に起こりうる問題と、その解決策についても述べます。
image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
詳細
image_toyo_common_spacer.gif.gif
PERFORCEにおいてマルチバイト文字のセットを取り扱う際、ユーザ要件によって、いくつかの方法があります。
通常のPERFORCEのファイルタイプに、新しいファイルタイプ <utf16> が加わったことにより、PERFORCEサーバを非Unicodeモードで動作させたままで、<unicode>ファイルタイプのファイルを安全に管理し続けられるようになりました。
ファイル名またはPERFORCEメタデータに非ASCII文字が含まれる場合、PERFORCE管理者は、以下に説明するようにPERFORCEサーバをUnicodeモードに切り換えてください。Unicodeモードで動作させると、すべての非ファイルデータ(識別子、コメントなど)と共に、<unicode>ファイルタイプのすべてのファイルの内容も、クライアントのP4CHARSET環境変数によって指定された文字セットとサーバのUTF8との間で、文字コード変換されます。

Unicodeモードに切り替える前に、取り扱いたい文字セットがサポートされていることを確認してください。Unicode文字を含むファイルを管理できるようにしたい場合、UTF8またはUTF16のどちらかのエンコードで標準化することを検討するとよいかもしれません。リリース2007.2からは、PERFORCEでは特にUTF16ファイルについて非UnicodeモードおよびUnicodeモードの両方をサポートするように、新規にUTF16ファイルタイプが追加されています(リリースノート参照)。UTF16対応の機能を利用するには、すべてのPERFORCEユーザはバージョン2007.2以上のPERFORCEクライアント・プログラムを稼動させる必要があります。

ユーザのディレクトリに保存されている文字を含むUnicodeファイルを操作する必要がある場合、単一のクライアント・マシンで同期またはサブミットを実行すると、タスクを完了するために追加の手順(別の P4CHARSETS に切り替えたり、追加のコード・ページをインストールするなど)が必要となることがあるため、処理が複雑になる可能性があります。

日本語版 注: 日本語Windowsをクライアントホストとして日本語版PERFORCEをお使いのお客様は、P4CHARSETを "shiftjis" に設定することによって、UTF8(サーバ)<==> Shift-JIS(クライアント)の文字コード変換を実現できます。
 
上記のオプションがユーザの状況では適切でない場合、Unicodeファイルをバイナリファイルとして追加することができます。デフォルトではPERFORCEは「真の」バイナリファイルの比較をサポートしていないため、これによってそのようなファイルを比較することが少し難しくなります。しかし、バイナリファイルが「真の」UTF8ファイルであれば、P4Vのデフォルトの差分/マージ・ツールはそれらを正しく比較します。さらに、P4Win/P4Vのユーザはそのようなファイルに対して、サードパーティの差分/マージ・ツールを指定できます。同様に、コマンドラインのユーザは‘-t' オプションを使用して比較を強制的に行うことができます。

日本語版 注: 日本語版PERFORCEでは、たとえ「真の」UTF8ファイルであったとしても、PERFORCEのマージ・ツールP4Mergeはご利用になれない場合があります。ご注意ください。
 
image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
PERFORCEサーバをUnicodeモードに切り換える
image_toyo_common_spacer.gif.gif
PERFORCEをそのような環境で使用する前に、まずサーバにUnicodeモードで動作するよう指示しなければなりません。このモードで動作するようにサーバを設定するには、PERFORCEサーバをいったん停止させ、PERFORCEサーバルート・ディレクトリ上で次のコマンドを実行します。
image_toyo_common_spacer.gif.gif
	p4d -xi
image_toyo_common_spacer.gif.gif
このコマンドは、既存のメタデータがすべて有効なUTF8であることを検証し、保護されたカウンタ"unicode"を設定して、p4dが今後実行される際にUnicodeモードで動作するように指示します。このモードがサーバに設定されると、無効にすることはできません(すなわち、非Unicodeモードに戻ることはできません)。p4d -xi によってサーバをUnicodeモードに切り換えた後は、通常お使いのオプションでp4dを起動することができます。
image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
重要事項:
image_toyo_common_spacer.gif.gif
時として、p4d -xi コマンドによりサーバをUnicodeモードに切り換えようとすると、サーバが以下の応答を返すことがあります。
image_toyo_common_spacer.gif.gif
	Table db.user has 14 rows with invalid UTF8.
	Table db.domain has 1 rows with invalid UTF8.
	...
	Perforce server error:
	Database has 14 tables with non-UTF8 text and can't be switched to Unicode mode.
image_toyo_common_spacer.gif.gif
これを解決するには、次のどちらかの操作を行います。
一つめの方法を示します。
image_toyo_common_spacer.gif.gif
  1. チェックポイントを作成します。
  2. 文字コードをUTF8に変換して、新しいチェックポイントを保存します。Windowsをご利用の場合はNotepad(2GBのサイズ制限があります)を使うか、もしくはサイズが2GBを超えるならば、UTF8で保存できる適当なエディタを使うことができます。ファイルの内容をUTF8で保存できるのであれば、(ワード・プロセッサは避けるべきですが、)エディタが何であるかは重要ではありません。UNIXをご利用の場合は、iconv コマンドの実行を検討することも可能です。
  3. すべての db.* ファイルを削除します。
  4. UTF8のチェックポイントからリストアを実行します。
  5. 検証します。
  6. あらためて、p4d -xi コマンドを試行します。

image_toyo_common_spacer.gif.gif
二つめの方法を示します。
image_toyo_common_spacer.gif.gif
  1. チェックポイントを作成します。
  2. それぞれのテーブル(チェックポイント内の列)において、high-ASCII文字をすべて見つけ出します。
  3. それらを修復します。
  4. 変更したチェックポイントを保存します。
  5. チェックポイントからリストアを実行します。
  6. あらためて、p4d -xi コマンドを試行します。

image_toyo_common_spacer.gif.gif
適切なUTF8に変換するには、利用可能な何らかの文字セット変換ツールを使用することもできます。"iconv" ツール/コンバータは、UNIXとWindowsの両OSで利用でき、適切な選択です。ただし、"iconv" を使ったとき、ドイツ語のウムラウト文字が欠落する場合がありますので、実行後には p4 verify による検証を行う必要があります。
image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
ユーザへの注意事項
image_toyo_common_spacer.gif.gif
PERFORCEをUnicode環境で使用するには、クライアント・マシン上にP4CHARSET環境変数を設定しなければなりません。設定していないと、P4VまたはP4SCC.DLLを使用しているユーザの場合はUnicodeが有効であるサーバへの最初の接続時にエンコーディングを選択するよう要求され、それ以外のユーザの場合は "Unicode server permits only unicode enabled clients"(UnicodeサーバにはUnicodeが有効にされたクライアントのみ使用できます)というメッセージが表示されます。
image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
重要事項:
image_toyo_common_spacer.gif.gif
同一コンピュータ上に異なるエンコーディングを混在させることによって結果的にP4CHARSET設定が混在すると、変換に伴う問題が生じる可能性が高いことに注意してください。
image_toyo_common_spacer.gif.gif
以下の表に、(米国において)最もよく使用されるP4CHARSETの値をいくつか示します。
image_toyo_common_spacer.gif.gif
言語 プラットフォーム Windows
コードページ
Unix
ロケール
P4CHARSET
の設定
English/High-ASCII Windows 1252 n/a winansi
English/High-ASCII UNIX/Linux n/a 各種 iso8859-1/utf8
English/High-ASCII MAC OS X n/a n/a utf8
すべて/未翻訳 すべて n/a n/a utf8*
すべて すべて n/a n/a utf16**

image_toyo_common_spacer.gif.gif
P4CHARSETの値の一つに、"none" があります。グローバル・オプション "-C" で設定すれば、既に設定されているP4CHARSET値をオーバライドし、UnicodeモードのPERFORCEサーバに接続できます。サポートされているP4CHARSET値の完全なリストを見るには、'p4 help charset'を実行するか、Perforce 国際語モードに関する注意事項をご参照ください。
image_toyo_common_spacer.gif.gif
* utf8は翻訳されませんが、ファイルの内容は検証されます。
image_toyo_common_spacer.gif.gif
** utf16では、p4 コマンドライン・クライアントが機能するためには、P4COMMANDCHARSET が異なる文字セット(非utf16)に設定されている必要があります。
image_toyo_common_spacer.gif.gif
	p4 -C utf16 -Q utf8 sync some_files
image_toyo_common_spacer.gif.gif
ただし、"-C"はP4CHARSETに対するコマンドライン・オプションであり、"-Q"はP4COMMANDCHARSETに対するコマンドライン・オプションです。
image_toyo_common_spacer.gif.gif
P4VおよびP4WINには、[プリファレンス]ダイアログ内にP4CHARSETをリセットするためのフィールドがあります。
image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
Windows環境でのP4CHARSETの設定:
image_toyo_common_spacer.gif.gif
  1. Windowsにログインし、MS-DOSコマンド・プロンプトを開きます。
  2. True Type(TT)フォントまたはOpen Typeフォントがあることを確認します。
  3. "chcp"コマンドを発行することによって、Windowsマシン上のアクティブ・コード・ページを表示します。Windowsは以下のようなメッセージを表示します。
 
	Active code page: 1252

アクティブ・コード・ページに基づいて文字セットを以下のように選択します。
 
コード・ページ P4CHARSETの設定
1252 winansi
932 shiftjis
image_toyo_common_spacer.gif.gif
このワークステーション上のすべてのユーザにP4CHARSETを設定するには、管理者権限が必要です。その場合、以下のコマンドを発行します。
image_toyo_common_spacer.gif.gif
	p4 set -s P4CHARSET=[character_set]
image_toyo_common_spacer.gif.gif
管理者権限を持っていない場合、以下のコマンドを使用できます。
image_toyo_common_spacer.gif.gif
	p4 set P4CHARSET=[character_set]
image_toyo_common_spacer.gif.gif
これで、現在ログインしているユーザにP4CHARSETが設定されます。同じマシン上の他のユーザは個別にP4CHARSETを設定しなければなりません。

image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
UNIX環境でのP4CHARSETの設定:
image_toyo_common_spacer.gif.gif
コマンド・シェルまたは .kshrc、.cshrc、.profile などの起動スクリプトにより、P4CHARSETを適切な値に設定します。環境変数 LANG または LOCALE の現在の設定を調べることによって、P4CHARSETに対する適切な値を決定することができます。
image_toyo_common_spacer.gif.gif
$LANG の値の例 P4CHARSETの設定
en_US.UTF-8 utf8
ja_JP.EUC eucjp
ja_JP.PCK shiftjis
image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
MAC環境でのP4CHARSETの設定:
image_toyo_common_spacer.gif.gif
例えば、次のようにコマンド・シェルでP4CHARSETを適切な値に設定するか、
image_toyo_common_spacer.gif.gif
	export P4CHARSET=utf8
image_toyo_common_spacer.gif.gif
もしくは、~/.MacOSX ディレクトリにある "environment.plist" の中でこれを設定します。
image_toyo_common_spacer.gif.gif
前者の方法では、実行中のシェル・セッション内でしか設定が有効にならないことに注意してください。恒久的に設定するためには、ユーザの起動スクリプトか environment.plist ファイルの中で設定する必要があります。デフォルトのシェルがbashの場合、起動スクリプトは ~/.bashrc です。
image_toyo_common_spacer.gif.gif
P4CHARSETが環境に設定されていない場合、P4Vユーザは最初にUnicodeサーバに接続する際に、ドロップダウン・リストから設定を選択するよう要求されます。
image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
サーバがUnicodeモードかどうかの確認
image_toyo_common_spacer.gif.gif
Unicodeモードのサーバに対してコマンドを実行すると、次のようにエラーが返ってくる場合があります。
image_toyo_common_spacer.gif.gif
	$ p4 counters
	Unicode server permits only unicode enabled clients.
	(Unicodeサーバに接続できるのは、Unicodeモードクライアントのみである。)
image_toyo_common_spacer.gif.gif
クライアントもUnicodeモードであれば、p4 counters の実行結果には、'unicode'カウンタが表示され、その値は '1' となります。
image_toyo_common_spacer.gif.gif
例:
	$p4 counters
	change = 1
	unicode = 1
	upgrade = 21
image_toyo_common_spacer.gif.gif
クライアント側でP4CHARSETを設定していないために、p4 counters が実行できない場合、タグ付きの p4 info を実行することができます。p4 -Ztag info によって出力されるタグ付き情報には、enabled という値を持つunicodeフィールドが含まれます。
image_toyo_common_spacer.gif.gif
例:
	$ p4 -Ztag info
	[...]
	... clientAddress 127.0.0.1:50936
	... unicode enabled
	... serverAddress localhost:9988
	... serverRoot introot/
	... serverDate 2010/10/21 11:36:37 -0700 PDT
	... serverUptime 02:46:52
	... caseHandling sensitive
image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
Unicodeモードで動作させる際に起こりうる問題
image_toyo_common_spacer.gif.gif
「Cannot translate(翻訳できない)」とのエラー・メッセージ
image_toyo_common_spacer.gif.gif
このメッセージは、PERFORCEサーバによってクライアント・マシンに送られる文字を含まない文字セットによりクライアント・マシンが構成されている場合に表示されます。
クライアント・マシンはマッピングされていない文字を表示できません。
image_toyo_common_spacer.gif.gif
例えば、クライアント・マシンがshift-JIS 文字セットを使用するよう構成されており、ディポにはShift-JISにマッピングされていない日本語EUC文字セットに属する文字を名前にもつファイルがある場合、それらのファイルを一覧表示する p4 files コマンドまたは p4 changes コマンドを実行すると「~を翻訳できません」というエラー・メッセージが表示されます。
image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
UnicodeのPERFORCE識別子に対する長さの制限
image_toyo_common_spacer.gif.gif
PERFORCE サーバでは、ジョブのコメントの索引付け、ファイル名の指定、ビュー・マッピングの制御、およびクライアント名やラベル名などのオブジェクトの識別に使用される文字列の長さに対し、内部的な制限があります。
image_toyo_common_spacer.gif.gif
最も一般的な制限値は1024バイトです。いくつかのUnicode文字は2バイト以上に拡張されることがあるため、ある種のUnicodeエントリがPERFORCE内部の制限を越える可能性があります。
image_toyo_common_spacer.gif.gif
基本的なUnicode文字は3バイトを超えて拡張されないため、PERFORCE内部の制限値を3で割れば、Unicodeシーケンスが制限を超えないようにすることができます。
image_toyo_common_spacer.gif.gif
また、UnicodeシーケンスがPERFORCEの制限を超えないようにするために、341文字を超えるUnicodeでクライアント名またはビュー・パターンを作成しないでください。
image_toyo_common_spacer.gif.gif
正常な使用状況では、これが大きな制約となることはないはずです。
image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
非Unicodeサーバで"unicode"ファイルタイプを使用する際に起こりうる問題
image_toyo_common_spacer.gif.gif
国際語モードで動作していないサーバでは、PERFORCEの"unicode"ファイルタイプの動作が大きく異なります。クライアントとサーバは共に、ファイルが有効なUTF8であると見なし、有効なUTF8としてファイルを保存します。何らかの方法によって内容の翻訳や検証を試みることはありません。したがって、ファイルをUTF8として保存可能であるエディタを使用して保存しなければなりません。この条件を除き、ユーザは通常どおりPERFORCEサーバにアクセスできます。クライアントでP4CHARSETを設定する必要はありません。
image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
改行が正しく保存されない件
image_toyo_common_spacer.gif.gif
ファイルは、ユーザによって、UTF8ではなくUTF16でチェックインされています。古いリビジョンにロールバックするか、ファイルをUTF8として保存し直してください。
image_toyo_common_spacer.gif.gif
image_toyo_common_spacer.gif.gif
image_toyo_ss_img_all_btn_yellow_bgwhite2.gif.gif戻る

PAGE TOP