第4章 エラーとデバッグ エラーとデバッグ
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
Nodeでは、エラーオブジェクトは重要である。エラー・オブジェクトは問題の存在を伝え、そのコンテキストと詳細を提供するために使用される。エラー処理を適切に行うことで、プログラミングの信頼性と安全性が高まる。
この章ではエラーとその対処法について説明する。最初にエラーのスローとキャッチについて説明し、次にエラーの種類とエラー管理の階層化について説明する。その後、Nodeコードのデバッグについて説明し、潜在的なエラーを減らすための予防策について説明する。
投球エラーと捕球エラー
Nodeの エラーは、Error クラスからインスタンス化されたオブジェクトである。このように独自のエラーオブジェクトを作成する必要がある場合もある:
consterror=newError('Some message');
これは一般的なエラー・オブジェクトであり、絶対に使うべきものではない。Nodeには組み込みエラーもあり、基本的にエラーオブジェクトはすでに作成されている。次のセクションでは、これらのエラーについて説明する。
エラー・オブジェクトを使って何をするのか?エラーの種類や、作成したエラーかビルトインされたエラーかに関係なく、コード内で起こるはずのない条件が発生した場合はいつでも、コードを使用している人にその問題の詳細を知らせる必要がある。エラーを投げることでそれが可能になる。
例えば、ある数の平方根を計算する関数を作成したいとしよう。このような関数が持つべき制限のひとつは、負の数に対して平方根は存在しないため、負の数でこの関数を使おうとする演算子をブロックすることである。
このようなケースはユーザ入力エラーとして想定されるものであり、もしこのようなことが起こった場合、関数はその関数が誤って使用されているというシグナルを提供する必要がある。そのための簡単な方法のひとつは、エラーを投げることである:
functioncalculateSquareRoot(number){if(number<0){thrownewError('Cannot calculate square root of negative number');}returnMath.sqrt(number);}calculateSquareRoot(-1);// Error: Cannot calculate square root of negative number
エラーを投げると、現在の演算子は完全に停止する。Nodeでエラーをスローすると、プロセスはクラッシュして終了する。このコードを実行するとこうなる:
$ node index.js
file:///Path/To/File:3
throw new Error(
^
Error: Cannot calculate square root of negative number
at calculateSquareRoot (file:///Path/To/File:3:11)
at file:///Path/To/File:11:1
これは間違っていると感じるかもしれない。単一の関数の単純な間違った使い方のために、なぜアプリケーション全体をクラッシュさせるのか?
ここでのシンプルな答えは、無視すべきではない問題であり、何らかの方法で対処すべきだということだ。エラーを無視することは、意図しない結果を招き、アプリケーションの完全性を損なうかもしれない。間違った入力で呼び出された関数は、間違ったデータがアプリケーション全体に伝播してしまうかもしれない。これは本当に良くないことだ。場合によっては、セキュリティの脆弱性を引き起こすかもしれない。この単純な例では、検証されていない入力が、アプリケーションに対する悪意ある攻撃のパスとなるかもしれない。 ...