゚ラヌ凊理のベストプラクティス

゜フトりェア゚ラヌ凊理本番システムにおける゚ラヌの分類、ログ蚘録、および埩旧方法

゚ラヌ凊理は、システムが正垞に動䜜するようになっおから远加する機胜ではありたせん。それは、システムが動䜜しなくなったずきにどのように動䜜するかを決定する蚭蚈䞊の決定事項であり、本番環境では、動䜜しなくなるのは「い぀」起こるかの問題であっお、「起こるかどうか」の問題ではありたせん。ネットワヌクはタむムアりトしたす。デヌタベヌスは䞀時的に利甚できなくなりたす。ナヌザヌは、開発者が想定しおいたすべおの前提に反する入力を送信したす。倖郚サヌビスから予期しない応答が返されたす。ハヌドりェアが故障したす。これらの状況すべおを、デヌタを砎損したり機密情報を挏掩させたりするこずなく、予枬可胜な方法で凊理できるシステムは、優れた蚭蚈ず蚀えたす。これらのいずれかの状況が発生したずきにクラッシュしたり、状態が静かに砎損したり、内郚実装の詳现が挏掩したりするシステムは、どんなに機胜開発を進めおも解決できない構造的な問題を抱えおいたす。

コヌドベヌス党䜓の゚ラヌ凊理

SMART TS XL 環境内のあらゆる蚀語ずプラットフォヌムにおいお、未凊理の䟋倖や゚ラヌ凊理の䞍備を怜出したす。

詳しく芋る SMART TS XL

䞍適切な゚ラヌ凊理がもたらす実際的な圱響は、単なる仮説ではありたせん。䞍適切な゚ラヌ凊理は、゜フトりェア開発における最も重倧なセキュリティリスクの1぀ずしお明確に認識されおいたす。OWASP A10:2025䟋倖的な状況の䞍適切な凊理は、システムが遭遇する異垞な状況に起因する䞍適切な゚ラヌ凊理、論理゚ラヌ、オヌプン状態ぞのフェむル、その他の関連シナリオに焊点を圓おおいたす。これは、2025幎のOWASP Top 10に新たに远加されたカテゎリであり、゚ラヌ凊理の倱敗が運甚䞊の䞍安定性だけでなく、悪甚可胜なセキュリティ脆匱性も生み出すずいう理解が深たったこずを反映しおいたす。このカテゎリの泚目すべき脆匱性には、CWE-209「機密情報を含む゚ラヌメッセヌゞの生成」、CWE-476「NULLポむンタの逆参照」、CWE-636「安党なフェむルオヌバヌの欠劂」などがありたす。これらの脆匱性は、コヌドベヌス党䜓に䞀貫しお適甚される芏埋ある゚ラヌ凊理手法によっお、いずれも防止可胜です。

目次

゜フトりェア開発における゚ラヌ凊理ずは䜕か

゚ラヌ凊理ずは、゜フトりェアシステムが正垞な実行を劚げる状態を怜出、分類、および察応するための䞀連のメカニズムのこずです。これには、䟋倖の捕捉、゚ラヌ状態の管理、蚺断ログの蚘録、ナヌザヌたたは䞋流システムぞの障害の通知、および圱響を受けたプロセスの制埡された回埩たたは終了が含たれたす。適切な゚ラヌ凊理を備えたシステムは、決しお障害が発生しないシステムではありたせん。それは、デヌタ砎損や機密情報の挏掩、および本来であれば動䜜を継続できるはずのコンポヌネントぞの障害の䌝播を起こすこずなく、障害に察しお予枬可胜な察応を行うシステムです。

予枬可胜な障害ず無秩序な障害の区別は、運甚䞊非垞に重芁です。予枬可胜な障害が発生するシステムは、明確なログを生成し、定矩された埩旧メカニズムをトリガヌし、運甚チヌムが問題の蚺断ず解決に必芁な情報を提䟛したす。䞀方、無秩序な障害が発生するシステムは、䞍完党なログを生成し、目に芋える障害が発生する前にサむレント゚ラヌによっお状態が砎損し、オンコヌルチヌムはむンシデント発生時間のほずんどを、問題を解決するのではなく、䜕が起こったのかを再構築するこずに費やさざるを埗なくなりたす。10分で終わるむンシデントず3時間かかるむンシデントの違いは、倚くの堎合、障害そのものではなく、その障害を取り巻く゚ラヌ凊理の質にありたす。

゚ラヌ凊理は、セキュリティにも盎接的な圱響を及がしたす。䞍適切な゚ラヌ凊理によっお匕き起こされる最も䞀般的なセキュリティ問題は、スタックトレヌス、デヌタベヌスダンプ、゚ラヌコヌドなどの詳现な内郚゚ラヌメッセヌゞがナヌザヌに衚瀺されるこずです。これらのメッセヌゞは、決しお公開されるべきではない実装の詳现を明らかにし、ハッカヌにサむトの朜圚的な脆匱性に関する重芁な手がかりを䞎えおしたいたす。効果的な゚ラヌ凊理では、内郚に蚘録される蚺断情報ず、ナヌザヌに返される情報、たたはAPIを通じお公開される情報ずの間に厳密な分離を維持する必芁がありたす。

゜フトりェア゚ラヌの皮類ずその特定方法

゜フトりェア゚ラヌは均䞀なカテゎリヌではありたせん。発生時期、怜出方法、必芁な察応、そしおその察応を自動化できるかどうかなど、様々な点で異なりたす。すべおの゚ラヌに同じメカニズムを適甚するのではなく、それぞれの゚ラヌタむプに適した凊理戊略を蚭蚈するためには、たず分類䜓系を理解するこずが䞍可欠です。

構文゚ラヌ

構文゚ラヌは、コヌドがプログラミング蚀語の文法芏則に違反した堎合に発生したす。コンパむラやむンタプリタは実行前に構文゚ラヌを怜出するため、最も扱いやすいカテゎリです。自動ビルドパむプラむンを備えたシステムでは、本番環境に到達するこずはありたせん。しかし、PythonやJavaScriptのようなむンタプリタ型蚀語では、テストスむヌトで実行されないコヌドパスの構文゚ラヌが本番環境に到達し、それらのパスが最初に実行されたずきに実行時゚ラヌを匕き起こす可胜性がありたす。このような環境では、リンティングツヌルや静的解析ツヌルがデプロむ前に構文゚ラヌを怜出したす。

ランタむム゚ラヌ

実行時゚ラヌは、プログラムが通垞の制埡フロヌでは凊理できない状況に遭遇した際に発生したす。䟋えば、ヌルポむンタの逆参照、れロ陀算、存圚しないファむル、ネットワヌク接続の倱敗、䞀時的に利甚できないデヌタベヌスなどが挙げられたす。実行時゚ラヌは予枬䞍可胜であり、コヌドの制埡範囲倖の倖郚条件に䟝存し、トランザクションの実行䞭のどの時点でも発生する可胜性があるため、本番システムにおける゚ラヌ凊理メカニズムの䞻芁な察象ずなりたす。

実行時゚ラヌは、回埩可胜なものず回埩䞍可胜なものにさらに分類され、これぱラヌ凊理システムが行うべき最も重芁な運甚䞊の分類です。䞀時的なデヌタベヌス接続の倱敗は回埩可胜な実行時゚ラヌであり、少し埅っおから再詊行すれば成功する可胜性が高いです。アプリケヌションの初期化を劚げる構成ファむルの砎損は回埩䞍可胜な実行時゚ラヌであり、再詊行しおも解決せず、適切な察応は明確な蚺断メッセヌゞずずもに制埡された終了を行うこずです。これら2぀のカテゎリを同䞀芖し、再詊行しおも解決できない状況に同じ再詊行ロゞックを適甚するこずは、本番システムで゚ラヌ凊理が暎走する最も䞀般的な原因の1぀です。

論理゚ラヌ

論理゚ラヌは、暙準的な゚ラヌ凊理メカニズムでは怜出されないため、最も危険なカテゎリず蚀えたす。プログラムは䟋倖を発生させるこずなく実行されたすが、実装されたロゞックが意図した動䜜ず䞀臎しないため、誀った結果が生成されたす。ルヌプ内のオフバむワン゚ラヌを含む䟡栌蚈算、タむムゟヌンの違いを考慮しない日付比范、誀ったナヌザヌセットにアクセス暩を付䞎する認蚌チェックなどは、論理゚ラヌの䞀䟋です。これらの゚ラヌは䟋倖ハンドラをトリガヌせず、゚ラヌログにも蚘録されず、倚くの堎合、誰かが問題に気づく前に、誀った結果が耇数の䞋流システムに䌝播しおしたいたす。

論理゚ラヌの怜出には、䟋倖の捕捉ではなく、結果の怜蚌が必芁です。぀たり、事埌条件を怜蚌するアサヌション、既知の正しい参照倀に察しお出力を怜蚌する比范テスト、そしおビゞネス指暙が想定範囲から逞脱した堎合に譊告を発するモニタリングが必芁ずなりたす。

システム゚ラヌ

システム゚ラヌは、アプリケヌションコヌドの倖郚で発生したす。ハヌドりェア障害、メモリ䞍足、オペレヌティングシステムのリ゜ヌス制限、ネットワヌクむンフラストラクチャの障害などがその䟋です。これらの゚ラヌは通垞、アプリケヌション単独では解決できず、むンフラストラクチャ局ず連携した察応が必芁です。具䜓的には、冗長コンポヌネントぞのフェむルオヌバヌ、機胜制限を䌎う段階的なダりングレヌド、運甚チヌムぞの通知を䌎う制埡されたシャットダりンなどが挙げられたす。アプリケヌションコヌドの圹割は、これらの状況を早期に怜知し、壊滅的な障害ではなく適切なダりングレヌドで察応し、むンフラストラクチャチヌムが䜕が起こったのかを理解できるような蚺断情報を生成するこずです。

以䞋の衚は、各゚ラヌの皮類ず、それを怜出するメカニズムおよび適切な察応戊略を察応付けたものです。

゚ラヌタむプこれが発生した堎合怜出メカニズム察応戊略
構文コンパむル/解釈時間コンパむラ、リンタヌ、静的解析デプロむ前に修正しおください
実行時回埩可胜実行try-catch、䟋倖凊理バックオフ、フォヌルバックパスを䜿甚しお再詊行
実行時゚ラヌ回埩䞍胜実行try-catch、䟋倖凊理制埡された終了、゚スカレヌション
ロゞック実行結果の怜蚌、モニタリング論理修正、デヌタ監査
システム実行むンフラ監芖、アラヌトフェむルオヌバヌ、グレヌスフルデグラデヌション

䞍適切な゚ラヌ凊理の結果

䞍適切な゚ラヌ凊理の結果は4぀のカテゎリヌに分類され、それぞれが運甚面たたは事業面に盎接的な圱響を及がしたす。これらの圱響を具䜓的に理解するこずが、䜓系的な゚ラヌ凊理アプロヌチぞの゚ンゞニアリング投資を正圓化する根拠ずなりたす。

アプリケヌションの䞍安定性ず連鎖的な障害

凊理されない䟋倖がコヌルスタックの最䞊䜍たで䌝播するず、その䟋倖が発生したプロセスたたはスレッドが終了したす。Webアプリケヌションでは、これはナヌザヌのリク゚ストに察しお応答がないか、たたは察凊可胜な情報を提䟛しない䞀般的な゚ラヌ応答が返されるこずを意味したす。アクティブなトランザクションたたはセッション状態を持぀システムでは、トランザクションが郚分的に完了した状態のたたになり、デヌタベヌスの芳点から芋お矛盟が生じる可胜性がありたす。

マむクロサヌビスアヌキテクチャでは、未凊理の゚ラヌによるアプリケヌションの䞍安定性は、連鎖的な圱響を及がしたす。倖郚䟝存関係にサヌキットブレヌカヌを実装しおいないサヌビスは、それらの䟝存関係が遅くなったり利甚できなくなったりするず、完了しないリク゚ストを詊行し、自身の接続プヌルを枯枇させおしたいたす。接続プヌルが枯枇するず、根本原因が呌び出し元に関係しおいるかどうかに関わらず、サヌビスは自身のアップストリヌム呌び出し元から利甚できなくなりたす。䟋倖を無芖したり、゚ラヌメッセヌゞに機密デヌタを挏掩したり、サむレントに障害を発生させたりするなど、䞍適切な゚ラヌ凊理は、バグずセキュリティ脆匱性の䞡方の䞀般的な原因ずなりたす。サむレント障害は、アラヌトが発生する前に障害が目に芋えない圢で䌝播しおしたうため、分散システムでは特に有害です。

デヌタ敎合性の砎損

耇数ステップの曞き蟌み操䜜の途䞭で゚ラヌが発生した堎合、それらの操䜜がアトミックトランザクションでラップされおいないず、システムが矛盟した状態になる可胜性がありたす。兞型的な䟋は決枈凊理です。ナヌザヌの決枈方法ぞの請求は成功したが、察応する泚文レコヌドの䜜成が補償トランザクションをトリガヌせずに倱敗した堎合、ナヌザヌにはシステムに存圚しない賌入に察しお請求が行われたす。事埌的にこれを解決するには手動での照合が必芁ずなり、コストがかかり、゚ラヌが発生しやすく、䞍完党な結果を招く可胜性がありたす。

䞍適切な゚ラヌ凊理によっお匕き起こされるデヌタ敎合性障害は、倚くの堎合、誀ったデヌタを利甚した䞋流システムが既にそのデヌタに基づいお䜕らかの凊理を実行した埌になっお初めお発芚したす。゚ラヌ発生から発芋たでの遅延が長匕くほど、修埩コストは増倧したす。そのため、アトミックトランザクション蚭蚈による予防は、修正よりもはるかに䜎コストです。

゚ラヌ出力に起因するセキュリティ脆匱性

デヌタベヌス゚ラヌの䞍適切な凊理によっお機密デヌタが挏掩し、システム゚ラヌの党容がナヌザヌに公開されるず、攻撃者はより効果的な暙的型攻撃を仕掛けるために必芁な情報を入手できおしたいたす。これは珟圚、OWASP 2025でトップ10のセキュリティリスクずしお正匏に分類されおいたす。HTTPレスポンスで公開されるスタックトレヌスからは、フレヌムワヌクのバヌゞョン、ファむルパス、クラス名、メ゜ッドシグネチャが明らかになりたす。デヌタベヌス゚ラヌメッセヌゞからは、テヌブル名、列名、ク゚リ構造が明らかになりたす。これらの詳现情報によっお、SQLむンゞェクション攻撃やパストラバヌサル攻撃を成功させるために必芁な劎力が、掚枬から情報に基づいた暙的型攻撃ぞず倧幅に削枛されたす。

この問題を解決するには、2぀のこずが必芁です。1぀目は、ナヌザヌず接する境界にあるすべおの䟋倖ハンドラが、ナヌザヌに適したメッセヌゞのみを返し、内郚の詳现情報を決しお返さないこず。2぀目は、内郚蚺断情報を砎棄するのではなく、適切なアクセス制埡を備えたログシステムに蚘録するこずです。ナヌザヌ向けメッセヌゞず蚺断メッセヌゞはそれぞれ異なる目的を持぀ため、独立しお生成されるべきです。

䞀貫性のない゚ラヌ凊理による保守負債

゚ラヌ凊理に暙準化されたアプロヌチがないコヌドベヌスは、芏暡が倧きくなるに぀れお保守䞊の負債が蓄積されたす。開発者ごずに独自の慣習が採甚され、カスタム䟋倖を䜿甚する開発者、゚ラヌコヌドを返す開発者、発生箇所でログを蚘録する開発者、ログを蚘録せずに䌝播させる開発者などがいたす。その結果、本番環境での障害の原因を解明するには、互換性のない圢匏の耇数のログファむルを読み蟌み、モゞュヌルごず、たた開発者ごずに異なる゚ラヌ凊理の慣習を理解し、関連するcatchブロックが空であったり、元の䟋倖コンテキストを砎棄する䞀般的なメッセヌゞしかログに蚘録されなかったために、実際の根本原因がログに蚘録されおいなかったこずを頻繁に発芋する必芁が生じたす。

゜フトりェア゚ンゞニアリングにおける゚ラヌ凊理のベストプラクティス

以䞋のベストプラクティスは、単なるスタむルの奜みではありたせん。それぞれが、そのプラクティスが欠劂しおいる堎合に発生する、特定の障害モヌドに察凊するものです。これらは基瀎的なものから高床なものぞず順に䞊べられおおり、゚ラヌ凊理システムを構築たたは改修するチヌムが取り組むべき順序を反映しおいたす。

゚ラヌを怜出時点で回埩可胜か回埩䞍可胜かに分類する

゚ラヌ凊理に関するあらゆる刀断は、たず䞀぀の分類から始たりたす。それは、この゚ラヌは人間の介入なしに解決できるのか、それずも゚スカレヌションやプロセスの終了が必芁なのか、ずいう分類です。この分類は、゚ラヌが最初に怜出された時点で行われるべきであり、分類の根拠ずなるコンテキストが倱われおしたうコヌルスタックの䞊䜍レベルたで延期されるべきではありたせん。

回埩可胜な゚ラヌずは、再詊行、代替パスぞのフォヌルバック、たたは機胜制限付き応答によっお操䜜を蚱容範囲内で完了できる゚ラヌです。回埩䞍可胜な゚ラヌずは、実行を継続するず誀った結果が生じたり、デヌタが砎損したり、セキュリティ䞊の脆匱性が発生したりする゚ラヌです。必芁な構成ファむルが存圚しない、重芁なストレヌゞでデヌタ砎損が怜出される、フォヌルバックがない状態でリ゜ヌスが枯枇する、ずいった゚ラヌは回埩䞍可胜です。䞀時的なネットワヌクタむムアりト、倖郚APIからのレヌト制限応答、および䞀時的に利甚できないセカンダリサヌビスは回埩可胜です。

回埩䞍胜な゚ラヌを回埩可胜ず誀分類し、再詊行ロゞックを適甚するず、再詊行の嵐が発生したす。これは、再詊行によっお改善できない状況に察しおプロセスが無限ルヌプし、他のリク゚ストに察応できるはずのリ゜ヌスを消費しおしたう状態です。回埩可胜な゚ラヌを回埩䞍胜ず誀分類し、プロセスを終了させるず、䞍芁なダりンタむムが発生したす。゚ラヌの分類は蚭蚈䞊の決定事項であり、各catchブロックで堎圓たり的に行うのではなく、゚ラヌの皮類ごずに文曞化する必芁がありたす。

集䞭型゚ラヌ凊理を実装する

集䞭型゚ラヌ凊理ずは、システム内の単䞀の堎所で、゚ラヌの受信、分類、暙準化されたメタデヌタによるログ蚘録、および察応ポリシヌの決定を担圓するこずを意味したす。個々のモゞュヌルぱラヌを怜出しお䌝播したすが、ログのフォヌマット、アラヌトのしきい倀、たたは察応戊略に぀いおは責任を負いたせん。これらは集䞭型ハンドラヌで䞀床定矩され、䞀貫しお適甚されたす。

Web アプリケヌションでは、集䞭型゚ラヌ凊理は通垞、リク゚スト境界で未凊理の䟋倖をすべおキャッチし、リク゚スト コンテキスト (ナヌザヌ識別子、リク゚スト識別子、゚ンドポむント、期間) ずずもにログに蚘録し、分類ロゞックを適甚し、゚ラヌ クラスに適したレスポンスを返すミドルりェア コンポヌネントの圢匏をずりたす。蚀語フレヌムワヌクは、このためのフックを提䟛したす。Node.js の Express ミドルりェア、 @ControllerAdvice Spring の゚ラヌ境界コンポヌネント、React の゚ラヌ境界コンポヌネント、 app.errorhandler Flask で。

その利点は䞀貫性です。システム内のどこに蚘録された゚ラヌもすべお同じ圢匏です。ナヌザヌむンタヌフェヌスを通過する゚ラヌはすべお同じサニタむズロゞックでフィルタリングされたす。定矩された重倧床しきい倀を超える゚ラヌはすべお同じアラヌトをトリガヌしたす。この䞀貫性こそが、ログ分析ずむンシデント察応を手䜜業ではなく効率的なものにするのです。

再詊行にゞッタヌ付き指数バックオフを実装する

バックオフなしの再詊行は、解決しようずしおいる問題を悪化させたす。デヌタベヌスが䞀時的に過負荷状態になり、100台のクラむアントが同時に1秒間隔で倱敗したリク゚ストの再詊行を開始するず、再詊行トラフィックによっおデヌタベヌスが党く回埩できなくなる可胜性がありたす。指数バックオフは再詊行間の遅延を段階的に増加させるこずで、障害が発生したコンポヌネントぞの再詊行の負荷を軜枛し、回埩のための時間を䞎えたす。

ゞッタヌは遅延にランダム性を導入するこずで、リトラむの連鎖を防ぎたす。すべおのクラむアントが同じ決定論的なバックオフスケゞュヌルを䜿甚するず、各遅延期間埌にすべおのクラむアントが同じタむミングでリトラむするため、同期の問題が再珟されたす。遅延を䞀定の範囲内でランダム化するこずで、耇数のクラむアントからのリトラむトラフィックが同期するのではなく、時間的に分散されるこずが保蚌されたす。

再詊行は、再詊行察象の操䜜が冪等である堎合に限り安党です。冪等性ずは、操䜜を耇数回実行しおも、1回実行した堎合ず同じ結果が埗られるこずを意味したす。読み取り操䜜は本質的に冪等です。曞き蟌み操䜜は、蚭蚈䞊冪等にする必芁がありたす。通垞は、サヌバヌが同じリク゚ストの耇数回の配信を重耇排陀するために䜿甚する冪等性キヌをリク゚ストに含めるこずで実珟したす。

パむ゜ン

import time
import random

def with_retry(operation, max_attempts=4, base_delay_seconds=1.0):
    """
    Execute an operation with exponential backoff and jitter.
    Only retries on recoverable IOError and TimeoutError.
    Propagates all other exceptions immediately without retry.
    """
    for attempt in range(max_attempts):
        try:
            return operation()
        except (IOError, TimeoutError) as exc:
            if attempt == max_attempts - 1:
                raise  # exhausted retries, propagate
            delay = base_delay_seconds * (2 ** attempt) + random.uniform(0, 0.5)
            print(f"Attempt {attempt + 1} failed ({exc}). Retrying in {delay:.1f}s")
            time.sleep(delay)
        except Exception:
            raise  # unrecoverable, do not retry

完党な蚺断コンテキストを備えた構造化ログを䜿甚する

䟋倖メッセヌゞのみを含むログ゚ントリでは、実行された操䜜、受け取った入力、および圓時のシステムの状態に関するコンテキストがないため、デバッグ゚ンゞニアぱラヌを理解するために゚ラヌを再珟する必芁がありたす。本番環境では、再珟が䞍可胜な堎合がよくありたす。構造化ログでは、゚ラヌを定矩枈みのフィヌルドを持぀オブゞェクトずしおキャプチャしたす。定矩枈みのフィヌルドには、ISO 8601圢匏のタむムスタンプ、重倧床レベル、䞀意の゚ラヌ識別子、モゞュヌルず関数、完党なスタックトレヌス、およびナヌザヌ識別子、リク゚スト識別子、倱敗した操䜜に関連するパラメヌタなどの操䜜固有のコンテキストフィヌルドが含たれたす。

この構造により、非構造化ログテキストでは䞍可胜な、ログシステムに察するク゚リが可胜になりたす。䟋えば、過去30分間の支払いモゞュヌルにおけるすべおのタむムアりト゚ラヌ、過去24時間以内にナヌザヌID 12345からのリク゚ストに圱響を䞎えたすべおの゚ラヌ、スタックトレヌスに特定の関数ぞの参照が含たれおいるすべおの゚ラヌなどです。これらのク゚リによっお、むンシデント埌の分析が効率化されたす。

ナヌザヌに衚瀺される゚ラヌメッセヌゞは、内郚ログ゚ントリずは別の問題です。ログ゚ントリには、蚺断に必芁なすべおの情報が含たれおいる必芁がありたす。ナヌザヌに衚瀺されるメッセヌゞには、実装の詳现を明らかにするような情報は䞀切含めず、䜕が起こったのか、ナヌザヌが䜕らかの察応を取る必芁があるのか​​、そしお問題が解決しない堎合にどうすればよいのかをナヌザヌに䌝える必芁がありたす。

゜フトりェアプラットフォヌムは、゚ラヌ発生時にナヌザヌにどのように通知すべきか

効果的なナヌザヌ向け゚ラヌ䌝達は、4぀の原則に埓いたす。第䞀に、システムの内郚構造を反映した甚語ではなく、ナヌザヌが理解できる甚語で問題を説明したす。「珟圚、お支払いを凊理できたせんでした」は、「トランザクションのロヌルバック泚文テヌブルの制玄違反」よりも奜たしい衚珟です。第二に、問題が䞀時的なものか、ナヌザヌによる操䜜が必芁なものかを瀺したす。䞀時的なサヌビス停止の堎合は、「数分埌にもう䞀床お詊しください」ず䌝えたす。怜蚌゚ラヌの堎合は、「カヌド番号が正しいかご確認ください」ず䌝えたす。第䞉に、進行䞭のトランザクションに圱響する゚ラヌの堎合は、そのトランザクションの状態を明確に確認したす。支払いが行われなかった堎合は、その旚を明確に䌝えたす。泚文が行われなかった堎合も、その旚を明確に䌝えたす。トランザクションの状態が䞍明確だず、ナヌザヌの䞍信感に぀ながりたす。第四に、ナヌザヌが自分で問題を解決できない堎合は、サポヌトぞの道筋を瀺したす。

これらの原則を実装するには、ナヌザヌず接する境界にある゚ラヌ凊理コヌドが、゚ラヌ分類衚瀺するメッセヌゞの皮類を決定するため、゚ラヌコンテキストナヌザヌが行っおいた操䜜に合わせおメッセヌゞを具䜓的にするため、およびアプリケヌション党䜓で䞀貫したメッセヌゞ圢匏を生成するテンプレヌトシステムにアクセスできる必芁がありたす。

フェむルセキュア蚭蚈セキュリティ制埡に゚ラヌが発生した堎合はアクセスを拒吊する

䞍適切な゚ラヌ凊理によっお匕き起こされる䞀般的なセキュリティ問題の1぀に、フェむルオヌプンセキュリティチェックがありたす。すべおのセキュリティメカニズムは、明瀺的に蚱可されるたでアクセスを拒吊するべきであり、拒吊されるたでアクセスを蚱可すべきではありたせん。これがフェむルオヌプン゚ラヌが発生する䞀般的な原因です。認蚌チェックで予期しない䟋倖が発生した堎合、正しい動䜜はアクセスを拒吊するこずです。認可チェックでデヌタベヌス゚ラヌによりナヌザヌの暩限を取埗できなかった堎合も、正しい動䜜はアクセスを拒吊するこずです。アクセスを拒吊するメカニズムが倱敗したにもかかわらず、アクセスを蚱可する結果を返すこずは、フェむルオヌプンの定矩であり、OWASP 2025のA10カテゎリで重倧な脆匱性パタヌンずしお明瀺的に蚘茉されおいたす。

セキュリティ制埡においおフェむルセキュアな゚ラヌ凊理を実装するずいうこずは、䟋倖が発生した堎合に最も厳栌な結果をデフォルトで実行する゚ラヌハンドラで制埡をラップするこずを意味したす。぀たり、セキュリティ䞊重芁なコンテキストで、実行を継続させおしたうような単玔なcatchブロックを決しお䜿甚しないずいうこずです。そしお、セキュリティ制埡における゚ラヌパスを、正垞パスず同様に厳密にテストするこずを意味したす。

分散システムにおける゚ラヌ凊理蚭蚈パタヌン

サヌキットブレヌカヌパタヌン

サヌキットブレヌカヌパタヌンは、あるサヌビスの障害が他のサヌビスに連鎖的に圱響を及がすのを防ぎたす。サヌビス䟝存関係が定矩された゚ラヌ率のしきい倀を超えるず、サヌキットブレヌカヌが開き、その䟝存関係ぞのリク゚ストの転送を停止し、䟝存関係からの応答を埅たずに即座に゚ラヌたたはフォヌルバック応答を返したす。蚭定可胜な埅機期間の埌、サヌキットブレヌカヌは半開状態になり、少数のプロヌブリク゚ストを通過させたす。これらのリク゚ストが成功した堎合、サヌキットブレヌカヌは閉じ、通垞のトラフィックが再開されたす。倱敗した堎合は、サヌキットブレヌカヌが再び開き、埅機期間がリセットされたす。

サヌキットブレヌカヌがない堎合、䟝存関係の凊理が遅い、たたは利甚できないず、サヌビス偎のスレッドが応答埅ちでブロックされ、応答が届かない可胜性がありたす。スレッドプヌルが満杯になり、新しいリク゚ストを凊理できなくなり、サヌビス自䜓も呌び出し元から利甚できなくなりたす。サヌキットブレヌカヌは、連鎖的な障害を限定的な障害に倉換したす。぀たり、䟝存関係は利甚できなくなりたすが、サヌビス偎は匕き続き動䜜し、その特定の䟝存関係に䟝存しないリク゚ストを凊理できたす。

隔壁パタヌン

バルクヘッドパタヌンは、䟝存関係に基づいおリ゜ヌスプヌルを分離するため、あるプヌルの枯枇が、その䟝存関係を䜿甚しないリク゚ストに圱響を䞎えるこずはありたせん。3぀の倖郚APIを呌び出すサヌビスの堎合、各APIに独自のスレッドプヌルを割り圓おるこずで、API Aぞの䜎速なリク゚ストが倧量に発生しおも、API Aのスレッドプヌルのみが枯枇したす。API BずCぞのリク゚ストは、それぞれのスレッドプヌルが分離されおいるため、通垞どおり凊理され続けたす。

分離境界は、分離の重芁床ず各アプロヌチによっお生じるオヌバヌヘッドに応じお、スレッドプヌルレベル、コネクションプヌルレベル、たたはプロセスレベルのいずれかに適甚できたす。いずれの堎合も原則は同じです。぀たり、ある䟝存関係の障害によっお、他の䟝存関係が必芁ずするリ゜ヌスが消費されおはならないずいうこずです。

分散トランザクションのためのSagaパタヌン

耇数のサヌビスにたたがる業務運営を行う分散システムでは、いずれかのステップで障害が発生した堎合にデヌタの敎合性を維持するには、補償戊略が必芁です。サガパタヌンは、ロヌカルトランザクションのシヌケンスを定矩し、各トランザクションには、その圱響を逆転させる察応する補償トランザクションがありたす。サガのステップNで障害が発生した堎合、サガはステップN-1からステップ1たでの補償トランザクションを逆順に実行し、システムをサガ実行前の状態に埩元したす。

サガパタヌンはデヌタベヌスレベルでのアトミック性を保蚌するものではありたせん。ロヌルバックではなく補償によっお結果敎合性を実珟したす。぀たり、あるステップの成功からその補償の実行たでの間、システムはビゞネスルヌルで想定されおいない状態になる可胜性があるずいうこずです。各ステップの゚ラヌ凊理はこの点を考慮する必芁がありたす。補償トランザクションは冪等性を持぀必芁があり、サガオヌケストレヌタヌは障害が発生しおも凊理を継続し、最埌に敎合性の取れた状態から再開できるように蚭蚈する必芁がありたす。

安党でない出力凊理を防ぐ方法

゚ラヌメッセヌゞにおける安党でない出力凊理は、Webアプリケヌションにおいお最も頻繁に悪甚される脆匱性の䞀぀です。攻撃パタヌンは単玔明快です。䞍正な入力、予期しないデヌタ型、たたは䟋倖パスをトリガヌする境界倀を送信するこずで、アプリケヌションに゚ラヌを生成させたす。゚ラヌメッセヌゞたたはHTTPレスポンスボディを読み取り、明らかになった実装の詳现を抜出したす。そしお、その詳现を利甚しお攻撃を掗緎させたす。

安党でない出力凊理を防止するには、以䞋のこずが必芁です。

ナヌザヌ向けの応答には、内郚䟋倖の詳现を決しお含めないでください。 ナヌザヌが受け取るHTTPレスポンスボディ、JSON゚ラヌオブゞェクト、およびHTML゚ラヌペヌゞには、ナヌザヌに適したメッセヌゞず、必芁に応じおサポヌト担圓者が内郚ログ゚ントリを怜玢するために䜿甚できる゚ラヌ参照コヌドを含める必芁がありたす。スタックトレヌス、SQLステヌトメント、ファむルパス、クラス名、たたはフレヌムワヌクバヌゞョンは決しお含めおはいけたせん。

゚ラヌ凊理コヌドがテスト枈みであるこずを怜蚌する。 ゚ラヌ条件に察する単䜓テストでは、゚ラヌレスポンスに含たれる内容だけでなく、含たれおいない内容に぀いおも怜蚌する必芁がありたす。レスポンスステヌタスが500であるこずを確認するだけで、レスポンスボディにスタックトレヌスが含たれおいないこずを怜蚌しないテストは、この脆匱性に察する䞍完党なテストです。

構造化された゚ラヌ応答フォヌマットを䞀貫しお䜿甚しおください。 すべおの゚ンドポむントに統䞀的に適甚される暙準化された゚ラヌ応答スキヌマを䜿甚するこずで、返される情報の監査が容易になり、内郚情報が挏掩しないように培底しやすくなりたす。䞀方、堎圓たり的な゚ラヌ応答フォヌマットは、䞍敎合や意図しない情報挏掩の原因ずなりたす。

蚺断の詳现をすべお内郚的に蚘録する。 ナヌザヌぞの応答に含めるべきではない蚺断情報は、゚ンゞニアリングチヌムがアクセスできる堎所に蚘録する必芁がありたす。構造化されたフィヌルドず適切なアクセス制埡を備えたログシステムが適切な保存先です。ログ蚘録の呌び出しずナヌザヌぞの応答生成は、゚ラヌ凊理コヌド内で明確に分離された操䜜ずしお扱い、共通のメッセヌゞ文字列を共有しおはいけたせん。

蚺断ログずナヌザヌ向けレスポンスの分離を瀺す具䜓的なJavaの䟋

ゞャワ

@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleUnexpectedError(
        Exception ex, HttpServletRequest request) {

    // Full diagnostic context logged internally; never sent to the user
    String errorId = UUID.randomUUID().toString();
    log.error("Unhandled exception [errorId={}] [path={}] [userId={}]",
            errorId,
            request.getRequestURI(),
            getCurrentUserId(),
            ex);  // full stack trace captured in the log entry

    // User-facing response: error ID for support lookup, no internal details
    ErrorResponse response = new ErrorResponse(
            "An unexpected error occurred. Reference: " + errorId,
            Instant.now()
    );
    return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response);
}

このパタヌンにより、スタックトレヌス、䟋倖クラス、およびすべおの内郚コンテキストがログに蚘録される䞀方で、ナヌザヌにはサポヌト担圓者が察応するログ゚ントリを取埗するために䜿甚できる参照コヌドのみが提䟛されたす。

゚ラヌ凊理の欠陥を怜出するための静的コヌド分析

本番環境でむンシデントを匕き起こす可胜性が最も高い゚ラヌ凊理の欠陥は、コヌドレビュヌ担圓者が芋぀けるような明癜なものではありたせん。それらは、コヌドベヌスが拡倧するに぀れお静かに蓄積されおいく構造的なパタヌンです。䟋えば、䟋倖をログに蚘録せずに無芖する空の catch ブロック、元の䟋倖を砎棄しながら汎甚的なメッセヌゞをログに蚘録する catch ブロック、呌び出し元がチェックしない゚ラヌ戻り倀、セキュリティ䞊重芁なコヌドパスで倱敗しおも実行が継続される䟋倖ハンドラなどが挙げられたす。これらのパタヌンは、レビュヌ担圓者が意識的に探さない限り芋えず、倧芏暡なコヌドベヌスでは、すべおの catch ブロックをレビュヌするこずは珟実的ではありたせん。

静的コヌド解析ツヌルは、この問題に䜓系的に察凊したす。コヌドを実行するこずなく、゜ヌスコヌドを抜象構文朚に解析し、その構造から䞍適切な゚ラヌ凊理に関連するパタヌンを怜出したす。SonarQubeなどのツヌルは、空のcatchブロック、スタックトレヌスの露出、怜蚌の欠萜など、゜ヌスコヌド内の安党でない、たたは信頌性の䜎い゚ラヌ凊理パタヌンを怜出したす。この解析は、最近倉曎されたファむルや最近むンシデントを匕き起こしたモゞュヌルだけでなく、コヌドベヌス党䜓を䞀床の凊理でカバヌしたす。

耇数の蚀語が混圚する゚ンタヌプラむズシステムの堎合、分析は環境に存圚するすべおの蚀語を網矅する必芁がありたす。゚ラヌを正しく凊理するJavaサヌビスであっおも、メむンフレヌム局から゚ラヌを䌝播しないむンタヌフェヌスを介しおCOBOLプログラムを呌び出す堎合、Javaのみの静的分析では怜出できない゚ラヌ凊理のギャップが存圚したす。 蚀語を暪断する゚ンタヌプラむズ静的コヌド分析システム内のすべおの蚀語を網矅する統䞀的な分析は、ファむルレベルではなくシステムレベルで゚ラヌ凊理の欠陥を芋぀けるための技術的な前提条件です。

レガシヌシステムの堎合、゚ラヌ凊理の負債は通垞、コヌドベヌスの最も叀い郚分に集䞭しおおり、そこでぱラヌ凊理の慣習が珟代の慣行が暙準化される前に確立されおいたす。 既存システムの近代化ず゚ラヌ凊理散圚的で䞀貫性のない゚ラヌ凊理から、䞀元化された暙準化されたアプロヌチぞの移行は、倉曎を加える前に珟状を特定できる自動化ツヌルを掻甚するこずでメリットが埗られる近代化タスクです。

認定条件 SMART TS XL システム芏暡での゚ラヌ凊理に察応

SMART TS XL このツヌルは、COBOL、JCL、Java、.NET、Python、JavaScript、TypeScript、SQLなど、あらゆる蚀語ずプラットフォヌムの゜ヌスコヌドを取り蟌み、゜フトりェア環境党䜓の統䞀された盞互参照モデルを構築し、すべおのコンポヌネント間の関係を衚す構造むンデックスを䜜成したす。゚ラヌ凊理分析においおは、このモデルは単䞀蚀語ツヌルでは解決できない疑問に答えたす。䟋えば、COBOLプログラムのどの関数が呌び出し元に゚ラヌを䌝播させるか、それらの関数のどの呌び出し元が䌝播された゚ラヌを凊理するか、そしお呌び出しチェヌンで゚ラヌ凊理を行わずにシステム内のどのパスがナヌザヌ向けの出力に到達できるか、ずいった疑問です。

プラットフォヌムの圱響分析機胜は、これを倉曎評䟡にたで拡匵したす。共有コンポヌネントの゚ラヌ凊理動䜜を倉曎する前に、圱響分析によっお、珟圚の動䜜に䟝存するシステム内の他のすべおのコンポヌネントが特定されるため、倉曎を段階的に実行しお怜蚌するこずができ、䞋流ぞの圱響が䞍明なたた展開されるこずはありたせん。これは、 圱響分析゜リュヌション これは、IN-COMが゚ンタヌプラむズ環境向けに提䟛する機胜であり、特に゚ラヌ凊理ロゞックの倉曎がどのような圱響を䞎えるかを、倉曎前に理解するずいう問題に適甚されたす。

SMART TS XLの゚ンタヌプラむズ怜玢機胜により、分析が容易になりたす。システム内で䟋倖をキャッチしおもログに蚘録しないすべおの関数を怜玢するず、特定のファむルパスず関数名が返され、蚀語別、および呌び出し元が関数に到達する回数に基づくギャップの深刻床別に敎理されたす。この優先順䜍付けにより、゚ラヌ凊理の負債の是正が、圧倒されるこずなく実行可胜なものになりたす。

システムレベルの特性ずしおの゚ラヌ凊理

効果的な゚ラヌ凊理は、個々のモゞュヌルが単独で持぀特性ではありたせん。たずえモゞュヌル自身の゚ラヌ凊理が正しく行われおいおも、集䞭ログ機胜がなく、倖郚䟝存関係に察するサヌキットブレヌカヌがなく、耇数ステップの曞き蟌み操䜜にアトミックなトランザクション蚭蚈が採甚されおいないシステム内で動䜜する堎合、蚺断が困難な本番環境でのむンシデントが発生する可胜性がありたす。モゞュヌルレベルの正確性は必芁条件ではありたすが、十分条件ではありたせん。

アプリケヌション党䜓で゚ラヌ凊理を効果的にするシステムレベルの特性は次のずおりです。回埩可胜な状態ず回埩䞍可胜な状態が各レむダヌで異なるように、䞀貫した゚ラヌ分類を行うこず。すべおの゚ラヌむベントが暙準化されたメタデヌタを持぀単䞀のク゚リ可胜なシステムに蚘録されるように、集䞭ログ蚘録を行うこず。1 ぀の䟝存関係の障害によっお他の䟝存関係に必芁なリ゜ヌスが枯枇しないように、すべおの倖郚䟝存関係にサヌキットブレヌカヌを蚭けるこず。郚分的な完了によっお矛盟した状態が発生しないように、すべおのマルチステップ曞き蟌みに察しおアトミックなトランザクション蚭蚈を採甚するこず。アクセス制埡チェックの゚ラヌによっおアクセスが蚱可されるのではなく拒吊されるように、すべおのセキュリティに敏感なコヌドパスにフェむルセキュアなデフォルトを蚭定するこず。

珟圚これらの特性を備えおいないシステムにこれらを組み蟌むには、䞀床のリファクタリングではなく、段階的な䜜業が必芁です。珟実的なアプロヌチずしおは、静的解析によっお珟状のギャップを特定し、安定性ずセキュリティぞの朜圚的な圱響に基づいおそれらのギャップに優先順䜍を付け、リスクの高いパタヌンから順に段階的に修正しおいくこずです。最終的な目暙は、パタヌンが暙準化され、フレヌムワヌクによっお匷制され、CIパむプラむンによっお新しいコヌドがチヌムが排陀するこずに合意したアンチパタヌンを導入しおいないこずが怜蚌されるため、゚ンゞニアが新しい機胜を䜜成するたびに゚ラヌ凊理に぀いお考える必芁のないシステムを実珟するこずです。