メインコンテンツまでスキップ

2. 本書で使用する表記規約

本ドキュメントにおけるキーワード "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY"、および "OPTIONAL" は、[RFC 2119] に記載されているとおりに解釈されなければなりません(MUST)。


RFC 2119 キーワードの解釈​

RFC 2119 によれば、これらのキーワードは本仕様において以下の特定の意味を持ちます:

必須要件​

キーワード意味例
MUST絶対的な要件実装はパディング文字を含めなければならない
MUST NOT絶対的な禁止実装は改行を追加してはならない
REQUIREDMUST と同じ標準アルファベットをサポートすることは必須
SHALLMUST と同じデコーダは不正な文字を拒否しなければならない
SHALL NOTMUST NOT と同じエンコーダは非標準文字を使用してはならない

推奨事項​

キーワード意味例
SHOULD強く推奨されるが、例外は可能実装はパディングを検証すべきである
SHOULD NOT強く推奨されないが、例外は可能実装はエラーを無視すべきではない
RECOMMENDEDSHOULD と同じURL 安全アルファベットの使用が推奨される

任意性​

キーワード意味例
MAY真に任意実装はパディングなしモードをサポートしてもよい
OPTIONALMAY と同じ改行のサポートは任意である

基数エンコーディング仕様における適用​

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 キーワードの大文字と小文字の曖昧さ(更新版)