コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

RFCのMUST/MUST NOT/SHOULD/SHOULD NOT/ MAYに関しては個別に使い方を説明したRFCがある

トリビアの泉みたいな見出し

出典

RFC 2119 - Key words for use in RFCs to Indicate Requirement Levels

こちらはIPAの和訳がある

Key words for use in RFCs to Indicate Requirement Levels

どのようなRFCなのか

特定の大文字英単語(MUST / MUST NOT / SHOULD / SHOULD NOT / MAY ,など)が使われる場合はその言葉そのものに意味を持つというもの。

このルールが働くときにかならずある注記

この大文字英単語に意義をもたせる場合には下記の文章を載せろ、とRFC2119内にも記載があり、この文章の有無が効力を発揮するものかを判断する基準になる。

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT","SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

具体どのようなことを示すのか

大文字英単語が持つ意味合いに関して表にまとめる

表記英語 意味 同列表現
MUST その規定が当該仕様の絶対的な 要請事項であること REQUIRED,SHALL
MUST NOT その規定が当該仕様の絶対的な禁止事項であること SHALL NOT
SHOULD 特定の状況下では、特定の項目を無視する正当な理由が存在するかもしれませんが、 異なる選択をする前に、当該項目の示唆するところを十分に理解し、 慎重に重要性を判断しなければならない RECOMMENDED
SHOULD NOT 特定の動作が容認できる、ないし、非常に有用である、というような 特定の状況下では、正当な理由が存在するかもしれませんが、 このレベルの動作を実装する前に、当該項目の示唆するところを十分に理解し、慎重に重要性を判断しなければならない NOT RECOMENDED
MAY ある要素が、まさに選択的であることを意味します。特定の選択事項(オプション)を含まない実装は、おそらく機能的には劣る ことになるでしょうが、そのオプションを含む他の実装との相互運用に備えなければなりません。 同様に、特定のオプションを含む実装は、そのオプションを含まない実装 との相互運用に備えなければなりません。 OPTIONAL

文章内の記載例

例えば以下のような記述。下記の例の場合は MUST NOT

The user agent MUST NOT include more than one Origin header field in any HTTP request. (ユーザエージェントは、複数の Origin ヘッダーフィールドを、いかなる HTTP request 中にも含めてはならない) - The Web Origin Concept

RFC8174による追加

「小文字はどう捉えればいいのか」という曖昧な部分に関してRFC8174で「単語はすべて大文字である場合にのみ意味を持ち、そうではない場合は通常の英語の意味を持つ」というように追記が加わった。さらに説明用の一文が下記のように変化している。

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED","MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

参考リンク