この質問が荒れるのは、日本語の「〜する必要はなかった」が、やったのかやらなかったのかを言わないからです。英語はそこを言い分けてしまうので、訳が3つに割れます。
3つを、やったかどうかで並べ替えると一気にほどけます。
📌① needn't have done = 実際にやった。でも無駄だった
He needn't have done that. は「彼はそれをやった。でも、やる必要はなかった」。実行済みが確定します。
だから、この形が出てくる場面はだいたい2つ。恐縮(そこまでしてくれなくても…)か、徒労(やらなくてよかったのに骨折り損だった)です。
You needn't have waited for me. → 待っていてくれた。でも待たなくてよかったのに。
I needn't have worried. → 心配した。でも杞憂だった。
📌② didn't need to = そもそも義務がなかった。やったかどうかは文脈次第
He didn't need to do that. は「その義務・必要がなかった」という事実を述べているだけ。実行したかどうかは、この形からは決まりません。
ただしイギリス英語では、needn't have done と対比させる形で「必要がなかったのでやらなかった」を含ませることが多い、という傾向があります。
I didn't need to buy milk — we already had some. → 買う必要がなかった(たぶん買っていない)。
📌③ didn't have to = 一番よく使う。感謝の決まり文句でもある
He didn't have to do that. も「義務がなかった」。② とほぼ同じですが、こちらのほうが口語で圧倒的によく使われます。アメリカ英語では needn't 自体をあまり使わないので、迷ったらこれで大丈夫です。
そして最重要なのがこれ。プレゼントをもらったとき、何かしてもらったときの定番リアクションが Oh, you didn't have to!。直訳は「しなくてよかったのに」ですが、実質は「そんな、気を遣わせちゃって! ありがとう!」です。
同じ場面で You shouldn't have! も使えます。こちらはもっと感激が強め。どちらも文句ではないので、言われたほうも笑顔で返します。
📌④ 迷ったときの決め方
書きたいのが「やってくれた。でも申し訳ない」→ needn't have done(または You didn't have to.)
書きたいのが「義務がなかった」という事実だけ → didn't have to
英会話でとっさに出したい → You didn't have to do that. Thank you! の丸ごと暗記が一番速い
ちなみに must not は「〜してはいけない」で、意味がまるごと別物です。don't have to(しなくてよい)と must not(するな)を取り違えるミスは、TOEICでも英検でも定番の引っかけです。
🔊そのまま使える例文(音声つき)
再生ボタンを押すと、ネイティブ発音で読み上げます。声に出して真似すると定着が段違いです。
🔥 まるっとまとめ
- needn't have done = やった + 不要だった(恐縮・徒労)
- didn't need to = 義務がなかった(英では「だからやらなかった」寄り)
- didn't have to = 義務がなかった(最も一般的。米語ならこれ一択でよい)
- もらい物への返しは You didn't have to! / You shouldn't have! がテンプレ。文句ではなく感謝。
- don't have to(しなくてよい)と must not(するな)は別物。ここだけは絶対に混ぜない。