Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

CNAMEレコード(シーネームレコード)とは | 意味や読み方など丁寧でわかりやすい用語解説

CNAMEレコード(シーネームレコード)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

シーネームレコード (シーネームレコード)

英語表記

CNAME (シーネーム)

用語解説

CNAMEレコードは、DNS(Domain Name System)におけるレコードタイプの一つであり、特定のドメイン名に対して別のドメイン名を別名(エイリアス)として関連付ける役割を持つ。これは「Canonical Name(正規名)」の略で、あるドメイン名を解決しようとした際に、そのドメインが実際には別のドメイン名と同一のものであることをDNSに伝えるために使用される。システムエンジニアを目指す上で、ドメインの仕組みを理解する上で非常に重要な要素である。

Webサイトの閲覧やメールの送受信など、インターネット上のあらゆるサービスは、ドメイン名とIPアドレスの関連付けによって成り立っている。通常、特定のドメイン名(例: example.com)がどのサーバーのIPアドレス(例: 192.0.2.1)に対応するかはAレコード(IPv4の場合)やAAAAレコード(IPv6の場合)で直接指定される。しかし、CNAMEレコードは、直接IPアドレスを指定するのではなく、「このドメイン名は、あのドメイン名と同じだよ」と指示を出す。例えば、「www.example.com」というドメインが「example.com」の別名であると定義したい場合に、CNAMEレコードを使用することができる。これにより、利用者は「www.example.com」にアクセスしようとした際、DNSはまず「www.example.com」のCNAMEレコードを見て、それが指し示す「example.com」のIPアドレスを最終的に解決して返す。

詳細に説明すると、CNAMEレコードの仕組みはDNSリゾルバの動作と密接に関連している。利用者のコンピュータが特定のドメイン名(例えば「blog.example.com」)のIPアドレスを知りたい場合、DNSリゾルバに問い合わせる。DNSリゾルバが「blog.example.com」のレコードを調べた結果、CNAMEレコードが存在し、それが「example-server.cloudprovider.com」という別のドメイン名を指していたとする。この場合、DNSリゾルバは「blog.example.com」の解決を中断し、次にCNAMEレコードが指し示す「example-server.cloudprovider.com」のIPアドレスを再度問い合わせに行く。そして、「example-server.cloudprovider.com」のAレコードが見つかり、そのIPアドレスが返されることで、最終的に利用者は「blog.example.com」の実体であるサーバーに接続できるようになる。このように、CNAMEレコードは解決プロセスを別のドメイン名に委譲する機能を提供する。

CNAMEレコードの主なメリットは、管理の簡素化と柔軟性にある。複数のサブドメイン(例: www.example.com, mail.example.com, ftp.example.com)を一つのサーバーで運用している場合、それぞれのサブドメインにAレコードを設定することも可能だが、サーバーのIPアドレスが変更されるたびに、全てのサブドメインのAレコードを手動で更新する必要が生じる。これに対し、各サブドメインに「example.com」を指すCNAMEレコードを設定しておけば、IPアドレスの変更があった際も、「example.com」のAレコードを一つだけ更新するだけで、全てのサブドメインが自動的に新しいIPアドレスを指すようになる。これにより、DNSレコードの管理が大幅に効率化され、運用ミスも減少する。また、CDN(Contents Delivery Network)サービスやクラウドプロバイダのマネージドサービスを利用する際にも、サービス提供側が指定する特定のホスト名に自社のドメインをCNAMEで紐付けることで、簡単にサービスを導入できる。サービス提供側が内部でIPアドレスを変更しても、利用者はCNAMEレコードを更新する必要がないため、運用上の手間が省ける。

一方で、CNAMEレコードにはいくつかの重要な制約と注意点が存在する。最も重要な制約の一つは、「CNAMEレコードが設定されたドメイン名には、他のDNSレコード(SOAレコード、NSレコードを除く)を共存させることができない」というルールである。例えば、「example.com」にCNAMEレコードを設定した場合、その「example.com」に対してはMXレコード(メールサーバーの指定)やTXTレコード(追加情報)などを設定することができなくなる。これは、CNAMEレコードが「このドメインは、実質的に別のドメインと同じである」と宣言するものであるため、そのドメイン自体に固有の他の情報を定義することは矛盾が生じるためである。この制約のため、ゾーンの頂点、つまりルートドメイン(例: example.com)にCNAMEレコードを設定することは、通常は避けるべきである。なぜなら、ルートドメインにはNSレコード(ネームサーバーの指定)やSOAレコード(ゾーンの管理情報)が必須であり、多くの場合MXレコードも設定されるためである。もしルートドメインにCNAMEを設定すると、これらの必須レコードとの共存が不可能となり、ドメインとしての機能が損なわれる可能性がある。

もう一つの注意点は、CNAMEレコードによる名前解決のオーバーヘッドである。クライアントは、CNAMEレコードが指し示す正規名まで名前解決を繰り返す必要があるため、直接Aレコードが指定されている場合と比較して、わずかに解決に時間がかかる可能性がある。また、CNAMEレコードが別のCNAMEレコードを指し、それがさらに別のCNAMEレコードを指すといった「CNAMEチェーン」が発生する場合もあり、これにより解決プロセスがさらに複雑化し、遅延が増す可能性がある。

これらの理由から、CNAMEレコードは、ドメイン名に柔軟な別名を提供し、DNSレコードの管理を効率化する非常に便利なツールである一方で、その制約と特性を十分に理解した上で適切に利用する必要がある。特定のサーバーのIPアドレスを直接指したい場合はAレコードを、そして、既存の別のドメイン名への別名として利用したい場合にCNAMEレコードを使用するという使い分けが基本となる。CNAMEレコードは、現代の複雑なウェブインフラストラクチャにおいて、サービスの柔軟な提供と管理負荷の軽減に不可欠な要素である。

関連コンテンツ