ほぼすべてのゾーンで出会うレコード
CNAMEとAレコードの違いと使い分け
どちらのレコードも、ホスト名をどこかに向けます。違いは 何を 指すかにあります。そしてその違いが、IPアドレスが変わったときに設定を正しく保つ責任を誰が負うかを決めます。
| Aレコード | CNAMEレコード | |
|---|---|---|
| 指す先 | IPアドレス | 別のホスト名 |
| 例 | 93.184.216.34 | myapp.herokudns.com |
| 追加の問い合わせ | 不要。それが最終的な答え | 必要。指す先も解決する |
| ルートで使えるか | 使える | 使えない(後述) |
| 同じ名前にほかのレコードを置けるか | 置ける | 置けない。単独でなければならない |
| IPが変わったときの更新 | 自分で編集する必要がある | 自動で追従する |
判断基準は1つの質問だけ
重要なポイント
IPアドレスを自分で管理していて、変わらないと分かっていますか。その場合はAレコードを使います。他者が運用するサービスを指す場合はCNAMEを使います。そうすれば、相手側のアドレス変更でサイトが止まることはありません。
ほとんどの方にとって、判断はこれだけです。この記事の残りは、実際に問題を引き起こしやすい細部の話です。
CNAMEが解決される仕組み
CNAMEは Canonical Name(正規名)の略です。「この名前は別名なので、代わりにあちらの名前を調べてください」という意味になります。
shop.example.com. 3600 IN CNAME stores.myshopify.com.
stores.myshopify.com. 300 IN A 23.227.38.65shop.example.com を問い合わせたリゾルバーは、まずCNAMEを受け取り、次に stores.myshopify.com を解決して、23.227.38.65 を返します。問い合わせは1回ではなく2回になりますが、増えるのは数ミリ秒で、ほとんどの場合キャッシュされます。
利点は、Shopifyが新しいアドレスに移行するとき、Shopify側でAレコードを1つ変更するだけで、あなたのドメインも自動的に追従することです。Aレコードの場合は、自分で気づいて編集するまで、サイトが止まってしまいます。
ルートドメインの制限
これはDNSで最もよくあるつまずきの1つです。そしてこれはプロトコル上のルールであり、お使いのプロバイダーの制約ではありません。
ホスト名しか提供しないホスティング(myapp.herokuapp.com など)で、ルートに問題が生じるのはこのためです。解決策は3つあります。
ALIAS / ANAME / CNAMEフラット化
多くのDNSプロバイダーは、ルートでCNAMEのように振る舞う独自のレコードタイプを提供しています。プロバイダー自身が指す先を解決し、得られたIPを通常の
Aレコードとして返すため、プロトコルのルールには違反しません。Cloudflareではこれを「CNAMEフラット化」、Route 53では「エイリアスレコード」と呼びます。ルートをwwwにリダイレクトする
ルートを小さなリダイレクトサービスに向け、CNAMEは
wwwに置きます。シンプルで、どのプロバイダーでも使えますが、訪問者にとってはホップが1回増えます。Aレコードを使い、保守の手間を受け入れる
プロバイダーが安定したIPを公開し、静的であると明記しているなら、ルートにAレコードを置いて問題ありません。安定性が保証されているかどうかは必ず確認してください。多くのプロバイダーは、保証していないと明言しています。
CNAMEは単独でなければならない
名前にCNAMEがある場合、ほかには何も置けません。A も MX も TXT も不可です。
mail.example.com. IN CNAME ghs.googlehosted.com.
mail.example.com. IN TXT "v=spf1 include:_spf.google.com ~all"このような設定を最初から拒否するプロバイダーもあります。さらに厄介なのは、受け付けたうえで予測できない動作をするプロバイダーもあることです。ある名前に TXT レコードが必要なら、その名前をCNAMEにすることはできません。
それぞれが適しているケース
Aレコードを使うケース
- ルートドメイン。ほぼすべての場合で該当します。
- 静的IPで運用しているサーバー。VPS、専用サーバー、予約済みのクラウドアドレスなどです。
- 同じ名前にほかのレコードも置く必要がある場合。
- アドレスに解決される必要がある
MXの指す先。
CNAMEを使うケース
- マネージドプラットフォーム(Shopify、Heroku、Netlify、Vercel)を指すサブドメイン。
- ルートまたはホスティング先のホスト名を指す
www。 - プロバイダーから作成を求められるドメイン所有確認用のサブドメイン。
- 基盤となるIPを自分で管理できない、あらゆるもの。
現在の設定を確認する
dig +short www.example.com CNAME
dig +short www.example.com A検索ツール なら、任意のドメインの A、AAAA、CNAME レコードをまとめて確認できます。そのため、本来は共存してはいけない両方のレコードを持つ名前も、簡単に見つけられます。
ドメインの公開DNSアドレスを調べたい場合は、Domain IP Lookupツールをお試しください。
このテーマの無料ツール
よくある質問
関連記事
ほぼすべてのゾーンで出会うレコード
DNS Aレコードとは?AAAAが必要になる場面
ドメインを実際にサーバーへ向けるレコードです。その構造、対となるAAAAレコード、サイトが最も壊れやすい4つの間違いを解説します。
ほぼすべてのゾーンで出会うレコード
DNSレコードタイプ徹底解説:完全リファレンス
知っておくべきレコードタイプのすべてについて、役割、書式、そして陥りがちな間違いを、1つのリファレンスページにまとめました。
再帰的なDNS検索を1ホップずつ見る
ブラウザー
example.comを要求
リゾルバー
ISP / 1.1.1.1
ルート + TLD
.comの管理元は?
権威サーバー
正式な回答
この連鎖の各ホップはそれ自体がDNS検索で、結果はその後キャッシュされます
ネームサーバーとは?ドメイン委任の仕組み
どのプロバイダーがDNSを管理するかを決める、たった1つの設定です。レコードを編集しても反映されないことがある理由でもあります。