ENUMとは? わかりやすく解説

Enum (列挙型) [enum (enumeration)]

前付定数リスト

Enum コンストラクタ


Enum メソッド


パブリック メソッドパブリック メソッド

( プロテクト メソッド参照)
  名前 説明
パブリック メソッド CompareTo 指定したオブジェクトとこのインスタンス比較し、これらの相対値を示す値を返します
パブリック メソッド Equals オーバーロードされますオーバーライドされます対象インスタンスが、指定したオブジェクト等しかどうかを示す値を返します
パブリック メソッド Format 指定した形式に従って指定した列挙型指定した値をそれと等価文字列形式変換します
パブリック メソッド GetHashCode オーバーライドされます。 このインスタンスの値のハッシュ コード返します
パブリック メソッド GetName 指定した値を持つ指定した列挙体にある定数の名前を取得します
パブリック メソッド GetNames 指定した列挙体に含まれている定数の名前の配列取得します
パブリック メソッド GetType  現在のインスタンスType取得します。 ( Object から継承されます。)
パブリック メソッド GetTypeCode このインスタンスの基になる TypeCode を返します
パブリック メソッド GetUnderlyingType 指定した列挙体の基になる型を返します
パブリック メソッド GetValues 指定した列挙体内定数の値の配列取得します
パブリック メソッド IsDefined 指定した値を持つ定数指定した列挙体に存在するかどうかを示す値を返します
パブリック メソッド Parse オーバーロードされます文字列形式での 1 つ上の列挙定数の名前または数値を、等価列挙オブジェクト変換します
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 ( Object から継承されます。)
パブリック メソッド ToObject オーバーロードされます指定した値に設定された、指定列挙型インスタンス返します
パブリック メソッド ToString オーバーロードされますオーバーライドされます。 このインスタンスの値を、それと等価文字列形式変換します
プロテクト メソッドプロテクト メソッド
明示的インターフェイスの実装明示的インターフェイス実装
  名前 説明
インターフェイスの明示的な実装 System.IConvertible.ToBoolean 基になる型に基づいて現在の値をブール値に変換します
インターフェイスの明示的な実装 System.IConvertible.ToByte 基になる型に基づいて現在の値を 8 ビット符号なし整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToChar 基になる型に基づいて現在の値を Unicode 文字変換します
インターフェイスの明示的な実装 System.IConvertible.ToDateTime 基になる型に基づいて現在の値を DateTime変換します
インターフェイスの明示的な実装 System.IConvertible.ToDecimal 基になる型に基づいて現在の値を Decimal変換します
インターフェイスの明示的な実装 System.IConvertible.ToDouble 基になる型に基づいて現在の値を倍精度浮動小数点数変換します
インターフェイスの明示的な実装 System.IConvertible.ToInt16 基になる型に基づいて現在の値を 16 ビット符号付き整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToInt32 基になる型に基づいて現在の値を 32 ビット符号付き整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToInt64 基になる型に基づいて現在の値を 64 ビット符号付き整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToSByte 基になる型に基づいて現在の値を 8 ビット符号付き整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToSingle 基になる型に基づいて現在の値を単精度浮動小数点数変換します
インターフェイスの明示的な実装 System.IConvertible.ToType 基になる型に基づいて現在の値を指定した型に変換します
インターフェイスの明示的な実装 System.IConvertible.ToUInt16 基になる型に基づいて現在の値を 16 ビット符号なし整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToUInt32 基になる型に基づいて現在の値を 32 ビット符号なし整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToUInt64 基になる型に基づいて現在の値を 64 ビット符号なし整数変換します
参照参照

関連項目

Enum 構造体
System 名前空間
ValueType
FlagsAttribute
Char 構造体
Int32

Enum メンバ

列挙体の基本クラス提供します

Enum データ型公開されるメンバを以下の表に示します


プロテクト コンストラクタプロテクト コンストラクタ
パブリック メソッドパブリック メソッド
( プロテクト メソッド参照)
  名前 説明
パブリック メソッド CompareTo 指定したオブジェクトとこのインスタンス比較し、これらの相対値を示す値を返します
パブリック メソッド Equals オーバーロードされますオーバーライドされます対象インスタンスが、指定したオブジェクト等しかどうかを示す値を返します
パブリック メソッド Format 指定した形式に従って指定した列挙型指定した値をそれと等価文字列形式変換します
パブリック メソッド GetHashCode オーバーライドされます。 このインスタンスの値のハッシュ コード返します
パブリック メソッド GetName 指定した値を持つ指定した列挙体にある定数の名前を取得します
パブリック メソッド GetNames 指定した列挙体に含まれている定数の名前の配列取得します
パブリック メソッド GetType  現在のインスタンスType取得します。 (Object から継承されます。)
パブリック メソッド GetTypeCode このインスタンスの基になる TypeCode を返します
パブリック メソッド GetUnderlyingType 指定した列挙体の基になる型を返します
パブリック メソッド GetValues 指定した列挙体内定数の値の配列取得します
パブリック メソッド IsDefined 指定した値を持つ定数指定した列挙体に存在するかどうかを示す値を返します
パブリック メソッド Parse オーバーロードされます文字列形式での 1 つ上の列挙定数の名前または数値を、等価列挙オブジェクト変換します
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 (Object から継承されます。)
パブリック メソッド ToObject オーバーロードされます指定した値に設定された、指定列挙型インスタンス返します
パブリック メソッド ToString オーバーロードされますオーバーライドされます。 このインスタンスの値を、それと等価文字列形式変換します
プロテクト メソッドプロテクト メソッド
明示的インターフェイスの実装明示的インターフェイス実装
  名前 説明
インターフェイスの明示的な実装 System.IConvertible.ToBoolean 基になる型に基づいて現在の値をブール値に変換します
インターフェイスの明示的な実装 System.IConvertible.ToByte 基になる型に基づいて現在の値を 8 ビット符号なし整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToChar 基になる型に基づいて現在の値を Unicode 文字変換します
インターフェイスの明示的な実装 System.IConvertible.ToDateTime 基になる型に基づいて現在の値を DateTime変換します
インターフェイスの明示的な実装 System.IConvertible.ToDecimal 基になる型に基づいて現在の値を Decimal変換します
インターフェイスの明示的な実装 System.IConvertible.ToDouble 基になる型に基づいて現在の値を倍精度浮動小数点数変換します
インターフェイスの明示的な実装 System.IConvertible.ToInt16 基になる型に基づいて現在の値を 16 ビット符号付き整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToInt32 基になる型に基づいて現在の値を 32 ビット符号付き整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToInt64 基になる型に基づいて現在の値を 64 ビット符号付き整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToSByte 基になる型に基づいて現在の値を 8 ビット符号付き整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToSingle 基になる型に基づいて現在の値を単精度浮動小数点数変換します
インターフェイスの明示的な実装 System.IConvertible.ToType 基になる型に基づいて現在の値を指定した型に変換します
インターフェイスの明示的な実装 System.IConvertible.ToUInt16 基になる型に基づいて現在の値を 16 ビット符号なし整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToUInt32 基になる型に基づいて現在の値を 32 ビット符号なし整数変換します
インターフェイスの明示的な実装 System.IConvertible.ToUInt64 基になる型に基づいて現在の値を 64 ビット符号なし整数変換します
参照参照

関連項目

Enum 構造体
System 名前空間
ValueType
FlagsAttribute
Char 構造体
Int32

Enum 構造体

列挙体の基本クラス提供します

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class
 Enum
    Inherits ValueType
    Implements IComparable, IFormattable, IConvertible
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public abstract class Enum : ValueType, IComparable,
 IFormattable, IConvertible
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class Enum abstract : public
 ValueType, IComparable, IFormattable, IConvertible
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public abstract class Enum extends ValueType
 implements IComparable, IFormattable, 
    IConvertible
SerializableAttribute 
ComVisibleAttribute(true) 
public abstract class Enum extends
 ValueType implements IComparable, IFormattable, 
    IConvertible
解説解説

列挙体は、基になる型が Char 以外の整数型である名前付定数です。基になる型が明示的に宣言されない場合は、Int32 が使用されます。通常プラミング言語には、名前付定数とその値の組み合わせから成る列挙体を宣言する構文用意されています。

Enum には、このクラス複数インスタンス比較したり、インスタンスの値を文字列形式変換したり、数値文字列形式をこのクラスインスタンス変換したり、指定した列挙体および値のインスタンス作成するためのメソッド用意されています。

列挙体をビット フィールドとして扱うこともできます詳細については、「FlagsAttribute」を参照してください

実装されているインターフェイス

このクラスは、ValueType から継承し、IComparable、IFormattable、IConvertible の各インターフェイス実装ます。このクラス明示的な IConvertible インターフェイス メンバ実装代わりにConvert クラス変換のために使用します

FlagsAttribute および Enum のガイドライン
使用例使用例

前付きの値を表す列挙体と、名前付きのビット フィールドを表す別の列挙体を使用するコード例次に示します

Imports System

Public Class EnumTest
    
    Enum Days
        Saturday
        Sunday
        Monday
        Tuesday
        Wednesday
        Thursday
        Friday
    End Enum 'Days
    
    Enum BoilingPoints
        Celcius = 100
        Fahrenheit = 212
    End Enum 'BoilingPoints
    
    <FlagsAttribute()> _
    Enum Colors
        Red = 1
        Green = 2
        Blue = 4
        Yellow = 8
    End Enum 'Colors

    Public Shared Sub Main()
        Dim weekdays As Type = GetType(Days)
        Dim boiling As Type = GetType(BoilingPoints)

        Console.WriteLine("The days of the week, and their corresponding
 values in the Days Enum are:")

        Dim s As String
        For Each s In  [Enum].GetNames(weekdays)
            Console.WriteLine("{0,-11} = {1}", s,
 [Enum].Format(weekdays, [Enum].Parse(weekdays, s), "d"))
        
        Next s
        Console.WriteLine()
        Console.WriteLine("Enums can also be created which have
 values that represent some meaningful amount.")
        Console.WriteLine("The BoilingPoints Enum defines the
 following items, and corresponding values:")

        For Each s In  [Enum].GetNames(boiling)
            Console.WriteLine("{0,-11} = {1}", s,
 [Enum].Format(boiling, [Enum].Parse(boiling, s), "d"))
        Next s

        Dim myColors As Colors = Colors.Red
 Or Colors.Blue Or Colors.Yellow
        Console.WriteLine()
        Console.WriteLine("myColors holds a combination of colors.
 Namely: {0}", myColors)
    End Sub 'Main
End Class 'EnumTest
using System;

public class EnumTest {
    enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
    enum BoilingPoints { Celcius = 100, Fahrenheit = 212 };
    [FlagsAttribute]
    enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };

    public static void Main()
 {

        Type weekdays = typeof(Days);
        Type boiling = typeof(BoilingPoints);

        Console.WriteLine("The days of the week, and their corresponding values
 in the Days Enum are:");

        foreach ( string s in
 Enum.GetNames(weekdays) )
            Console.WriteLine( "{0,-11}= {1}", s, Enum.Format( weekdays,
 Enum.Parse(weekdays, s), "d"));

        Console.WriteLine();
        Console.WriteLine("Enums can also be created which have values that
 represent some meaningful amount.");
        Console.WriteLine("The BoilingPoints Enum defines the following items,
 and corresponding values:");

        foreach ( string s in
 Enum.GetNames(boiling) )
            Console.WriteLine( "{0,-11}= {1}", s, Enum.Format(boiling,
 Enum.Parse(boiling, s), "d"));

        Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow;
        Console.WriteLine();
        Console.WriteLine("myColors holds a combination of colors. Namely: {0}"
,
 myColors);
    }
}
using namespace System;
enum class Days
{
   Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday
};

enum class BoilingPoints
{
   Celcius = 100,
   Fahrenheit = 212
};

[FlagsAttribute]

enum class Colors
{
   Red = 1,
   Green = 2,
   Blue = 4,
   Yellow = 8
};

int main()
{
   Type^ weekdays = Days::typeid;
   Type^ boiling = BoilingPoints::typeid;
   Console::WriteLine(  "The days of the week, and their corresponding values
 in the Days Enum are:" );
   Array^ a = Enum::GetNames( weekdays );
   Int32 i = 0;
   do
   {
      Object^ o = a->GetValue( i );
      Console::WriteLine(  "{0,-11}= {1}", o->ToString(), Enum::Format(
 weekdays, Enum::Parse( weekdays, o->ToString() ),  "d" ) );
   }
   while ( ++i < a->Length );

   Console::WriteLine();
   Console::WriteLine(  "Enums can also be created which have values that represent
 some meaningful amount." );
   Console::WriteLine(  "The BoilingPoints Enum defines the following items,
 and corresponding values:" );
   i = 0;
   Array^ b = Enum::GetNames( boiling );
   do
   {
      Object^ o = b->GetValue( i );
      Console::WriteLine(  "{0,-11}= {1}", o->ToString(), Enum::Format(
 boiling, Enum::Parse( boiling, o->ToString() ),  "d" ) );
   }
   while ( ++i < b->Length );

   Array^ c = Enum::GetNames( Colors::typeid );
   Colors myColors = Colors::Red | Colors::Blue | Colors::Yellow;
   Console::WriteLine();
   Console::Write(  "myColors holds a combination of colors. Namely:" );
   for ( i = 0; i < 3; i++ )
      Console::Write(  " {0}", c->GetValue( i ) );
}
import System.*;

public class EnumTest
{
    enum Days
    {
        saturday (0),
        sunday (1),
        monday (2),
        tuesday (3),
        wednesday (4),
        thursday (5),
        friday (6);
    } //Days

    enum BoilingPoints
    {
        celsius (100),
        fahrenheit (212);
    } //BoilingPoints

    /** @attribute FlagsAttribute()
     */
    enum Colors
    {
        red (1),
        green (2),
        blue (4),
        yellow (8);
    } //Colors

    public static void main(String[]
 args)
    {
        Type weekdays = Days.class.ToType();
        Type boiling = BoilingPoints.class.ToType();

        Console.WriteLine("The days of the week, and their corresponding"
            + " values in the Days Enum are:");
        String s[] = Enum.GetNames(weekdays);
        for (int iCtr = 0; iCtr < s.length;
 iCtr++) {
            Console.WriteLine("{0,-11}= {1}", s[iCtr],
                Enum.Format(weekdays, Enum.Parse(weekdays, s[iCtr]), "d"));
        }

        Console.WriteLine();
        Console.WriteLine("Enums can also be created which have values that"
            + " represent some meaningful amount.");
        Console.WriteLine("The BoilingPoints Enum defines the following items
,"
            + " and corresponding values:");
        String s1[] = Enum.GetNames(boiling);
        for (int iCtr = 0; iCtr < s1.length;
 iCtr++) {
            Console.WriteLine("{0,-11}= {1}", s1[iCtr], 
                Enum.Format(boiling, Enum.Parse(boiling, s1[iCtr]), "d"));
        }
        Colors myColors = Colors.red | Colors.blue | Colors.yellow;
        Console.WriteLine();
        Console.WriteLine("myColors holds a combination of colors. Namely: {0}"
,
            myColors);
    } //main
} //EnumTest
import System;

public class EnumTest {
    enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
    enum BoilingPoints { Celcius = 100, Fahrenheit = 212 };
    FlagsAttribute
    enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };

    public static function
 Main() {

        var weekdays : Type = Days;
        var boiling : Type = BoilingPoints;

        Console.WriteLine("The days of the week, and their corresponding values
 in the Days Enum are:");

        for( var i : int
 in Enum.GetNames(weekdays) )
            Console.WriteLine( "{0,-11}= {1}", Enum.GetNames(weekdays).GetValue(i),
 
            Enum.Format( weekdays, Enum.Parse(weekdays, Enum.GetNames(weekdays).GetValue(i)),
 "d"));

        Console.WriteLine();
        Console.WriteLine("Enums can also be created which have values that
 represent some meaningful amount.");
        Console.WriteLine("The BoilingPoints Enum defines the following items,
 and corresponding values:");

        for ( var j : int
 in Enum.GetNames(boiling) )
            Console.WriteLine( "{0,-11}= {1}", Enum.GetNames(boiling).GetValue(j),
 
            Enum.Format(boiling, Enum.Parse(boiling, Enum.GetNames(boiling).GetValue(j)),
 "d"));

        var myColors : Colors = Colors.Red | Colors.Blue | Colors.Yellow;
        Console.WriteLine();
        Console.WriteLine("myColors holds a combination of colors. Namely: {0}"
,
 myColors);
    }
}
スレッド セーフスレッド セーフ

この型は、マルチスレッド操作に対して安全です。

プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

ENUM

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/03/15 15:54 UTC 版)

ナビゲーションに移動 検索に移動

ENUM (E.164 NUmber Mapping) は、公衆交換電話網電話番号体系をインターネットIPアドレス体系と統合する電話番号マッピング (telephone number mapping) の代表的な規格。電話番号はE.164規格で体系化されており、インターネットはIPアドレスや他のリソース情報とドメイン名のリンクに Domain Name System (DNS) を用いる。電話番号マッピングシステムは、DNSを単に参照することで与えられた電話番号に対応したサービスを提供するインターネット上のサーバを決定するものである。ENUMでは特別なDNSレコードタイプを使い、電話番号からインターネット通信に使える Uniform Resource Identifier やIPアドレスに変換する。

概要

顧客が期待するような形で電話番号をダイヤルできることは、従来の電話サービス(PSTN)とIP電話VoIP)の集中・収斂にとって重要であり、新たなIPマルチメディアサービスの開発にとっても重要である。複数の通信サービスでの単一の汎用個人識別子の問題は、様々な手法で解決できる。1つの単純な手法としてENUMがある。これはIETFが既存のE.164電話番号体系、プロトコル、基盤を使って策定したもので、単一の個人識別子を使って各種サービスに間接的にアクセスできるようにしている。ENUMはまた、IP側から電話網にシームレスに接続する手段も提供する。

システム詳細

ENUM加入者がENUMサービスを活性化して使うには、登録者から以下の3つの要素を得る必要がある。

  1. 個人の Uniform Resource Identifier (URI) - ネットワークのIP部分で使用(後述)
  2. 個人URIと対応したE.164の通常の電話番号 - ネットワークのPSTN部分で使用
  3. 権限のある者が、その個人URIでアクセスできるNAPTRレコードに、呼の転送/終端設定を書き込む。

動作手順は次の通りである。登録者は加入者(被登録者)にドメイン名とURIを提供し、それをDNSサーバに渡すことでNAPTRレコードとE.164の電話番号(ENUM番号)をフェッチする。そのURIのドメイン名と加入者のENUM番号は1対1に対応している。このとき加入者のURIに対応したNAPTRレコードには、その加入者の呼の転送/終端の設定が含まれている。

したがって、発呼側がPSTN網で着呼側のENUM番号をダイヤルすると、その番号はENUMゲートウェイが対応するURIに変換する。このURIはNAPTRレコードを参照しフェッチするのに使われ、それによって被呼加入者が呼を転送したいのか着信したいのかを知ることができる。これをアクセス情報と呼び、被登録者(被呼加入者)がNAPTRレコードに自身の選択を書いて指定する。NAPTRレコードとは、RFC 2915 に定義された "Naming Authority Pointer Resource Records" であり、電子メールアドレス、FAX番号、個人ウェブサイト、VoIP番号、携帯電話番号、ボイスメールシステム、IP電話アドレス、ウェブページ、GPS座標、転送、インスタントメッセージなどが指定できる。一方、発呼側がIP側にいるとき、ダイヤラーソフトウェアの一部であるユーザエージェント (UA) がE.164番号をダイヤルするが、ダイヤラーUAがそれをURIに変換し、ENUMゲートウェイのDNSを参照してNAPTRレコードを取得して被呼加入者が呼を転送したいのか着信したいのかを知る。なお、被呼加入者はPSTN側でもIP側でも構わない。

新たな個人用E.164番号(ENUM番号)を使ってデータベースを参照する場合、これを indirect calling support service と呼ぶ。

ITU ENUM には特別なゾーン "e164.arpa" がIP側ネットワークでの ENUM E.164番号用に割り当てられている。RFC 3761 には任意のENUM番号をURIに変換する方法が定義されている。それは番号を逆に綴り、各桁の間にドットを挟み、e164.arpa を最後尾につけるというものである。例えば、+1 555 42 42 なら 2.4.2.4.5.5.5.1.e164.arpa となる。

このURIをつかってDNSを参照すると、SIP VoIP 電話などのサービスのインターネットアドレスが得られる。また、NAPTRレコードで加入者の転送/着信設定がわかる。したがって、システム全体でE.164アドレスからSIPアドレスへの変換が可能である。NAPTRレコードは例えば次のようになっている。

$ORIGIN 2.4.2.4.5.5.5.1.e164.arpa.
IN NAPTR 100 10 "u" "E2U+sip"  "!^.*$!sip:phoneme@example.net!" .
IN NAPTR 102 10 "u" "E2U+mailto" "!^.*$!mailto:myemail@example.com!" .

この例では、"E2U+sip" サービスを使いたい場合、アドレスとして sip:phoneme@example.net を使うべきであることがわかる。正規表現部分は電話会社が全顧客のアドレスを容易に割り当てられるようにしている。例えば、番号が +15554242 なら、SIPアドレスは sip:4242@555telco.example.net、+15551234 なら sip:1234@555telco.example.net となる。

次の図はENUMの動作例を示したものである。加入者Aが加入者Bに発呼する場合である。

ENUMを使ったVoIPの応用例
  1. ENUMが使える加入者端末装置やPBXやゲートウェイのユーザエージェントが +34 98 765 4321 という番号を RFC 3761 にある規則に従い、ENUMドメイン 1.2.3.4.5.6.7.8.9.4.3.e164.arpa に変換する。
  2. DNSに要求を送り、ENUMドメイン 1.2.3.4.5.6.7.8.9.4.3.e164.arpa を参照する。
  3. クエリ結果として RFC 3403 にある Naming Authority Pointer Resource レコード (NAPTR) が得られる。この例では、VoIPプロトコルとして RFC 3261SIP を使いインターネット内で到達可能なアドレスが返ってきたとする。
  4. 端末アプリケーションが通信リンクを設定し、インターネット上で呼がルーティングされる。

これらは全てユーザエージェントが自動的に行うため、ENUMユーザーはDNS参照が行われていることには気づかない。実際、ENUM対応エージェントを持つウェブブラウザで電話番号を入力した場合、探している情報の種類(電子メールアドレス、電話番号、ウェブアドレスなど)をPCや端末上で示せば、番号がドメイン名に変換される。これがインターネット上のENUMサーバに送られ、そのドメイン名に対応したNAPTRレコードが返ってくる。このようにENUMは電話番号を要求したアドレスや番号に対応したドメイン名に変換する機構だが、ユーザー自身には見えないところでDNSを使っている。

利用

ENUMによる呼の転送

ENUMによる呼の転送

ENUMによる呼の転送の一方式を次の図に示す。発信者は別の加入者の番号を電話機でダイヤルする。するとENUM参照が行われる。DNSはVoIP通信、電話番号、電子メールアドレスなどについてのNAPTRレコードを返す。そして、VoIPについてのレコードを使い、通話相手との接続を確立しようとする。相手がオンラインでない場合、PSTNや携帯電話への接続が選択されることになる。これらも失敗した場合、電子メールアドレスにボイスメールを送ることになる。

e164.arpa のサブドメインはITUにより国番号ごとに割り当てられている。通常、各国の政府機関がその範囲の管理を分担しており、どう運営するかは各国に任されている。通常、一般的なDNSレジストリ-登録者モデルを使う。国単位のENUMレジストリは 国番号.e164.arpa というサブドメインのDNS基盤を管理運営する。エンドユーザーの依頼を受けて登録者がENUMの登録を行う。登録者はVoIP事業者や通信事業者であり、VoIPサービスに一環としてENUM登録を行う。ENUMを使ったVoIPサービスでは、被登録者の既存の電話番号をダイヤルすると、PSTNではなくインターネットを使った(被登録者の)IP電話に着信する。ENUMを使っていない人の番号をダイヤルすると、通常通りPSTN内で呼が完結する。

ENUM相当の他のサービスとして E164.org などもある。それらのサービスはPSTN番号を照合する場合もあり、e164.arpa に加えて使うことができる。しかし、このために複雑となり混乱が生じる。複数のDNS参照が必要となり、E.164番号がどのENUM相当のツリーに登録されているかを知ることは決して単純ではない。あるE.164番号が複数のツリーに登録されている場合、返ってくる情報が相互に矛盾している可能性もある。さらに、あるE.164番号を「所有」している加入者が、その番号がどのENUMツリーにどのように登録されているかを知らないという状況もありうる。

被呼加入者機能

ENUMは被呼加入者 (called party) 機能と見ることもできる。基本的にPSTNとVoIPがシームレスに機能するよう設計された間接ダイヤルサービスであり、E.164番号が広く採用され認知されているという事実に基づいている。

電話をする相手がENUMを使うと決めた場合、ENUM番号を公開していて、呼をどのように着信したいかをNAPTR経由で入力しているだろう。それは単なるVoIP識別子かもしれないが、固定電話、携帯電話、ボイスメールサービスなどIP側かPSTN側のいずれかにある一連の転送先を示すことが多い。ENUMを使い、着信方法の希望を電話してくる人に知らせるかどうかは被呼加入者の自由である。

今日、普通に電話をかけるとき、相手とどういう方法で接続するかを決める必要がある。VoIPなのか、固定電話なのか、携帯電話なのか、URI入力や番号のダイヤルでそれらを選択している。ENUMを使った間接ダイヤル方式では、どの手段で接続するかは被呼加入者が選択することになる。間接ダイヤル方式のもう1つの利点は、被呼加入者が電話会社、ウェブページ、電子メールなどの通信サービスを変えても、関係者にそれをいちいち知らせる必要がないという点である。

プレゼンス情報とENUMを組み合わせると、個人の居場所に合わせて転送/着信の設定を自動的に変更することも考えられる。VoIPと携帯電話の自動的な切り替えという意味では、これが最も便利な着信設定方法と言える。

様々なENUM

ENUMを語る際に混乱の元になるのは、今日のENUMの実装として様々なものが存在している点である。ENUMと言った場合、以下のいずれかを指していることがほとんどである。

パブリックENUM
汎用かつ公共のディレクトリ型データベースという元々のENUMの考え方であり、加入者の登録機能と e164.arpa ドメイン内の国番号レベルでの委譲がある。これを「ユーザーENUM」とも呼ぶ。
プライベートENUM
通信事業者、VoIP運用者、ISPなどが自身のネットワーク内でENUMの技術を使うことがある。この場合DNSもそのネットワーク内で同様に使われる。
キャリアENUM
通信事業者のグループが加入者情報をENUMで共有するもの。加入者個人ではなく、事業者が加入者情報を制御する。これを「インフラストラクチャENUM」とも呼び、音声ピアリングをサポートしようとしている新たなIETF勧告の主題になっている。

参考文献

外部リンク


ENUM

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/16 02:16 UTC 版)

E.164」の記事における「ENUM」の解説

E.164電話番号は、DNSのなかのe164.arpaのENUMで使用される例えば、+1 555 42 42 は、ドットでそれらを切り離して、e164.arpa接尾語加えて、数を逆にすることによってホストネームに変換できる。 2.4.2.4.5.5.5.1.e164.arpa そして、SIPIP電話などのサービスのためのIPアドレス調べるためにDNS使用することができる。 代替方法はDUNDiである。(DUNDiはENUM(のP2P実装)。 DUNDiはIETFによってまだ規格化されていない。 E.163は、公衆交換電話網電話番号について勧告した古いITU-T規格であったアメリカ合衆国では、これが以前ディレクトリ番号呼ばれていた。E.163は削除されて、1997年E.164改定1版に組み入れた

※この「ENUM」の解説は、「E.164」の解説の一部です。
「ENUM」を含む「E.164」の記事については、「E.164」の概要を参照ください。

ウィキペディア小見出し辞書の「ENUM」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ENUM」の関連用語

ENUMのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ENUMのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2025 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリの【ENUM】の記事を利用しております。
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのENUM (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのE.164 (改訂履歴)、キーワード (C++) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS