MUST/SHOULDって何が違う?
さまざまな仕様書に、Must, shouldといったキーワードが出てくることがあります。そのニュアンスの違いがよくわからなかったので調べてみました。
RFC2119
前に読んだOpenAPI specificationに、以下RFCへの参照がありました。
Must, shouldなどの用語が定義されています。
まとめ
Key word | 同義語 | 説明 |
---|---|---|
MUST | REQUIRED, SHALL | 必須。仕様上、絶対やらなきゃダメ |
MUST NOT | SHALL NOT | 禁止。仕様上、絶対やっちゃダメ。 |
SHOULD | RECOMMENDED | 基本やるべきだが、状況によっては正当な「やらない理由」がありえる。ただし仕様の意味するところを十分理解し、慎重に検討したうえで、他の方法をとること。 |
SHOULD NOT | NOT RECOMENDED | 基本やらないべきだが、状況によっては正当な「やる理由」がありえる。ただし仕様の意味するところを十分理解し、慎重に検討したうえで、他の方法をとること |
MAY | OPTIONAL | 本当にオプション。やってもやらなくてもよい。ただし、このオプションが実装されたプロダクトと実装されていないプロダクトは、問題なく相互運用できなくてはいけない。 |
所感
SHOULDの仕様に対し、「MUSTじゃないのでやりませんでした。中身はちゃんと読んでいません。」というのは、RFC2119の定義に反していることを理解しました。
SHOULDの仕様を実装しないとき、もしくはSHOULD NOT仕様を実装する際には、十分検討して理由がきっちり説明できることが必要ですね。
また、MAYの仕様に対し、他の実装と相互作用する場合、実装されている場合いない場合両方に対応する必要がある、というのも要注意です。
実装されていないケースを想定しない実装は、やはりRFC2119の定義に反しているということです。