英語エラーメッセージ探訪

# 序

英語でそれっぽいエラーメッセージを書けるようになりたいので、OSSのソースを読むとき、ついでにいろんなエラーメッセージやコメントを収集しています。自分が書くときの参考用に、今までに集めたものから記事を書いてみることにしました。

- 英語が得意じゃないにしても、それなりに伝わるようにメッセージを書けるようになりたいという意図です
- 引用してるものと、私がそれっぽく書いたものが混在しています
    - 誤りを見つけたら、ぜひ編集リクエストをください。よろしくお願いします

- 主にJavaScript/TypeScript製のフレームワークやライブラリから拾っています


:::note warn
以下には「よく見る」、「あまり見ない」、「多い」など頻度についての言及がありますが、あくまでも私の主観に基づく記述であり、統計など具体的な根拠に基づくものではありません。
:::

## エラーが発生しました系

- エラーが発生したことを示したい時に
    - 具体的な対応策を追加で提示することが望ましいでしょう
        - 異常系が雑に作られてるとトラブル対応で死にます

### `An error has occurred ～`

:::note info
`An error has occurred while resizing images.`

*画像のリサイズ中にエラーが発生しました。*
:::

- `while　〜`や`when 〜`でエラーが起こったタイミングなどを示すことが多いです

## 失敗しました系

- 処理が失敗した時に
    - これも「なぜ失敗したのか」を提示しないとユーザーが途方に暮れます

### `Failed to ～`

:::note info
Failed to deliver email. Expected at least 1 recipient.

*メール配信に失敗しました。少なくとも一人の受信者が必要です。*[^firebase/extensions2]
:::
- `to`も`cc`も`bcc`もない状態でメールを送ろうとしたときに出るエラーメッセージの例です
- すごくよく見る形だとおもいますが、地味に主語が省略(省略せずに書くなら、`The program failed～`とか`The application faild〜`)されています
    - この辺の匙加減が、いざ書く段になると難しかったりします

[^firebase/extensions2]:[firebase/extensions](https://github.com/firebase/extensions/blob/864a0d72ca0c75d101460a9c638ed2d96908eba0/firestore-send-email/functions/src/index.ts#L270)

## ○○することができません系

- ユーザーの指示や操作に対して、失敗したことを示す時に
    - 「やれと言われたけどダメでした」のニュアンスがある（と思う）

### `unable to　～` 

:::note info
`Unable to find a valid app.`

*有効なアプリを見つけることができません。*[^electron/electron]
[^electron/electron]:[electron/electron](https://github.com/electron/electron/blob/4e19321ba8591f963a9b41b14cb87995b8b9a2a8/lib/browser/init.ts#L110)
:::

- `unable to`は、(必ずしも物理的・論理的にではなく、それをするための能力が欠如していたり、状況が適していないために）できない、というニュアンス

### `cannot` / `can't` 

:::note info
`value cannot be made reactive`

*値をリアクティブにすることはできません。*[^vuejs/core]
[^vuejs/core]:[vuejs/core](https://github.com/vuejs/core/blob/0bced13ee5c53a02d5f10e5db76fe38b6e131440/packages/reactivity/src/reactive.ts#L250C20-L250C70)
:::

- `cannot`や`can't`は、物理的・論理的にできない、というニュアンス
- `You cannot make value reactive`の`value`を主語に持ってきて受動態(`cannot be made`)にした形
    - 主語を省略するパターンで、`Cannot make value reactive`と書いてもいいと思うのですが、英語話者は微妙な気持ち悪さなどを感じるのでしょうか…

:::note info
`Cannot read properties of undefined`

*undefinedのプロパティを読み取ることはできません。*
:::

- JavaScripterがその生涯で星の数[^3]ほど見るエラー

[^3]:[星の数はどれくらいあるんですか？│宇宙科学研究所キッズサイト「ウチューンズ」](https://www.kids.isas.jaxa.jp/faq/star/st04/000017.html)

## ○○がありません系

- 処理に必要なものが無いときに

### `～ does not exist`

:::note info
`Component ${componentClassName} does not exist.`

*コンポーネント`${componentClassName}`は存在しません。*[^videojs/video.js]
[^videojs/video.js]: [videojs/video.js](https://github.com/videojs/video.js/blob/c964bec3f5e1917bd1f8975f4a868f61efbf4380/src/js/component.js#L618)
:::

- `～ is not exist(s)`も[よく見かけます](https://github.com/search?q=%22is+not+exists%22&type=code)[^1]
    - つい書いちゃうときありますよね

[^1]:英文法上は不自然

### `Missing A in B`

:::note info
`Missing parameter '${name}' in route ${id}`

 *ルート`${id}`にパラメータ`${name}`がありません。*[^sveltejs/kit]
:::

- `Missing A in B`は単に無いというよりは、*ある集合(B)の中にあるはずもの(A)が欠如している*、というニュアンス

[^sveltejs/kit]:[sveltejs/kit](https://github.com/sveltejs/kit/blob/99cddbfdb2332111d348043476462f5356a23660/packages/kit/src/utils/routing.js#L254)

### `no ～ are/is passed`

:::note info
`If no arguments are passed, the default password rule configuration will be returned.`

*もし引数が渡されない場合、デフォルトのパスワード設定ルールが返されます。*[^laravel/framework]
:::

- `no ～ are passed`で`～が渡されませんでした`となるパターン
  - 必要な引数が一つの時は`no argument is passed`と単数系になったりします

[^laravel/framework]:[laravel/framework](https://github.com/laravel/framework/blob/52305ed8a857b4e0e729c68455d60a608d1a75d3/src/Illuminate/Validation/Rules/Password.php#L124)

### `A has no B`
:::note info
`Route for [{$uri}] has no action.`

*[{$uri}]のルートにはアクションがありません*[^laravel/framework2]
:::

- これも`has no ～`で`～を持っていません`という表現
    - この`no ～`の形の否定文は短くて済むからか、よく見ます
    - `does not`を使って書き表すと、`Route for uri does not have any actions.`という感じでしょうか
        - 確かに、ちょっと冗長な気がします
 
[^laravel/framework2]:[laravel/framework](https://github.com/laravel/framework/blob/52305ed8a857b4e0e729c68455d60a608d1a75d3/src/Illuminate/Routing/RouteAction.php#L64)

## ○○でなければいけません系

- `must`や`should`をよく見ます
  - `must`は日常会話だと意味が強すぎてあまり使われないようですが、エラーメッセージやドキュメントだと`have to`よりよく見ます
      -  `must`は主観的な義務、`have to`は客観的に見てそうしなければならない、という状況による必要性のニュアンス[^4]があるので、ライブラリ視点で`have to`はあまりそぐわないのかもしれません
  -  日本語でも、特に口語で`～してあげないといけない`と言うことがありますが、英語でも受動態で`must be ～`や`should be 〜`の形をよく見ます

[^4]:[Weblio英会話コラム 英語の「must」「have to」「should」の基本的な使い分け方](https://eikaiwa.weblio.jp/column/phrases/vocabulary/difference_must_should_have_to)

### `must`

:::note info
`Adjacent JSX elements must be wrapped in an enclosing tag.`

*隣接する複数のJSX要素は、単一の囲みタグで囲まれなければなりません。*
:::
- Reactやり始めたころよく見たやつ

### `should`

:::note info
`Each child in a list should have a unique "key" prop.`

*リスト内の各子要素は、固有の`key` propを持つべきです。*
:::
- Reactやり始めて結構経つけど、いまだにたまに見るやつ
  - `should have`は`should have + 過去分詞`というイディオムがあるのですが、これは`should + 動詞の原形`で、単に持つ(have)べき(should) でよいです

## ○○してください系

- 命令形か、それに`please`を付けた形をよく見ます

### `please ～`
 
:::note info
`Invalid URI: please reconfigure with a valid SMTP connection URI`

*無効なURI：有効なSMTP接続URIを再設定してください。*　[^firebase/extensions1]
:::
[^firebase/extensions1]:[firebase/extensions](https://github.com/firebase/extensions/blob/864a0d72ca0c75d101460a9c638ed2d96908eba0/firestore-send-email/functions/src/helpers.ts#L45)

- `invalid`、`valid`もエラーメッセージでよく見る単語ですね

### 命令形

:::note info
`# exa is unmaintained, use the fork eza instead.`

*exaはメンテナンスされていません。代わりにフォークのezaを使ってください*　[^ogham/exa]
:::
- [eza](https://github.com/eza-community/eza)を使いましょう
- `use`のところを`you should use`とすれば（選択の余地はあるものの）強い推奨、`you must use`とすればほとんど選択の余地のない義務、という表現になります

[^ogham/exa]:[ogham/exa](https://github.com/ogham/exa/blob/fb05c421ae98e076989eb6e8b1bcf42c07c1d0fe/README.md?plain=1#L1)

## ○○が必要です系

- 必要なものが無いときに
    - [ありません系](#がありません系)との使い分けが難しいですが、こちらは*前提条件*としてのニュアンスを感じます（たぶん）
        - 処理をしてみたものの必要なものが無かった場合は[ありません系](#がありません系)、処理を始めるにあたって必要なものが足りてない・提供されていない場合は[必要です系](#が必要です系)という感じでしょうか

### `Expected ～`

:::note info
Failed to deliver email. Expected at least 1 recipient.

*メール配信に失敗しました。少なくとも一人の受信者が必要です。*[^firebase/extensions2]
:::

- 再登場
  - 「必要」としてしまうと、ちょっと意訳っぽいでしょうか
  - 関連して、`Unexpected ～`（予期しない〜）もよく見る表現です

[^firebase/extensions2]:[firebase/extensions](https://github.com/firebase/extensions/blob/864a0d72ca0c75d101460a9c638ed2d96908eba0/firestore-send-email/functions/src/index.ts#L270)

### `～ is/are required`

:::note info
At least one recipient is required.

*少なくとも一人の受信者が必要です*
:::
- `required`はプログラマー的には**必須**のニュアンスが強い（気がする）

## 非文系

- メモリの制約などの要因により完全な文章ではないもの
    - 受動態のbe動詞を省略した形が多い
    - 歴史的遺物という気もしますが、端的に表せるので現代でも結構見ます
        - エラーメッセージ書く上で参考になるかは微妙なところ

:::note info
File not found

*ファイルが見つかりません（でした）*
:::
- `The file could not be found`が省略された形[^2]
- `The file was not found`でもよさそう
    - いずれにしても、ファイルが見つからなかったということはわかります
- 非文系に限りませんが、エラーメッセージは割と時制を無視して書かれることが多いと感じます
    - 日本語に訳すと過去形っぽくしたくなるのが変なのかもしれませんが

[^2]:[Wikipedia:エラーメッセージ#エラーメッセージの言語学](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8#%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AE%E8%A8%80%E8%AA%9E%E5%AD%A6)

:::note info
Access denied.

*アクセスが拒否されました*
:::
- `Access is denied.`のbe動詞が省略された形
    - `403 forbidden`と一緒に帰ってくることがある

# 終わりに
元々は自分のリファレンス用にと思って書き始めましたが、読み物として楽しんでもらえたら幸いです。今後もちょくちょく書き足すかもしれません。

ちなみに、エラーメッセージを収集するときは、Webフレームワーク([Express.js](https://github.com/expressjs/express)とか[Laravel](https://github.com/laravel/framework)とか)のリポジトリを参照すると、いろんな種類のメッセージに出会えるのでおすすめです。`throw`で検索するといろいろ出てきます。