Active Directory のフリガナ サポート

 

Windows Server® 2008 で、Microsoft は Active Directory に新しい機能を導入します。これにより、日本語環境の管理がいっそう容易になり、日本語ユーザーの期待にこれまで以上に応えることができるようになります。この機能は、フリガナサポート機能と呼ばれ、日本語の漢字ベースの名前を入力する際の標準となるものです。

トピック

1. 概要   1. 概要
2. 問題点   2. 問題点
3. ソリューション : Server 2008 Active Directory のフリガナ サポート   3. ソリューション : Server 2008 Active Directory のフリガナ サポート
4. フリガナの並べ替えと検索   4. フリガナの並べ替えと検索
付録   付録

1. 概要

他の言語と同様、日本語でも、名前は非常に重要です。名前は通常、漢字で記述されます。漢字には、その漢字が使用されている単語によって複数の読みがあります。このため、日本語でフォームに名前を入力する場合は必ず、名前の読みを入力する箇所が用意されています。

このようにする理由は 2 つあります。名前によっては、正しく読むためにフリガナが不可欠です。たとえば、複数の読みがある漢字、人名にあまり使わない漢字、旧漢字などの入った名前の場合です。

熊埜御堂

クマノミドウ (珍しい名前)

高田

タカタ / タカダ (複数の読みが存在する名前)

小栁

コヤナギ (“柳” → “栁” のような旧漢字が使用されている名前)

フリガナがないと、日本語の名前は読むのも並べ替えるのも容易ではなく、それ以外の問題も生じる場合があります。このため、ユーザー名を入力する箇所では、フリガナを入力する場所も設ける必要があります。これは、日本語のフォームの一部として従来から行われている処理です。

Active Directory とは

ディレクトリとは、ネットワーク上にあるオブジェクトに関する情報を格納するための階層構造です。Active Directory® などのディレクトリ サービスは、ディレクトリ データを格納し、そのデータをネットワーク ユーザーおよび管理者が使用できるようにするための手段を提供します。たとえば、Active Directory は名前、パスワード、電話番号など、ユーザー アカウントに関する情報を格納し、同じネットワーク上の権限のあるユーザーがこの情報にアクセスできるようにします。詳細については、「Active Directory の概要」を参照してください。

ページのトップへ  ページのトップへ

2. 問題点

Windows Server 2000 および Windows Server 2003 の Active Directory には、フリガナのための既定のエントリーがないため、日本のビジネスに完全統合しにくいという問題がありました。すべての名前についての検索、並べ替え、および読み取りを完全に行えないことで、Active Directory の利点が大幅に損なわれていました。

“サイトウ” という名前のユーザーをすべて Active Directory から検索する際に漢字のみを使用する場合、下記のすべてを検索しなければなりません。
斉藤、斎藤、齋藤、齊藤、齎藤、斉藤、西塔、西東、西藤、才藤、済藤、柴桃、犀藤、齋富士 ...
Microsoft Input Method Editor (MS-IME) では、“サイトウ” という語に対応する漢字の組み合わせが 76 とおり以上あります。

日本語の既定では、漢字にフリガナが割り当てられていないため、漢字の並べ替えは文字セットの順序に基づいて行われます。フリガナがないと、漢字を実際の読みに従って並べ替えることができません。また、Windows では、並べ替え時に濁点 (゛) と半濁点 (°) が無視され、文字列内の次の文字が 2 番目の並べ替えキーとして使用されます。ただし、Windows Server 2008 フリガナサポートを使ったソリューションでもこの問題は解決しません。

図 1 : Active Directory の既定では、名前を漢字のみで並べ替えた場合、名前の並べ替え方法は実際の読みに従ったものになりません

1 : Active Directory の既定では、名前を漢字のみで並べ替えた場合、名前の並べ替え方法は実際の読みに従ったものになりません

ページのトップへ  ページのトップへ

3. ソリューション : Server 2008 Active Directory のフリガナ サポート

Windows Server 2008 では、日本語のフリガナに対するサポートが追加されました。このサポートは、Active Directory スキーマの更新という形がベースになっています。このスキーマでは、フリガナ (スキーマ内では Phonetic という語で呼ばれます) をサポートするエントリが追加されました。

Server 2008 に同梱されている 「ADSIエディタ」 ツールを開くことで、これらのエントリを Active Directory で表示できます。

これらのエントリはスキーマに含まれています。「ADSI エディタ」を使用すると、スキーマに接続して確認できます。

Active Directory 2008 のフリガナ スキーマ エントリは次のとおりです。
msDS-Phonetic-First-Name
msDS-Phonetic-Last-Name
msDS-Phonetic-Display-Name
msDS-Phonetic-Department
msDS-Phonetic-Company-Name

フリガナを Server 2008 Active Directory で編集する方法には、いくつかの選択肢があります。“Active Directory ユーザーとコンピュータ” スナップインまたはコマンドラインを使用する方法と、プログラミングによる方法 (スクリプティング) です。ここでは、Active Directory のフリガナ エントリを編集およびコントロールする方法をいくつかご紹介します。

“Active Directory ユーザーとコンピュータ” による方法

Active Directory 管理者にはなじみの深い “Active Directory ユーザーとコンピュータ” スナップインを使用できます。Server 2008 では、日本語版 Active Directory1 環境で作成したユーザーはすべて、新しいプロパティ ページが割り当てられます。

図 2 : [Active Directory ユーザーとコンピュータ] の、フリガナ (読み) 編集用ダイアログ ボックス

2 : [Active Directory ユーザーとコンピュータ] の、フリガナ (読み) 編集用ダイアログボックス

これは Active Directory でフリガナ データを編集するうえで、最も基本的で最も便利な方法です。

Active Directory の制限を考慮して、Active Directory ではフリガナに全角のひらがなまたはカタカナを使用することをお勧めします。検索文字列 (後で説明します) では、ひらがなとカタカナが区別されませんが、半角のカタカナと全角のカタカナは区別されます。

Active Directory のコマンド ライン ツール

Active Directory には、Active Directory 環境の管理に使用できるコマンド ライン ツールが多数用意されています。フリガナの管理用として、dsadd.exe、dsget.exe、dsmod.exe、および dsquery.exe の各ツールが更新されました。

DSADD.exe

DSADD.exe は、Active Directory にオブジェクトを追加するために使用できます。フリガナを使用するために注意が必要なのは user オブジェクトのみです。

D:\dsadd user /?  

-fn <名>

ユーザーの名を <名> に設定します。

-fnp <名のフリガナ>

ユーザーの名のフリガナを <名のフリガナ> に設定します。

-mi <イニシャル>

ユーザーのミドル ネームの頭文字を <イニシャル> に設定します。

-ln <姓>

ユーザーの姓を <姓> に設定します。

-lnp <姓のフリガナ>

ユーザーの姓のフリガナを <姓のフリガナ> に設定します。

-display <表示名>

ユーザーの表示名を <表示名> に設定します。

-displayp <表示名のフリガナ>

ユーザーの表示名のフリガナを <表示名のフリガナ> に設定します。

DSGET.exe

DSGET.exe は、Active Directory からオブジェクトを取得するために使用します。DSADD.exe の場合と同様、ここで注意するのは user オブジェクトのみです。

D:\dsget user /?  

-fn

ユーザーの名を表示します。

-mi

ユーザーのミドル ネームの頭文字を表示します。

-ln

ユーザーの姓を表示します。

-display

ユーザーの表示名を表示します。

-fnp

ユーザーの名をフリガナで表示します。

-lnp

ユーザーの姓をフリガナで表示します。

-diplayp

ユーザーの表示名をフリガナで表示します。

DSMOD.exe

DSMOD.exe は、Active Directory のオブジェクトを修正するために使用します。フリガナで扱うのは user オブジェクトのみです。

D:\dsmod user /?  

-fn <名>

ユーザーの名を <名> に設定します。

-mi <イニシャル>

ユーザーのミドル ネームの頭文字を <イニシャル> に設定します。

-ln <姓>

ユーザーの姓を <姓> に設定します。

-display <表示名>

ユーザーの表示名を <表示名> に設定します。

-fnp <名のフリガナ>

ユーザーの名のフリガナを <名のフリガナ> に設定します。

-lnp <姓のフリガナ>

ユーザーの姓のフリガナを <姓のフリガナ> に設定します。

-displayp <表示名のフリガナ>

ユーザーの表示名のフリガナを <表示名のフリガナ>に設定します。

DSQUERY.exe

DSQUERY.exe は、Active Directory のオブジェクトを照会するために使用します。フリガナを使用するために注意が必要なのは user オブジェクトのみです。DSGET や DSMOD など他のコマンド ライン ツールに DSQUERY からの出力をパイプして、もっと複雑な操作を行うこともできます。

D:\dsquery user /?  

-name <名前>

名前が <名前> で指定されたフィルタ (“jon*”、“*ith”、“j*th” など) に一致するユーザーを検索します。

-namep <フリガナ>

表示名のフリガナが <フリガナ> で指定されたユーザー (“ハヤカワ”、“サトミ”、“ハ*ミ” など) を検索します。

このツールでは、表示名のみに対して検索が行われます。このため、このツールを頻繁に使用する計画がある場合は、表示名のフリガナを必ず入力するように組織内で徹底してください。この時点ではヘルプの -namep セクションの一部に、文字化けが含まれています。これは次のサービス パックまで修正されない可能性があります。

DS*.exe の例

ここでは、ds*.exe ツールを使用して Active Directory のフリガナ エントリを管理する方法を簡単に例示します。

まず、dsadd.exe を使用して、ユーザーとフリガナ情報を Active Directory に追加します。

C:\>dsadd user "CN=再等 社長,ou=MyOrg,dc=contoso,dc=com" -samid saitoshacho -d
isplay "再等 社長" -displayp "サイトウ シャチョウ" -fn 社長 –fnp シャチョウ -ln 再等
 -lnp サイトウ -pwd qwerty123!@#
dsadd 成功:CN=再等 社長,ou=MyOrg,dc=contoso,dc=com

ここで、dsquery.exe を使用して、“サイトウ” という名前のユーザーをすべて Active Directory から検索します。さきほど追加したユーザーも表示されます。

C:\>dsquery user ou=MyOrg,dc=contoso,dc=com -namep サイトウ*
"CN=際等 社長,OU=MyOrg,DC=eetwc2007,DC=com"
"CN=再等 課長,OU=MyOrg,DC=eetwc2007,DC=com"
"CN=齋藤 院長,OU=MyOrg,DC=eetwc2007,DC=com"
"CN=斎藤 係長,OU=MyOrg,DC=eetwc2007,DC=com"
"CN=齊藤 部長,OU=MyOrg,DC=eetwc2007,DC=com"
"CN=斉藤 校長,OU=MyOrg,DC=eetwc2007,DC=com"

ここで表示されるデータは最低限のものですが、dsquery.exe からの出力を dsget.exe にパイプすることにより、さらに多くの情報を得ることができます。

C:\>dsquery user ou=MyOrg,dc=eetwc2007,dc=com -namep サイトウ* | dsget user -sam
id -display -displayp
  samid          display    displayp
  saitoshacho    際等 社長      サイトウ シャチョウ
  saitokacho     再等 課長      サイトウ カチョウ
  saitoincho     齋藤 院長      サイトウ インチョウ
  saitokakaricho 斎藤 係長      サイトウ カカリチョウ
  saitobucho     齊藤 部長      サイトウ ブチョウ
  saitokocho     斉藤 校長      サイトウ コウチョウ
dsget 成功

スクリプティングとプログラミングによる方法

Active Directory のオブジェクトは、多くのプログラミング言語およびスクリプティング言語で編集できます。ここでは、Active Directory をスクリプトで扱うための方法を 2 種類紹介し、これらのスクリプトを使用してフリガナ情報を追加する方法について説明します。

Visual Basic Script

Visual Basic Script は、Active Directory にアクセスするための方法が既定で用意されている、強力なスクリプト言語です。少し工夫すれば、これを使用して、ファイルによるユーザー追加から、一連のユーザーの修正まで、さまざまな処理をスクリプト化できます。ここでは、ユーザーを Active Directory に追加し、そのユーザーのフリガナ データを指定する例を紹介します。この処理を行うには、追加するデータが記述されているコンマ区切りファイルが必要になります。また、(この例では) そのファイルのレイアウトをスクリプトに対して説明するためのスキーマ ファイルも必要です。もちろん、スクリプトも必要になります。次の例では、これらのファイルがすべて自分のサーバー上の同じディレクトリにあるものとします。

users.csv の例

早川里美,ハヤカワサトミ, satohaya
金起成,キンタツナリ, kintatsu
佐々木理恵,ササキリエ, riesasak
佐藤美千代,サトウミチヨ, michisat
安田永智,ヤスダエイジ, eyasu

このファイルのレイアウトは自由です。ただし、スクリプトとスキーマ ファイルは必要に応じて更新する必要があります。

schema ファイルの例

[users.csv]
Format=CSVDelimited
ColNameHeader=False
Col1=UName Text
Col2=UNameP Text
Col3=UNameText Text

このファイルは、“schema” という名前であり、各列の用途をプログラムに示しています。このファイルは、users.csv と同じフォルダに配置する必要があります。わかりやすくするために、スクリプト ファイルもこのフォルダに配置します。この例ではこれらのファイルがすべて同じフォルダに配置されているものとします。

Adduser.vbs の例

' このファイルでは、スクリプトを通じてフリガナを入力する方法を
' 例示します。ただし、これは実際の運用ではなく、例示を目的とした
' シナリオです。処理内容がわかりやすいように、ファイル内の各所に
' コメントを加えました。

' 'database' への接続を開く際に使用する定数
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001

Dim oContainer ' 新しいユーザーの親コンテナ
Dim oUser ' 作成されたユーザー

Dim sCSVFileLocation
Dim sCSVFile
Dim oRecordSet
Dim sDomain ' ドメイン名変数
Dim sDisplayName ' 表示名
Dim sDisplayNameP ' 表示名のフリガナ
Dim sName ' ユーザー テキスト名
Dim answer

' これは実際のドメイン名に変更してください。
Const sDomain=“contoso.com” ' ドメイン名

' 入力ファイルの場所です。使用するファイルのパスに変更してください。
sCSVFileLocation = “D:\Scripts\” ' 最後の \ は残しておくこと!

' 入力ファイルへの完全パスです。使用する csv ファイルの名前に変更してください。
sCSVFile = sCSVFileLocation&“users.csv”

' CSV ファイルを開くコマンドと、すべてのレコードを選択するコマンド
set oConnection = createobject(“adodb.connection”)
set oRecordSet = createobject(“adodb.recordset”)

' Windows Server 2008では、Jet.OLEDB.4.0 を使用できません。XP から実行するか、
' 別のプロバイダを使用する必要があります。コンマ区切りファイル (csv) を扱いやすいので、
' ここでは Jet.OLEDB.4.0 を使用していますが、他の方法もあります。
oConnection.open “Provider=Microsoft.Jet.OLEDB.4.0;Data Source= ” & _
sCSVFileLocation & “;Extended Properties=”“text;HDR=NO;FMT=Delimited”“”

' レコードセットを開きます。
oRecordSet.open “SELECT * FROM ” & sCSVFile _
,oConnection, adOpenStatic, adLockOptimistic, adCmdText

' 親コンテナを設定します。実際の情報に置き換えてください。
Set oContainer=GetObject(“LDAP://OU=test,DC=contoso,DC=com”)

' エラーが発生しても続行できるようにします。
on error resume next

' csv ファイル内をループ処理します。sCSVFileLocation にスキーマ ファイルを
' 設定した場合は、列名を使用してデータを取得できます。それ以外の場合は、列番号を
' 使用する必要があります。
do until oRecordSet.EOF ' sInputFile ファイル内の値 (セル) を読み出しています。

' 表示名を設定します。これはログオン名にもなります。
sDisplayName = oRecordSet.Fields.Item(“UName”)'.value
sDisplayNameP = oRecordSet.Fields.Item(“UNameP”)'.value
sName= oRecordSet.Fields.Item(“UNameText”)

wscript.echo “Name....: ” & oRecordSet.Fields.Item(“UName”) & “ Phonetic..: ” &_
oRecordSet.Fields.Item(“UNameP”)

' ユーザーを作成します。
Set oUser = oContainer.Create(“User”,“CN=”&sName)
' プロパティの値をユーザーに割り当てます。
oUser.Put “samAccountName”,sName
oUser.Put “DisplayName”,sDisplayName
oUser.Put “msDS-PhoneticDisplayName”,sDisplayNameP
oUser.Put “userPrincipalName”,sName&“@”&sDomain

' ユーザー データを設定できたので、Active Directory に登録します。
oUser.SetInfo
' 次のデータ用にユーザーをクリーンアップします。
Set oUser = Nothing

' 次のレコードに移動します。
oRecordSet.MoveNext
Loop

' コンテナとファイルの接続をクリーンアップします。
oConnection.close
Set oConnection = Nothing
Set oContainer = Nothing
WScript.Echo “Finished”

Active Directory で使用できるほとんどのフィールドに、データを追加できます。たとえば、名のフリガナと姓のフリガナの場合、次の記述をスクリプトに追加できます。

oUser.Put “msDS-PhoneticFirstName”,sFirstNamePhoneticVariable
oUser.Put “msDS-PhoneticLastName”,sFirstLastPhoneticVariable

スクリプト内にも注釈したように、Server 2008 には Jet.OLEDB.4.0 が含まれていないので、別の OS または別のデータベースによる方法を使用する必要があります。ここでは、単純な例を示すために Jet.OLEDB.4.0 を使用しました。

プログラミング (例)

すべての .NET 言語には、Active Directory 用のコネクタがあります。C# を使用した単純な例を次に示します。テスト セットアップ内の単一の OU のすべてのユーザーを取得し、フリガナ情報を指定します。コード内の [your domain] という箇所は実際の情報に置き換えてください。

System.DirectoryService リソースは実際の環境に追加しておく必要があります。その方法については、必要に応じてオンラインで調べてください。ここで紹介するアプリケーションは、C# のコマンド ライン プロジェクトを Visual Studio 2008 Beta2 で作成したものです (最近のバージョンであれば、他のバージョンの Visual Studio でも使用できます)。

using System;

using System.DirectoryServices; 


namespace LDAPFurigana

{

    class Program

    {

        static void Main(string[] args) 

        {

            DirectoryEntry myOrg = new

                DirectoryEntry("LDAP://[your domain]/OU=MyOrg,dc=[your domain],dc=com"); 

            DirectorySearcher mySearcher = new DirectorySearcher(myOrg); 


            // DirectorySearcher に対して、必要とするプロパティを指定します。

            mySearcher.PropertiesToLoad.Add("sAMAccountName"); 

            mySearcher.PropertiesToLoad.Add("displayName"); 

            mySearcher.PropertiesToLoad.Add("msDS-PhoneticDisplayName"); 


            // 必要なのはユーザーのみなので

            mySearcher.Filter = "(objectClass=person)"; 


            // 結果は、sAMAccountName で並べ替えて返されますが、

            // 表示名のフリガナで並べ替えてみましょう。

            mySearcher.Sort.PropertyName = "msDS-PhoneticDisplayName"; 


            Console.WriteLine("User Name\tDisplay Name\tPhonetic Display Name"); 

            foreach (SearchResult myResults in mySearcher.FindAll())

            {

                try

                {

                    DirectoryEntry currentEntry = myResults.GetDirectoryEntry();

                    Console.WriteLine(currentEntry.Properties["sAMAccountName"].Value.ToString() + "\t" +

                        currentEntry.Properties["displayName"].Value.ToString() + "\t" +

                        currentEntry.Properties["msDS-PhoneticDisplayName"].Value.ToString());

                }


                catch (Exception e) 

                {

                    Console.WriteLine(e); 

                }

            }

        }

    }

}

これを実行すると、次のような結果が出力されます。

C:\>LDAPFurigana.exe
User NameDisplay NamePhonetic Display Name
saitoshacho    際等 社長      サイトウ シャチョウ
saitokacho     再等 課長      サイトウ カチョウ
saitoincho     齋藤 院長      サイトウ インチョウ
saitokakaricho 斎藤 係長      サイトウ カカリチョウ
saitobucho     齊藤 部長      サイトウ ブチョウ
saitokocho     斉藤 校長      サイトウ コウチョウ

エントリの追加も同様に行うことができます。DirectoryEntry を使用して、子エントリをベースの DirectoryEntry エントリに追加します。少なくとも、sAMAccountName パラメータを設定する必要があります。おおよそ次のようになります。

DirectoryEntry myOrg = new
                DirectoryEntry("LDAP://testdom/OU=MyOrg,dc=contoso,dc=com"); 
DirectoryEntry newUser = myOrg.Children.Add("cn=佐々木理恵 ", "user"); 
newUser.Properties["sAMAccountName"].Add("riesasak"); 
newUser.Properties["displayName"].Add("佐々木理恵"); 
newUser.Properties["msDS-PhoneticDisplayName"].Add("ササキリエ"); 
//ユーザーを作成します
newUser.CommitChanges();

ユーザーは、CommitChanges メソッドを呼び出すまで作成されないので注意してください。完全なコード サンプルについては、「付録」を参照してください。

ページのトップへ  ページのトップへ

4. フリガナの並べ替えと検索

フリガナ データがあれば、日本語の漢字名の並べ替えと検索をいっそう容易に行うことができます。ここでは、Windows Server 2008 で名前の並べ替えおよび検索を行う方法を紹介し、その制限についても説明します。

Active Directoryの制限を考慮して、Active Directory でデータを入力する際は、全角のひらがなまたはカタカナを使用することをお勧めします。検索文字列では、ひらがなとカタカナが区別されませんが、半角のカタカナと全角のカタカナは区別されます。

並べ替え

Server 2008 に用意されている “Active Directory ユーザーとコンピュータ” スナップインでの並べ替え機能について紹介します。既定では、フリガナ フィールドが表示されません。フリガナ フィールドは、使用するビューに追加する必要があります。フリガナ フィールドを追加し、漢字ベースの名前の並べ替えをスムーズに行うには、次の手順に従います。

  1. Windows Server 2008 の [管理ツール] で、[Active Directory ユーザーとコンピュータ] を開きます。
  2. [表示] メニューから、[列の追加と削除] を開きます。
  3. [フリガナ (表示名)] (または [フリガナ (名)]/[フリガナ (姓)]) 列を追加します。
  4. 表示順序を設定します。
  5. [OK] をクリックすると完了です。
  6. データを取得する組織単位 (OU) を開きます。
  7. [フリガナ (表示名)] 列ヘッダーをクリックすると、データの正しい並べ替えが実行されます。

これにより、データが表示名のフリガナで並べ替えられます。ただしこれには、制限事項もあります。[フリガナ (表示名)] 列にデータがない名前は、一覧の先頭に表示されます。また、Windows では、並べ替え時に濁点 ( ゛) と半濁点 (°) が無視され、文字列内の次の文字が 2 番目の並べ替えキーとして使用されます。

図 3 : [Active Directory ユーザーとコンピュータ] でのフリガナによる並べ替え

3 : [Active Directory ユーザーとコンピュータ] でのフリガナによる並べ替え

検索

検索は、[Active Directory ユーザーとコンピュータ] で他のオブジェクトを検索する場合と同様の方法で行います。

一般的な検索

一般的な検索を実行するには、検索を行う組織単位を右クリックして、[検索] をクリックします。検索ボックスの [名前] フィールドに、名前の任意の部分を入力すると、検索が実行されます。

制限事項 :
検索は、すべての名前フィールド ([名]、[姓]、[表示名]、[フリガナ (名)]、[フリガナ (姓)]、および [フリガナ (表示名)]) が対象になります。検索は先頭の文字からのみ行われます。このため、名前の最後の部分の検索は正しく実行できません (つまり、“スズキ” を検索する際に “ズキ” を使用した検索は行うことができません)。同様に、表示名 (姓名) のフリガナ “ヤスダ エイジ” が入力されていたとしても、名のフリガナ データが入力されていなければ、名のフリガナを検索できません。つまり、“エイジ” を検索すると結果は空になり、“ヤスダ” または “ヤスダエイジ” を検索すると目的のレコードが返されます。これはローマ字ベースの名前でも同じです。

2 つ目の制限は、フリガナ データが全角のカタカナまたはひらがなの場合、半角文字では検索できないということです。たとえば、あるユーザーの姓のフリガナが全角の “ヤスダ” であるとします。このとき、半角カタカナの “ヤスダ” を使用してこのユーザーを検索しようとしても、見つかりません。これを回避する方法はなく、フリガナ データと同じ種類の文字で検索を行うようにするしかありません。

Windows Server 2008 でのもう 1 つの制限は、文字と濁点/半濁点を区別できないことです。たとえば、名が “ホ” から始まるユーザーを検索すると、名が “ホ”、“ボ”、または “ポ” から始まるすべてのユーザーが返されます。このことは、既知の問題であり、以前から制限事項として存在しています。このことは、並べ替え順にも影響します。

高度な検索

高度な検索を行うと、検索対象をスキーマ内の特定のフィールドに絞ることができます。フリガナに関して、これには [フリガナ (表示名)]、[フリガナ (名)]、[フリガナ (名)] が含まれます。高度な検索を使用するには、検索する組織単位を右クリックして、[検索] をクリックします。[詳細] タブをクリックします。[フィールド] ボックスの一覧の [ユーザー] を選択します。一覧表示されている各種のフリガナを検索できることがわかります。

この検索では、[次の文字列で始まる]、[次の文字列で終わる]、[次の値に完全に一致する]、[存在する]、および [存在しない] の条件を使用できます。これによって、たとえば表示名の名を検索するなどの操作が可能になります。例を挙げると、表示名のフリガナが “ヤスダ エイジ” である場合、[次の文字列で終わる] 条件を使用して “エイジ” を検索すると、正しい結果を得ることができます。もちろん、名のフリガナを設定済みであれば、この操作は不要です。[存在しない] を使用して、組織全体から、フリガナが設定されていないユーザーを検索することもできます。制限事項は、さきほど説明した一般的な検索の場合と同様です。

Dsquery.exe

前に示した dsquery.exe の例は、こちらを参照してください。

ページのトップへ  ページのトップへ

付録

日本語以外の言語のシステムにフリガナ編集ページを追加する方法

日本語以外の Active Directory 環境にフリガナのプロパティ ページを追加するには、Active Directory のスキーマを手動で拡張する必要があります。これを行うには、ADSI エディタを使用します。

Active Directory の Configuration スキーマに次の GUID 値を追加する必要があります。

CN=user-Display,CN=409,CN=DisplaySpecifiers,CN=Configuration,DC=xxx
adminPropertyPages: 12,{2B36667C-0729-4e7f-840A-E2E546D9D99C}

Dd263201.warning(ja-jp,TechNet.10).gif 警告 :

Active Directory のスキーマは、正しく編集しないと、使用不可能な状態になる場合があります。変更を行う前に、必ず環境のバックアップを行ってください。

この操作を行うには、次の手順に従います。

[スタート] ボタンをクリックし、[管理ツール] をクリックします。使用中のサーバーに “Active Directory ドメイン サービス” ロールがインストールされていれば、[ADSI エディタ] が表示されます。これを開きます。

図 4 : ADSI エディタのメイン ページ

4 : ADSI エディタのメインページ

[操作] メニューの [接続] をクリックします。これにより [接続の設定] ダイアログ ボックスが開きます。[構成設定] に接続する必要があります。[既知の名前付けコンテキストを選択する] オプション ボタンをクリックし、一覧の [構成] をクリックします。

構成スキーマを拡張し、“DisplaySpecifiers” CN をクリックします。次に、日本語コード ページ CN である “409” をクリックします。“user-Display” CN が表示されるので、これをダブルクリックします。

図 5 : ADSI エディタの [接続設定] ダイアログ ボックス

5 : ADSI エディタの [接続設定] ダイアログボックス

図 6 : 日本語以外のシステムにフリガナ用タブを追加するために必要な場所を示す、ADSI エディタのスクリーン ショット

6 : 日本語以外のシステムにフリガナ用タブを追加するために必要な場所を示す、ADSI エディタのスクリーンショット

複数値プロパティ adminPropertyPages に、次のデータを追加します。

adminPropertyPages: 12,{2B36667C-0729-4e7f-840A-E2E546D9D99C}

Dd263201.warning(ja-jp,TechNet.10).gif 警告 :

これは複数値プロパティです。ここで行う操作は、上のデータの追加のみです。既存のデータは削除しないでください。

図 7 : 日本語以外の Server 2008 システムの [Active Directory ユーザーとコンピュータ] ページでフリガナを有効にするために修正する必要のある、ADSI エディタの表示プロパティ

7 : 日本語以外の Server 2008 システムの [Active Directory ユーザーとコンピュータ] ページでフリガナを有効にするために修正する必要のある、ADSI エディタの表示プロパティ

図 8 : ADSI エディタの [複数値の文字列エディタ] のスクリーン ショット

8 : ADSI エディタの [複数値の文字列エディタ] のスクリーンショット

[OK] をクリックし、ADSI エディタを閉じます。[Active Directory ユーザーとコンピュータ] に移動すると、フリガナを編集できます。

図 9 : 英語版の Active Directory で表示された [フリガナ] タブ

9 : 英語版の Active Directory で表示された [フリガナ] タブ

C# による Active Directory の操作

次に示すコード の一部には、ユーザーを作成し、そのユーザーの追加先である Active Directory OU の内容を表示する処理が含まれています。フリガナ (読み) 情報を追加する方法も示されています。これは C# コード の一部ですが、VB.NET で記述してもよく似たコードになります。このコードを正しく動作させるには、プロジェクト内で System.DirectoryServices.dll への参照が必要になります。

using System;
using System.DirectoryServices;

namespace LDAPFurigana
{
    class Program
    {
        static void Main(string[] args)
        {
            // まず、Active Directory にバインドする必要があります。わかりやすくする
            // ために、ここではローカルでバインドしています。つまり、このコード の一部は
            // ドメイン コントローラ サーバーでローカル実行する必要があります。
           DirectoryEntry myOrg = new
                DirectoryEntry("LDAP://OU=MyOrg,dc=contoso,dc=com");
            
            // ではユーザーを作成しましょう。

            // 作成しようとしているユーザーが既に存在する場合、この処理は失敗します。
           try
           {
                // まず、ユーザー情報を格納するための新しい DirectoryEntry を作成します。
                // これは、既にある DirectoryEntry の子になります。

                // 通常は、フォームまたはコマンド ラインの引数としてこのデータを取得します。
                DirectoryEntry newUser = myOrg.Children.Add("cn=佐々木理恵", "user");

                // ユーザーはまだ作成されていません。変更をコミットするまで、処理は
                // 行われません。
                // ユーザーを作成する前に、そのユーザーにプロパティを追加する必要
                // があります。
                newUser.Properties["sAMAccountName"].Add("riesasak");
                newUser.Properties["displayName"].Add("佐々木理恵");
                newUser.Properties["SN"].Add("佐々木"); // 姓
                newUser.Properties["givenName"].Add("理恵"); // 名
                // フリガナ (読み) 用のデータ
                newUser.Properties["msDS-PhoneticDisplayName"].Add("ササキリエ");
                newUser.Properties["msDS-PhoneticFirstName"].Add("リエ");
                newUser.Properties["msDS-PhoneticLastName"].Add("ササキ");
                
                
                // ユーザーを作成します。
                newUser.CommitChanges();

                // 有効なユーザーを作成します。
                int val = (int)newUser.Properties["userAccountControl"].Value;
                newUser.Properties["userAccountControl"].Value = val | 0x0200;
                                                                    // NORMAL_ACCOUNT

                // パスワードを設定します。
               newUser.Invoke("SetPassword", new object[] {"qwerty123!@#"});
                newUser.CommitChanges();

                Console.WriteLine("User 佐々木理恵 created! \n\n");
            }
            catch (Exception e)
            {
                // ユーザーが作成済みであるなどの理由で、この処理は失敗することがあります。
                Console.WriteLine(e);
            }
            // AD のオブジェクトを検索するには DirectorySearcher を使用します。
            // 次のように作成します。
          DirectorySearcher mySearcher = new DirectorySearcher(myOrg);
            
            // 必要なプロパティを DirectorySearcher に対して
            // 指定します。
            mySearcher.PropertiesToLoad.Add("sAMAccountName");
            mySearcher.PropertiesToLoad.Add("displayName");
            mySearcher.PropertiesToLoad.Add("msDS-PhoneticDisplayName");

            // ユーザーのみが必要なので、次のようにします。
            mySearcher.Filter = "(objectClass=person)";
            
            // 結果は sAMAccountName で並べ替えて返されますが、
            // 表示名のフリガナで並べ替えてみましょう。
           mySearcher.Sort.PropertyName = "msDS-PhoneticDisplayName";

            Console.WriteLine("User Name\tDisplay Name\tPhonetic Display Name");
            foreach (SearchResult myResults in mySearcher.FindAll())
            {
                try
                {
                    DirectoryEntry currentEntry = myResults.GetDirectoryEntry();
  1. このページは、既定では日本語の Active Directory 環境でのみ表示されます。このページを他のロケール (英語など) で表示する方法については、「付録」を参照してください。

ページのトップへ  ページのトップへ