2. 本書で使用する表記規約
本ドキュメントにおけるキーワード "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY"、および "OPTIONAL" は、[RFC 2119] に記載されているとおりに解釈されなければなりません(MUST)。
RFC 2119 キーワードの解釈
RFC 2119 によれば、これらのキーワードは本仕様において以下の特定の意味を持ちます:
必須要件
| キーワード | 意味 | 例 |
|---|---|---|
| MUST | 絶対的な要件 | 実装はパディング文字を含めなければならない |
| MUST NOT | 絶対的な禁止 | 実装は改行を追加してはならない |
| REQUIRED | MUST と同じ | 標準アルファベットをサポートすることは必須 |
| SHALL | MUST と同じ | デコーダは不正な文字を拒否しなければならない |
| SHALL NOT | MUST NOT と同じ | エンコーダは非標準文字を使用してはならない |
推奨事項
| キーワード | 意味 | 例 |
|---|---|---|
| SHOULD | 強く推奨されるが、例外は可能 | 実装はパディングを検証すべきである |
| SHOULD NOT | 強く推奨されないが、例外は可能 | 実装はエラーを無視すべきではない |
| RECOMMENDED | SHOULD と同じ | URL 安全アルファベットの使用が推奨される |
任意性
| キーワード | 意味 | 例 |
|---|---|---|
| MAY | 真に任意 | 実装はパディングなしモードをサポートしてもよい |
| OPTIONAL | MAY と同じ | 改行のサポートは任意である |
基数エンコーディング仕様における適用
MUST の使用
例 1:パディング要件
"実装は、エンコードされたデータの末尾に適切な
パディング文字を含めなければならない。"
違反の結果:❌ デコード失敗、データ破損
例 2:不正文字の処理
"エンコードされたデータが基数アルファベット外の
文字を含む場合、実装はそのデータを拒否しなければならない。"
違反の結果:❌ セキュリティ脆弱性、データ破損
SHOULD の使用
例:エラー報告
"デコードが失敗したとき、実装は明確なエラーメッセージを
提供すべきである。"
非準拠が許容される場合:
- リソース制限のある組み込みシステム
- 性能が重要なシナリオ
MAY の使用
例:オプション機能
"実装は、パディング文字を含まないデータの
デコードをサポートしてもよい。"
意味:これは真に任意の機能であり、実装は
サポートするかどうかを選択してよい。
実践的な適用ガイドライン
実装者向け
準拠の優先順位:
1. MUST/MUST NOT/REQUIRED/SHALL/SHALL NOT
→ 厳格に遵守しなければならない。さもないと非準拠
2. SHOULD/SHOULD NOT/RECOMMENDED
→ 正当な理由がない限り、強く推奨される
3. MAY/OPTIONAL
→ 要件に基づいて決定
テスト担当者向け
テストの重点:
✅ すべての MUST 要件を検証
✅ SHOULD の推奨の実装を確認
⚠️ MAY 機能のサポート状況を文書化
ユーザー向け
実装を選択する際:
1. 実装がすべての MUST 要件を満たしていることを確認
2. SHOULD の推奨に従っている実装を優先
3. MAY 機能については要件に基づいて選択
よくある誤解
❌ 間違った理解
誤解 1:「SHOULD は無視してよい」
✗ 誤り:SHOULD は単なる提案であり、自由に無視できる
✓ 正しい:SHOULD は強く推奨され、正当な理由がある場合のみ逸脱する
誤解 2:「MAY は単なるオプション機能」
✗ 誤り:MAY 機能は重要ではない
✓ 正しい:MAY 機能は任意だが、実装する場合は正しくなければならない
誤解 3:「MUST は単なる提案」
✗ 誤り:MUST は場合によっては無視できる
✓ 正しい:MUST は絶対的な要件であり、厳格に遵守しなければならない
本仕様の主要な要件のプレビュー
以降のセクションでは、以下の主要な要件が登場します:
セクション 3.1:
"実装は、参照仕様が明示的に要求しない限り、
基数エンコードされたデータに改行を追加してはならない……"
セクション 3.2:
"実装は、エンコードされたデータの末尾に適切な
パディング文字を含めなければならない……"
セクション 3.3:
"エンコードされたデータが基数アルファベット外の
文字を含む場合、実装はそれを拒否しなければならない……"
これらの要件は MUST を使用しており、それらが絶対的に必須であることを示しています。すべての準拠実装はこれを遵守しなければなりません。
参考文献
- RFC 2119 - RFC で要求レベルを示すためのキーワード
- RFC 8174 - RFC 2119 キーワードの大文字と小文字の曖昧さ(更新版)