ログ・可観測性ツール

スタックトレース整形JavaScript、Python、Java、Go、C#、Rustに対応

スタックトレースを貼り付けると自動で言語を判定します(手動選択も可能)。サードパーティのフレームワークフレームは折りたたんで、自分のコードだけを見ることができます。

スタックトレース整形

サンプル:
言語

スタックトレース

すべてブラウザ内で処理されます。スタックトレースはアップロードされません。

フレーム

入力中…自動で解析されます

ターミナルに吐き出された生のスタックトレースは「at ...」や「File ...」といった似たような行の壁で、自分のコードを指している一行は大抵フレームワーク内部呼び出しの真ん中に埋もれています。スタックトレース整形、あるいはエラースタックトレース解析と呼んでも、やることは同じです——その文字の壁を、読みやすくフォーマットされた一目で追えるフレーム一覧に変えることです。

実際にエラーに遭遇した瞬間に使うのに向いています——ブラウザのコンソール、CIログ、クラッシュレポート、同僚から送られてきた報告文など。「Caused by:」の階層を手で数えたり、node_modulesのフレームを何十行もスクロールして自分のコードを探したりせずに、呼び出しチェーンと正確なファイル・行番号、そして根本原因を知ることができます。解析はすべてブラウザタブ内で行われ、貼り付けた内容はどこにもアップロードされません。

スタックトレース整形を使う理由

1つの汎用パターンを無理に当てはめるのではなく、6つの実在する形式のために作られています。

自動検出、それでも手動で上書き可能

貼り付けるとフレーム自体の構文をスキャンして言語が判定されるため、ドロップダウンを触る必要はほとんどありません。形式が混在していたり判定が外れたりした場合は、6つの明示的な言語(JavaScript/Node、Python、Java/Kotlin、Go、C#/.NET、Rust)をワンクリックで選べるので、直しようのない推測結果に縛られることはありません。

言語ドロップダウンが自動検出から手動選択に切り替わり、同じトレースが再解析される様子

Caused byチェーンを独立したブロックで表示

Caused byチェーンを持つJavaの例外や、「During handling of...」でつながったPythonのトレースバックは、順序どおりにラベル付きの独立したブロックへ分割されるため、下部の根本原因は上部の外側の例外と同じくらい見つけやすくなります——区別のつかない長い一列のフレームをたどる必要はありません。

Javaのスタックトレースが2つのブロックに分かれ、Caused byのラベルでつながり、根本原因が最後に表示されている様子

フレームワークのノイズが1行に折りたたまれる

フレームワークフレームを折りたたむをオンにすると、連続するnode_modules、site-packages、org.springframeworkなどのフレームが「N件のフレームを折りたたみ済み」という1行にまとまり、自分のコードが先に目に入ります——折りたたまれたどのグループもクリック1つで再展開できます。

連続するnode_modulesのフレームが1行の要約に折りたたまれ、その上にユーザー自身のフレームが表示されている様子

このフレーム一覧が自動でしてくれる3つのこと

トレースを解析し、不要なフレームを折りたたみ、必要な部分だけコピーします。

01

対応する6つの形式のいずれかを貼り付け

生のJavaScript/Node、Python、Java/Kotlin、Go、C#、Rustのスタックトレースをそのまま貼り付けるだけで、事前の整形は不要です。入力が止まってから約350ミリ秒後に自動で解析されます。自動解析をオフにすると、ボタンクリックまたはCtrl/Cmd+Enterで手動実行に切り替わります。

  • 3つの組み込みサンプルを読み込むと、入力せずにCaused byチェーン、Pythonのトレースバック、node_modulesのノイズがどう見えるか確認できます
  • 既知のどの形式にも一致しない行はそのまま保持され「未認識」と表示されます。解析全体が失敗することはありません
02

見る必要のないフレームを折りたたむ

フレームワークフレームを折りたたむをオンにすると、検出された言語に応じてnode_modules、site-packages、java./org.springframework.、runtime.、std::/core::、System.などが連続する部分が「{count}件のフレームを折りたたみ済み」という1行にまとめられます。切り替えても再解析は行われず、同じ結果を瞬時に再グループ化するだけです。

  • 自分のコードの間に挟まれた単独のフレームワークフレームは折りたたまれません——2フレーム以上連続した場合のみまとめられます
  • 折りたたまれた各グループはクリックするだけで個別に展開でき、トグル全体をオフにする必要はありません
03

必要な部分だけを正確にコピー

認識済みフレームのfile:lineをクリックすると、その位置だけをコピーできます。エディタの該当行に直接ジャンプするのに便利です。結果パネルのコピーとダウンロードは、その言語らしい書式で整形し直したスタックトレース全体をプレーンテキストとして出力します。入力やオプションを変更した瞬間にどちらも無効化されるため、古い結果をコピーしてしまうことはありません。

  • 各ブロックの上部には、そのブロックの例外の型とメッセージがCaused byの原因も含めてハイライト表示されます
スタックトレース整形を使う

生のテキストにはない、このフレーム一覧の価値

6つの実在するスタックトレース形式それぞれの構造化フィールド、チェーン検出、ノイズの折りたたみ。

6言語のフレーム認識

JavaScript/Node、Python、Java/Kotlin、Go、C#/.NET、Rustはそれぞれ独自のフレーム構文を持ち、形式が提供する範囲で関数名・ファイル・行・列に分解されます。このスタックトレース整形ツールが、ランタイム自身の出力に近い形で読めるのはそのためです。

Caused byとtracebackのチェーン

JavaのCaused by:チェーンとPythonの多段tracebackは、順序どおりの独立したブロックとして検出され、根本原因も含まれます——インデントの深さを目で数える必要はありません。

フレームワークノイズを折りたたみ可能

node_modules、site-packages、java./org.springframework.などのフレームワーク名前空間は、言語ごとのルールに従って1行の要約に折りたたまれ、どのグループもクリック1つで再展開できます。

フレームごとのfile:lineコピー

認識された各フレームには専用のコピーボタンがあり、そのフレームのファイルと行だけをコピーできます。トレース全体のコピーとは別の操作です。

未認識行もそのまま表示

選択した言語の構文に一致しない行は破棄されず、そのまま保持されて「未認識」と表示されます。解析全体が失敗することもありません。

このツールがすること・しないこと

一般的な免責事項ではなく、実際の挙動と制限です。

シンボル化やソースマップの逆変換は行いません
難読化された関数名や圧縮されたファイルパスは、貼り付けられたとおりに表示されます。元のソースの位置に戻すには対応するソースマップやデバッグシンボルが必要ですが、このスタックトレース整形ツールはファイルをアップロードも取得もしません。
テキストのスタックトレースのみ対応、バイナリダンプは非対応
コアダンプやミニダンプなどのバイナリクラッシュ成果物は受け付けません。ランタイムやクラッシュレポーターがすでに出力したテキストのスタックトレースを貼り付けてください。
対応する6言語のみ、無制限の推測はしません
認識されるのはJavaScript/Node、Python、Java/Kotlin、Go、C#/.NET、Rustのフレーム構文だけです。Ruby、PHP、C/C++、Swiftのトレースはほとんどが「未認識」として表示され、誤った形式に無理やり当てはめられることはありません。
コピーとダウンロードは常にプレーンテキスト
整形し直した出力はMarkdownのコードフェンスで囲まれることはありません——一部の競合ツールはそうしますが——プレーンテキストのままなので、ターミナルやエディタ、チケットにそのまま貼り付けられます。

スタックトレース整形のよくある質問

実際のエラーをオンラインツールに貼り付ける前に、よく聞かれる質問です。

スタックトレースをオンラインツールに貼り付けても安全ですか?

安全です——このツールはすべて現在のブラウザタブ内のJavaScriptとして解析を行います。フレームに含まれるローカルのファイルパスやユーザー名を含め、貼り付けた内容がアップロード・記録・サーバーへの送信をされることはありません。

スタックトレース内のnode_modulesフレームを非表示にするにはどうすればいいですか?

ツールバーのフレームワークフレームを折りたたむをオンにしてください。連続するnode_modules(あるいはsite-packages、java./org.springframework.など)のフレームが1行にまとまり、その行をクリックすると再び展開されます。

このスタックトレース整形ツールはJava、Python、JavaScriptに対応していますか?

対応しています。さらにGo、C#/.NET、Rustも合わせて6言語です。自動検出は通常フレームの構文から正しい言語を判定しますが、ドロップダウンから手動で指定することもできます。

スタックトレースとtraceback、backtraceの違いは何ですか?

エコシステムごとに呼び方が違うだけで、概念は同じです——Pythonではtraceback、CやRubyではbacktraceと呼ばれることが多く、JavaScript、Java、C#、Go、Rustでは一般にスタックトレースと呼ばれます。このツールはそのすべてを認識するので、使い慣れた呼び方のまま考えて構いません。

共有する前にファイルパスやユーザー名を自動で削除してくれますか?

いいえ——パスなどの詳細は貼り付けたとおりに表示され、自動的な削除は行われません。もともとブラウザの外に何も送信されないので、公開のバグトラッカーなど、より公開性の高い場所に貼り付ける前に自分で内容を確認してください。

GoのパニックやRustのバックトレースにも対応していますか?例外だけではなく

対応しています。Goのgoroutineダンプ(関数名の行とタブでインデントされたfile:lineの組)と、RustのRUST_BACKTRACE=1による番号付きフレーム出力は、runtime.やstd::/core::といった独自のフレームワークフレームのパターンも含めて、例外形式の言語と同じように解析されます。

このツールがうまく解析できない実際のトレースを見つけましたか?

今すぐスタックトレース整形を使う

JavaScript、Python、Java、Go、C#、Rustのいずれかのスタックトレースを貼り付けるだけで、1秒足らずで読みやすいフレーム一覧が得られます——アップロードもアカウント登録も不要です。

次に端末や受信箱にエラーが現れたときのために、この無料のスタックトレース整形ツールをブックマークしておきましょう。

すべての解析はブラウザ内でローカルに行われます。