# idnkitとは

本ドキュメントが解説する、idnkitとはどのようなソフトウェアなのか、 簡単に概要を記します。

- idnkitの紹介
- idnkitの構成

## idnkitの紹介

idnkitバージョン2は、アプリケーションがIDNA2008を取り扱う上で必要と なるAPIをまとめたライブラリと、そのライブラリを利用したコマンド形式の ツールから構成されます。

idnkitのライブラリには、IDNA2008で規定されている機能に加え、いくつかの 独自機能を実装しています。

Unicode以外のエンコーディングのサポート
  国際化ドメイン名はUnicodeで定義された文字を使うことになって いますが、Unicode以外のエンコーディング (ISO8859-1, EUC-JP等) で 処理をしているアプリケーションも数多くあります。 そのようなアプリケーションのために、idnkitではUnicodeとUnicode 以外のエンコーディング (idnkitでは「ローカルエンコーディング」 と呼んでいます) の間で変換処理を行えるようになっています。
ローカルマッピング
  前処理で行うマッピング処理において、コードポイントのマッピング を自由に定義することができます。 idnkitライブラリは、マッピング規則が書かれたファイル (idnkitでは「マップファイル」と呼んでいます) を読み込み、 その内容にしたがってマッピングを行います。 ローカルマッピングは、実際には「言語別ローカルマッピング」と 「TLD (トップレベルドメイン) 別ローカルマッピング」の2種類があります。 言語別ローカルマッピングでは、実行時の「現在の言語」設定に応じて 異なるマッピング方法を選択することが可能です。 TLD別ローカルマッピングでは、入力されたドメイン名のTLDに応じて異なる マッピング方法を選択することができるようになっています。
ローカルチェック
  IDNの各レジストリは、ドメイン名の登録規定として 「利用可能なコードポイント」の集合をそれぞれ独自に定めています。 レジストリが定めた「利用可能なコードポイント」の範囲内でドメイン名が 表現されているかどうかをチェックするための仕組みとして、idnkit バージョン2では、ローカルチェックという機能を持っています。 idnkitライブラリは、利用可能なコードポイントの一覧を記したファイル (idnkitでは「セットファイル」と呼んでいます) を読み込み、 その内容にしたがってドメイン名のチェックを行うことが可能です。

## idnkitの構成

idnkitバージョン2は、次のものから構成されています。

- idnkitライブラリ
- idnkitliteライブラリ
- idnconv2コマンド
- idncmpコマンド
- idncheckコマンド

### idnkitライブラリ

アプリケーションを国際化ドメイン名に対応させるために必要な、 エンコーディングの変換 (Unicode⇔Punycode) を実装したライブラリです。 後述するidnconv2, idncmp, idncheckコマンドは,、すべてこのライブラリ を使用しています。

idnkitライブラリを用いたアプリケーションの開発について、詳しくは 「idnkitライブラリのAPI」 をご覧ください。

### idnkitliteライブラリ

idnkitライブラリの軽量版です。 idnkitライブラリではローカルエンコーディングとUnicodeとの間の 変換処理に、`iconv()`という関数を使用しています。 idnkitliteライブラリは`iconv()`を使用しない代わりに、 この変換機能を省いてあります。

### idnconv2コマンド

コマンド行から実行することを想定したツールで、Punycodeと ローカルエンコーディングとの間の変換を行います。 DNSサーバの設定ファイル (BIND 9の`named.conf`やNSDの `nsd.conf`) やゾーンファイルを変換することも可能です。

idnconv2コマンドの使用方法について、詳しくは 「idnconv2コマンドの使用方法」を ご覧ください。

### idncmpコマンド

これも、コマンド行から実行することを想定したツールです。 2つの国際化ドメイン名を引数として受け取り、それぞれをPunycodeへ 変換した結果が一致するかどうか比較します。 詳しくは「idncmpコマンドの使用方法」 をご覧ください。

### idncheckコマンド

これもコマンド行から実行することを想定したツールで、引数として 受け取った国際化ドメイン名が正しいかどうか検証します。 詳しくは「idncheckコマンドの使用方法」を ご覧ください。