RFC における "MUST"  "SHOULD"  "MAY" の意味 ~ BCP 14 (RFC 2119・RFC 8174 )

# はじめに

**RFC（Request for Comments）** を読んでいると、 **"MUST"**, **"SHOULD"**, **"MAY"** などのキーワードをよく目にします。これらのキーワードは、RFC における**要件レベル**を示すために使用されており、仕様が**どれほど厳密に守られるべきか**を表しています。

これらのキーワードの意味を正しく理解していないと、誤解が生じ、仕様に準拠した実装ができない可能性もあります。

本記事では、**BCP 14**（RFC 2119 と RFC 8174 で構成）を基に、RFC における **"MUST"**, **"SHOULD"**, **"MAY"** などのキーワードの意味について解説します。

:::note
**RFC**（Request for Comments）とは、インターネット技術に関する文書です。技術的な仕様、研究論文、歴史的な文書など、さまざまな種類の文書が含まれます。RFC は、誰でも自由に閲覧することができます。
:::
:::note

**BCP**（Best Current Practice）とは、インターネット技術におけるベストプラクティスをまとめたものです。RFC の中でも、**特に重要度の高いもの**や、**広く採用されているもの**が選定されます。
:::

# BCP 14 とは

[BCP 14](https://datatracker.ietf.org/doc/bcp14/) は以下の 2 つの文書から構成されています。

- RFC 2119 : **MUST**, **SHOULD**, **MAY** などのキーワードの意味を定義する文書
- RFC 8174 RFC 2119 の曖昧な部分を明確にするための文書

これらの文書は、RFC を作成する際、および RFC を解釈する際に、一貫性のある要件レベルを表わすのに重要です。

# RFC 2119

[RFC2119 - Key words for use in RFCs to Indicate Requirement Levels](https://datatracker.ietf.org/doc/html/rfc2119) は**要求レベルを示すために RFC で使用するキーワード**について書かれています。

## 概要

多くの標準化に関する文書では、仕様内の**要求事項**を示すために、いくつかの用語が用いられています。

- これらの用語は、**通常は大文字で表記**されます。
- RFC 2119 に沿って文書を作成する場合は、文書の冒頭付近に以下の文章を挿入する必要があります。
  > 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 RFC 2119.
- これらの用語は、**注意深く、控えめに使用**する必要があります。特に、相互運用性の観点から実際に必要とされる場合や、害を及ぼす可能性のある動作を制限する場合にのみ使用するようにしましょう。
- 仕様書の作成者は、推奨事項や要求事項に従わない場合のセキュリティ上の影響について詳しく説明する時間を割くべきです。

### 要求レベル

| キーワード | 意味   | 詳細                                                                                                                                                                   | 同義語          |
| ---------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------- |
| MUST       | 必須   | 絶対に守らなければならない要件。                                                                                                                                       | REQUIRED, SHALL |
| MUST NOT   | 禁止   | 絶対に行ってはならない禁止事項。                                                                                                                                       | SHALL NOT       |
| SHOULD     | 推奨   | 特定の状況で無視する正当な理由が存在するかもしれないが、慎重に検討する必要がある要件。                                                                                 | RECOMMENDED     |
| SHOULD NOT | 非推奨 | 特定の状況で許容されるかもしれないが、慎重に検討する必要がある非推奨事項。                                                                                             | NOT RECOMMENDED |
| MAY        | 任意   | 項目が本当に任意であり、含むかどうかは業者の選択に委ねられる。特定のオプションを含まない実装は、そのオプションを含む別の実装と相互運用できるようにしなければならない。 | OPTIONAL        |

# RFC 8174

[RFC 8174 - Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words](https://datatracker.ietf.org/doc/html/rfc8174) は RFC 2119 で定義されたキーワードにおける**大文字と小文字の区別**について明確にしています。

> These words are **often** capitalized.

RFC 2119 の文書では、"MUST" や "SHOULD" などのキーワードについて、「**通常は**大文字で表記されます。」と書かれています。この記述は、一部または全部が小文字でも許容される解釈を許してしまう可能性があります。

RFC 8174 では、RFC 2119 で定義されたキーワードは**すべて大文字で表記される**と明確にしています。

また、RFC 8174 に沿って文書を作成する場合は、文書の冒頭付近に以下の文章を挿入する必要があります。

> 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.

# まとめ

RFC における **"MUST"**, **"SHOULD"**, **"MAY"** などは、**要件レベル**を示す重要なキーワードです。これらのキーワードを正しく理解することで、RFC の内容をより正確に解釈することができます。

**BCP 14**（**RFC 2119** と **RFC 8174**）は、これらのキーワードの意味を明確に定義し、RFC 作成者と読者双方の理解を一致させるために役立ちます。

# 参考文献

https://datatracker.ietf.org/doc/bcp14/

https://datatracker.ietf.org/doc/html/rfc2119

https://datatracker.ietf.org/doc/html/rfc8174

https://www.nic.ad.jp/ja/newsletter/No24/090.html