メインコンテンツへジャンプする

JPNICはインターネットの円滑な運営を支えるための組織です

ロゴ:JPNIC

WHOIS 検索 サイト内検索 WHOISとは? JPNIC WHOIS Gateway
WHOIS検索 サイト内検索

idnkitの設定


はじめに

idnkit が提供するアプリケーションのうち、 idnconv, idn wrapper, runidn, BIND パッチを適用した dig, nslookup, host は共通の設定ファイルが存在した場合、それを参照します。 ただし、設定ファイルが存在しない場合は標準的な設定 が自動的に行われます。 そのため、現在の idnkit では、ドメイン名変換を行うのに設定ファイルの 用意が必須というわけではありません。

実際の使用時に設定ファイルが必要かどうかの判断については、 設定ファイルの必要性設定ファイルなしでの動作 を参照してください。また、 自動的に読み込まれる設定ファイルのパス名については デフォルト設定ファイル を参照してください。

設定ファイルの内容の具体的な形式については、 設定ファイルの内容 を参照してください。

アプリケーションの使用するローカルエンコーディングは アプリケーションの動作するロケール情報から取得します。これについても 合わせて説明します。


設定ファイルの必要性

設定ファイルには、idnkit を利用したクライアントが必要とする いくつかの情報を設定することができます。 例えば NAMEPREP の方式や、 DNS プロトコル上で用いられるドメイン名の エンコーディング方法などをこのファイルで指定します。 具体的には以下のような項目を設定できます。

  • DNS プロトコル上のドメイン名のエンコーディング (IDN エンコーディング)
  • NAMEPREP
  • 特定の言語やトップレベルドメイン固有の正規化形式

しかし、設定ファイルが存在しない場合でも、現在の idnkit は動作します。 ここでは、どのような場合に設定ファイルが必要となるかを、 例をあげて説明します。 設定を行う際に参考にしてください。

IDN エンコーディングを指定したい場合

IDN エンコーディング自体の説明については、 idnkit 概要説明エンコーディング変換 を参照してください。

設定ファイルなしでの動作 時には、使用される IDN エンコーディングは Punycode となります。

IDN エンコーディングの設定方法については、 設定ファイルの内容idn-encoding 項を参照して下さい。

NAMEPREP を指定したい場合

NAMEPREP については、 idnkit 概要説明NAMEPREP を参照してください。

設定ファイルなしでの動作 時には、使用される NAMEPREP は「現在 idnkit がサポートしている最新の NAMEPREP」となります。

そうではなく、以前の NAMEPREP を指定したい場合は設定ファイルで 指定します。

なお、どう設定すればよいかよくわからない場合には、 最新バージョンを使用して下さい。

NAMEPREP の設定方法については、 設定ファイルの内容nameprep 項を参照して下さい。

ローカルマップを指定したい場合

まず、NAMEPREP について、その意味がわからない場合は idnkit 概要説明NAMEPREP を参照してください。

ローカルマップ処理は NAMEPREP の前に実行され、NAMEPREP では行われない ドメイン名の正規化が必要な場合に設定されます。

たとえば、「-」(U+2212, MINUS SIGN) という文字は `-' (U+002D, HYPHEN MINUS) と同じ文字と思われがちですが、 両者に対して NAMEPREP を適用しても結果は一致しません。 (NAMEPREP を適用しても、両者とも結果は適用前と変わりません。)

MINUS SIGN issue

結果が一致しないということは、国際化ドメイン名として入力された場合に ついても、両者は一致しないということを意味します。 欧米で使用される ISO 8859-1 や ASCII といった文字エンコーディング では U+002D のほうしか含まれていないため、問題はほとんど起きません。 けれども、EUC-JP やシフトJIS といった日本語でよく用いられる 文字エンコーディングでは両方の文字が含まれているため、この問題が しばしば顕在化します。

このように NAMEPREP だけでは意図した結果にならなくて不便だという場合 に、ローカルマップでマッピング規則を補うことができます。 上記の「-」の問題では、まず以下のようなマップファイル (minus-sign.map とします) を用意します。

# 「-」(U+2212) を `-' (U+002D) にマッピングする。
2212; 002D;

そして、このマップファイル を設定ファイルの local-map エントリ で次のように指定します。ただし、パスの部分は、実際のマップファイルへの パスを指定してください。

local-map  .jp  filemap:/some/where/minus-sign.map

上の設定例では、入力された国際化ドメイン名のトップレベルドメインが .jp の場合に限り、「-」(U+2212, MINUS SIGN) を `-' (U+002D, HYPHEN MINUS) に変換します。

ローカルマップの設定方法については、 設定ファイルの内容local-map 項を参照して下さい。 また、マップファイルの書き方について詳しくは、 マップファイルの形式について を参照して下さい。


設定ファイルなしでの動作

設定ファイルが存在しない場合、標準的な設定が自動的に行われます。 具体的には、

  • idnkit のサポートする最新の NAMEPREP
  • IDN エンコーディングに Punycode を指定する

以上の設定が行われます。


デフォルト設定ファイル

デフォルト設定ファイルの読み込み時には、以下の二種類のファイルのうち どちらかが読み込まれます。

  • ユーザの設定ファイル
  • システムの設定ファイル

前者が存在した場合、後者は読み込まれません。

UNIX 環境では、次のファイルがデフォルトの設定ファイルとなります。

ユーザの設定ファイル
ユーザのホームディレクトリの .idnrc
システムの設定ファイル
SYSCONFDIR ディレクトリの下の idn.conf。 (SYSCONFDIR は、idnkit をインストールする際に configure--prefix オプション--sysconfdir オプション で決定されます。)

Windows では、設定ファイルの場所はレジストリに記録されています。

なお、デフォルト設定ファイルの読み込み時に設定ファイルが存在しない場合、 idnkit は標準的な設定 を自動的に行います。そのため、設定ファイルは必須ではありません。 「標準的な設定」の詳細については 設定ファイルなしでの動作 を参照してください。


設定ファイルの内容

idnkit の設定ファイルは通常のテキストファイルで、ファイルの 各行 (# で始まるコメント行と、空行を除いて) は、次のような単純な フォーマットで構成されます。

キーワード 値 ...

idn-encoding

リソルバや DNS サーバによって使用される、国際化ドメイン名の エンコーディングを指定します。

[構文]

idn-encoding <encoding>

<encoding>として、次の名称が指定できます。

  • Punycode
  • あなたのシステムのiconv_open() が認識するエンコーディング名。
  • エイリアスファイルで定義された、上記のエンコーディング名のエイリアス (エイリアスファイルについて を参照のこと)

[設定例]

idn-encoding Punycode

idn-encoding が設定ファイル中に指定されなかった場合は、 Punycode が指定されたものとみなします。

なお、アプリケーション側のローカルエンコーディングはロケールや環境変数 によって決まるので、client-encoding というエントリはありません。 ローカルエンコーディングに関しては後述します。

nameprep

国際化ドメイン名の正規化、禁止文字の検出方法などを定めたものとして NAMEPREP があります。 このエントリでは、どのバージョンの NAMEPREP を使用するのかを指定し ます。

[構文]

nameprep <version>

<version>には以下のものが指定できます。

nameprep-03
インターネットドラフト draft-ietf-idn-nameprep-03.txt に対応した NAMEPREP の方式。
nameprep-10
インターネットドラフト draft-ietf-idn-nameprep-10.txt に対応した NAMEPREP の方式。
nameprep-11
インターネットドラフト draft-ietf-idn-nameprep-11.txt に対応した NAMEPREP の方式。

[設定例]

nameprep nameprep-11

NAMEPREP の処理手順は、次の 4 つの工程で構成されます。

  1. マッピング (mapping)
  2. 正規化 (normalization)
  3. 使用禁止文字 (prohibited character check)
  4. 未割り当てコードポイントの検出 (unassigned codepoint check)

nameprep が設定ファイル中に指定されなかった場合は、 idnkit が対応している NAMEPREP バージョンの内で最新のものが指定された ものとみなします。

local-map

このエントリは、NAMEPREP を適用する前のドメイン名に対して行う、 ローカルなマッピングを指定します。 このマッピングは、ドメイン名のトップレベルドメイン (TLD) 毎に異なる ものを指定することができます。

[構文]

local-map <TLD> <scheme> ...

<TLD> には、マッピングを適用する TLD を、 <scheme> にはマッピングの方式の名称をそれぞれ指定 します。 2 つ以上の方式が指定された場合は、順番通りに (左から右に) 適用します。 <scheme>には、以下のものが指定できます。

<version>
NAMEPREP の特定のバージョンにしたがったマッピング。 指定可能なバージョン番号については、 nameprepの項を参照してください。
filemap:<pathname>
マッピングの定義を <pathname>ファイルから読み込みます。 ファイルの記述方法については、 マップファイルの形式の項を参照してください。

[設定例]

local-map .jp filemap:/some/where/jp.map
local-map -   filemap:/some/where/notld.map
local-map .   filemap:/some/where/default.map

TLD としてハイフン (`-') を指定すると、TLDがないドメイン 名、言い換えるとピリオド(`.')を含んでいないドメイン名に 対して適用するマッピングを指定したことになります。 同様に、TLD としてピリオドを指定すると、他のlocal-map エントリの TLD のいずれとも一致しないドメイン名に対するマッピングを指 定したことになります。

TLD がピリオド(`.')の場合を除き、TLD の先頭のピリオドは 省略可能です。


ローカルエンコーディングについて

ローカルエンコーディングについては、ロケールや環境変数から自動判定するため、 設定ファイルでは、ローカルエンコーディングを設定するエントリはありません。 ただし、この自動判定は正しく行われないこともあります。 このとき、理由としては以下のことが考えられます。

  • ロケールから推定したローカルエンコーディングが間違っている
  • ロケールから推定したローカルエンコーディングを iconv ライブラリが 認識できない
  • C ロケールのままアプリケーションを実行したとき

1 番目は、たとえばロケールに "japanese" のような、具体的なエンコーディング の名称を含まないものを設定していると起きる可能性があります。 2 番目は、たとえばロケールに "ja_JP.eucJP" を設定していた場合、 iconv ライブラリが "EUC-JP" は認識できても "eucJP" は指定できなかった、 という場合に起こり得ます。

また、上記に加えて runidn コマンドでは以下の理由でも自動判定が正しく 行われません。

  • setlocale()関数を使用していないアプリケーションを実行 したとき

これは、setlocale() を使用していないと、アプリケーション は C ロケールに設定されているものとして動作するためです。 idnconv や BIND パッチを適用した dig, nslookup, host では、 setlocale() を使用していますので、この問題は起きません。

原因はいずれにしろ、この問題を回避するには

  • 環境変数IDN_LOCAL_CODESET に ローカルエンコーディングを設定する
  • エイリアスファイルにエイリアスを記述する

というふたつの方法があります。ここでは、環境変数を使用した方法について 記述します。後者の詳細については、 エイリアスファイルについて をごらんください。

この環境変数がセットされていると、その値がロケールの設定よりも優先される ようになっています。 たとえばローカルエンコーディングを EUC-JP に設定する場合には、 あらかじめ次のような設定をしておきます。

[設定例]

sh 系のシェルの場合:

$ IDN_LOCAL_CODESET=EUC-JP
$ export IDN_LOCAL_CODESET

csh 系のシェルの場合:

% setenv IDN_LOCAL_CODESET EUC-JP

指定する値はローカルエンコーディング名で、これは iconv ライブラリが 受け付ける名前 (もしくは エイリアスファイル にエイリアスとして登録されているエンコーディング名) で指定します。

もしあなたが単一のローカルエンコーディングしか使用していないのであれば、 環境変数 IDN_LOCAL_CODESET の設定を .profile.cshrc 等に入れておくことをお勧めします。


エイリアスファイルについて

エイリアスファイルは、IDN エンコーディングやローカルエンコーディング の名称を「別名」から「正式名」に変換するためのファイルです。 idnkit の設定ファイル等で指定されたエンコーディングは、最初に必ず エイリアスファイルの記述にしたがって「正式名」に変換されます。

なぜこのようなファイルが必要なのかというと、iconv() は実装によって認識 できるエンコーディング名が異なるためです。 (たとえば、ある実装では "eucJP" を認識するけれども "EUC-JP" は認識しない、 といったことが実際にあります。) エイリアスファイルを使って iconv() が認識できない「別名」を認識できる 「正式名」に変換することによって、iconv() の実装による差異を吸収することが できます。

エイリアスファイルは単純なテキストファイルです。 `#' で始まる行および空行は、無視されます。 それ以外の行は、次のような形式でなくてはなりません。

<エイリアス>    <正式名>

<エイリアス>には、<正式名> に変換したいエンコーディング名を記述します。 <エイリアス>`*' を含んだ場合は、 その部分は任意の文字列に一致します。

[設定例]

*.ISO_8859-2    ISO-8859-1
*.Shift_JIS     Shift_JIS
ko_KR.EUC       EUC-KR
*.GB2312        GB2312
ja              EUC-JP

別名がエイリアスファイル内の複数の行にマッチする場合は、ファイルの先頭 に最も近い行が選ばれます。また、エイリアスがどの行にもマッチしなければ、その エイリアスをそのまま正式名とします。

かつては idnkit の設定ファイルにおいて エンコーディング名称のエイリアスを定義したファイルへのパス名を 指定することができましたが、idnkit の仕様変更に伴い、 デフォルトのエイリアスファイルのみを自動的に読み込むように 変更されました。この変更により、設定ファイルでエイリアスファイルの パス名は指定できなくなりました。

自動的に読み込まれるエイリアスファイルは、UNIX の場合、 システムの設定ファイルが置かれているディレクトリの idnalias.conf です。Windows の場合は、レジストリ情報で 指定されています。


マップファイルの形式について

マップファイルは、 local-mapエントリ向けに、 文字のマッピング規則を定義したファイルです。 マップ元として文字 1 個、マップ先として 0 文字以上の文字の並びを指定 できます。 前後の文字でマッピング規則を変えるような、文脈に依存したマッピングは できません。

マップファイルは単純なテキストファイルで、一行に一つのマッピング 規則を書くようになっています。マッピング規則は、次の書式で記述します。 `#' で始まる行および空行は、無視されます。

<マップ元のコードポイント>; <マップ先のコードポイント列>;

<マップ元のコードポイント>には、マップ元の文字の Unicodeコードポイントを16進数で記述します。 <マップ先のコードポイント列>には、マップ先の文字列 の各文字のUnicodeコードポイント値を16進数で記述します。 先頭の文字から順番に空白で区切って並べていきます。 マップ先が空の文字列の場合、<マップ先のコードポイント列> は空白になります。

[設定例]

# "A" を "a" にマップ
0041; 0061;
# "#" は何にもマップしない
0023; ;
# "@" を "at" にマップ
0040; 0061 0074;

セットファイルの形式について

セットファイルは idnkit に行うことのできる設定方法のひとつですが、 通常の設定ファイルとして使用することはできません。 セットファイルは特殊な場合のみに使用されます。

セットファイルは、以前、設定ファイル内で記述することのできた nameprep-prohibitおよびnameprep-unassigned エントリ向けに、ドメイン名として使用を許可しないUnicodeコードポイント の集合を定義したファイルです。

しかし、現在のidnkitの設定ファイルでは、 nameprep-prohibitnameprep-unassigned という設定項目が存在しないため、セットファイルを利用した設定を、 設定ファイル内でおこなうことはできません。 ただし、idnkit ライブラリを利用してアプリケーションを作成する場合は、 関数を利用してセットファイルを idnkit に読み込ませることが可能です。

セットファイルは単純なテキストファイルで、一行に一つのコードポイント、 もしくはコードポイントの範囲を記述します。書式は次の通りです。

<コードポイント>
<開始コードポイント>-<終了コードポイント>

それぞれ、コードポイントには Unicodeコードポイントを16進数で記述します。 `#' で始まる行および空行は、無視されます。


環境変数について

idnkit に関連する環境変数には、以下のものがあります。

IDN_LOCAL_CODESET
ローカルエンコーディングを明示的に設定するために使用します。 詳しくは ローカルエンコーディングについて をごらんください。
LC_ALL
LC_CTYPE
LANG
idnkit 固有の環境変数ではありませんが、これらが定義されていると、 ローカルエンコーディングの判定に影響を与えます。 詳しくは ローカルエンコーディングについて をごらんください。
IDN_DISABLE
この変数が定義されている時には、IDN ライブラリの提供する ドメイン名の国際化対応機能が働かなくなります。 IDN ライブラリを使用しているアプリケーションは、この環境変数の影響 を受けます。

ただし、アプリケーションによっては、明示的にこの環境変数を無視する ように設定しているかも知れません。 idnkit 付属の idnconv, runidn コマンドは IDN ライブラリを使用していますが、いずれもこの環境変数 を無視して常に国際化対応機能が働くようになっています。 (国際化対応が無効になると、これらのコマンドは無意味だからです。)

IDN_LOG_LEVEL
ログ出力のレベルを設定します。設定できる値は 0 から 5 までの 数値で、大きな数字を設定すると、それ以下の数字の設定時に出力される ログも同時に出力されます。
  • 0 - 致命的なエラーの場合のみログの表示を行います。(デフォルト)
  • 1 - 一般的なエラーが起こった場合にログの表示を行います。
  • 2 - 警告ログを表示します。
  • 3 - 情報ログを表示します。
  • 4 - トレースログを表示します。
  • 5 - ダンプログを表示します。

このページを評価してください

このWebページは役に立ちましたか?
ページの改良点等がございましたら自由にご記入ください。

このフォームをご利用した場合、ご連絡先の記入がないと、 回答を差し上げられません。 回答が必要な場合は、お問い合わせ先をご利用ください。

ロゴ:JPNIC

Copyright© 1996-2019 Japan Network Information Center. All Rights Reserved.