IPv6 アドレス ゼロ圧縮フォーマッター|RFC 5952 準拠の表記統一ツール
IPv6 アドレスを 1 つ入力すると、RFC 5952 準拠の圧縮形式、全 8 グループを 4 桁で並べた展開形式、大文字圧縮形式、IPv4 マップ形式の 4 形式を同時に生成。ゼロ連続区間の数と最長長、文字数も併記し、表記揺れの原因を可視化する。
💡 このツールについて
IPv6 のアドレスは「同じ値でも書き方が複数ある」ことが運用の落とし穴になる。2001:db8::1 と 2001:0db8:0000:0000:0000:0000:0000:0001 は同一アドレスだが、文字列としては別物。DNS の PTR レコード、ファイアウォールの ACL、アクセスログを突き合わせるとき、片方が展開形式・もう片方が圧縮形式だと、目視でも grep でも一致判定を取り損ねる。
RFC 5952 は IPv6 のテキスト表記を 1 通りに正規化する IETF の推奨ルールで、「最長のゼロ連続区間を 1 箇所だけ :: にする」「各グループの先頭ゼロは削る」「16 進は小文字」を定めている。このツールはそのルールを機械的に適用し、推奨形式と、突合用の全展開形式、旧機器照合用の大文字形式を並べて出す。::ffff:0:0/96 範囲のアドレスなら ::ffff:192.0.2.1 の IPv4 マップ形式も生成し、範囲外なら N/A と明示する。ネットワーク機器・ログ・ドキュメントの間で表記を揃えたい人に向く。
🧐 よくある質問
Q. :: はどこに入れるのが正しいのですか?
A. RFC 5952 では、ゼロが 2 グループ以上連続する区間のうち最長のものを 1 箇所だけ :: に置き換えます。同じ長さの区間が複数あるときは左側を優先します。1 グループだけのゼロは :: にしません。
Q. ゼロ連続区間が 2 つあるアドレスはどう扱われますか?
A. 長い方の区間だけが :: になります。たとえば 2001:0:0:1:0:0:0:1 は後半の 3 連続ゼロが圧縮され 2001:0:0:1::1 になります。アドレス情報カードに区間数と最長長を表示するので、どちらが選ばれたか確認できます。
Q. 先頭のゼロはどうなりますか?
A. 各グループの先頭ゼロは削除されます。0db8 は db8、0042 は 42 になります。展開形式では逆に 4 桁固定でゼロを補います。
Q. IPv4 マップ形式が N/A になるのはなぜですか?
A. IPv4 マップ形式は ::ffff:0:0/96(前 80 ビットが 0、続く 16 ビットが ffff)のアドレスだけに存在します。それ以外のアドレスには対応する IPv4 表記がないため N/A と表示します。
Q. ゾーン ID(%eth0 など)も入力できますか?
A. 入力できます。ゾーン ID は圧縮計算には含めず、各出力の末尾にそのまま付加して表示します。
Q. 大文字形式はいつ使うのですか? A. RFC 5952 は小文字を推奨しますが、古い機器やドキュメントでは大文字 16 進表記が残っています。それらと照合するときの参照用に大文字圧縮形式を併記しています。
📚 RFC 5952 が生まれた背景
IPv6 のアドレス表記には、もともと RFC 4291 で「:: は 1 回まで」「先頭ゼロ省略可」といった許容範囲が定義されていた。ただしこれは「こう書いてもよい」という許容であって、唯一解ではない。同じアドレスでも 2001:db8:0:0:0:0:0:1 と 2001:db8::1 の両方が合法で、ツールや人によって出力が割れた。
この表記揺れがログ照合やアドレス比較を煩雑にしたため、RFC 5952 が「推奨される正規表記」を 1 つに定めた。小文字統一、最長ゼロ列の圧縮、左優先のタイブレークといった細かいルールはこの文書に由来する。IPv4 の 192.0.2.1 が誰が書いても同じ文字列になるのに対し、IPv6 は正規化を意識しないと表記が散らばる。このツールは、その正規化を 1 ステップで済ませるためのもの。