RFCを読む

インターネットやウェブサービスに関わる仕事をしているのなら、一度はRFCを読んだことがあると思います。 でも、ちょっとRFCの番号をぐぐって日本語訳をみつけてそれらしき箇所を読んで理解したつもりになってませんか?

うわっ… 私のRFC、古すぎ…?

そんなふうにして見つけて読んでなんとなく理解した内容、ひょっとしたら、すでに古いものかもしれません。

具体例を上げましょう。みんな大好き電子メールのフォーマットは1982年にRFC 822で規定されました。僕と同い年です。 しかし、このRFC 822は2001年にRFC 2822でobsolete(廃止)されています。 さらに、RFC 2822は2008年にRFC 5322でobsoleteされています。

つまり、もしメールのフォーマットを読んだり書いたりするコードを書こうとしてRFC 822だけ読んで満足していると、新しいRFC 5322に則ってつくられたシステムとの対話で困ったことになるわけです。さすがにRFC 822は古すぎるのでそういうことにはならないと思いますが。

じゃあどのRFCが新しくてどれが古いのかっていうのをどうやって知るのよ、となるわけです。新しいRFCにはどのRFCをobsoleteするのか、あるいはupdateするのかが文頭に書かれています。たとえば、RFC 5322だとこんな感じ。

Network Working Group                          P. Resnick, Ed.
Request for Comments: 5322               Qualcomm Incorporated
Obsoletes: 2822                                   October 2008
Updates: 4021
Category: Standards Track


                   Internet Message Format

でも、当然古い方にはどれでobsoleted、updatedされたかは書かれていない。RFC 2822はこんな出だし。

Network Working Group                       P. Resnick, Editor
Request for Comments: 2822               QUALCOMM Incorporated
Obsoletes: 822                                      April 2001
Category: Standards Track


                   Internet Message Format

そこで、一番簡単な方法は、RFCを標準化しているIETFのサイトで検索してみてどれが新しいのかを知る方法です。ぐぐってそれっぽいの探すとかやめましょう。 ここでRFCの番号を入力すると、詳細欄にどれがその文章をobsoleteしているのか、あるいはどの文章でupdateされているのかなどがすぐにわかります。

ところで、現実世界では

実際には新しいRFCに則って実装されているものばかりが世の中にあるわけでもないし、そもそもRFCを読まずにつくったと思われるシステムも普通に使われています。 なにか問題があったときは実務においては臨機応変に対応する必要がありますね。

You SHOULD read RFC before coding.

ちなみに、RFCに登場するMUSTSHOULDなどの表現は英語のmustやshouldとは違う特別な意味を持った単語です。MUSTSHOULDなどの用語についてはRFC2119に解説されています。 自身の記述を規定するRFCがあるところに自己言及感があってグッときますね!