
tracethat.dev
Kacper Pietrzak · コーディング
設定不要のデバッグを掲げるtracethat.devは、リモートデバッグツールだ。JavaScript、Python、Goの関数をラップすると、その引数、戻り値、実行時間、エラーをライブのデバッグUIへストリーミングする。

tracethat.dev について
About
tracethat.devとは
tracethat.devは、Kacper Pietrzakが作ったオープンソースのリモートデバッグツールだ。コードのあちこちにprintを散らすのに疲れた開発者に向けて作られている。ログの壁を出力して無関係な行をスクロールする代わりに、関数をラップすれば、ツールが有用な情報を自分で集めてくれる。対象はチームと個人開発者で、リモートサーバー、コンテナ、バックグラウンドジョブなど、通常のデバッガを繋ぎにくい場所で動くコードのデバッグに使う。
考え方は単純だ。printでのデバッグでは、何を記録するかを前もって決める必要があり、見当が外れるたびにコードを再実行することになる。tracethat.devはこれを逆にする。レポーターは引数、戻り値、実行時間、コールスタック、投げられた例外を記録するので、たいていは一度の実行で問題を特定できる。
その代わりに範囲は限られる。Goの型システムの仕組み上、Goのレポーターは任意の関数をラップできないため、Goの利用者はイベントを手作業で記録する。イベントはサーバー上に一定時間しか残らないので、長期保存用のログにはならない。しかもレポーターは自分でコードに追加する必要がある。
はじめかた
- tracethat.devにアクセスして新しいセッションを開始する。サイトはトークンを生成し、これがルームIDと暗号化キーを兼ねる。
- 使う言語のレポーターをインストールする。
npm install tracethat.dev、pip install tracethat、go get github.com/pietrzakacper/tracethat.dev/reporters/golang/ttのいずれか。 registerToken("your-token")(JavaScript)またはregister_token('your-token')(Python)でトークンをアプリに登録する。- 監視したい関数をラップするか、
tracethat.logで単発のイベントを記録し、コードを実行する。 - イベントがリアルタイムでブラウザに流れ込むのを確認し、展開・折りたたみ・フィルタで必要な箇所に絞り込む。
AIツール情報
tracethat.devの料金、対応プラットフォーム、性能を簡単に確認できます。
こんな人におすすめ
このツールが最も力を発揮するユーザー、タスク、シーン。
ユーザー
- バックエンド開発者:リモートサーバーやコンテナ内の関数を調べたいのに、通常のデバッガを繋ぐのが面倒な場面で役立つ。レポーターをコードに追加する必要はある。
- JavaScript/TypeScript開発者:npmのレポーターは1回の呼び出しでどんな関数でもラップできるため、素早く出すスクリプト案件に向く。Node.jsとブラウザのコードで最も力を発揮する。
- Python開発者:デコレータ構文(`@tracethat`)は非同期関数にも通常の関数にも小さなオーバーヘッドで載る。Python 3と`tracethat`パッケージの導入が必要だ。
タスク
- ローカルで再現できない関数をデバッグする:レポーターが本番実行から実際の引数と戻り値を拾うので、推測ではなく本当に起きたことが見える。
- 遅い処理経路を計測する:ラップした呼び出しはそれぞれ実行時間を報告するので、足を引っ張っている関数を見つけやすい。
- 静かな例外を捕まえる:投げられたエラーはそれを起こした呼び出しの隣にイベントとして並ぶため、失敗がログの中に消えない。
シーン
- ステージングサーバーのバックグラウンドジョブが、手元のノートPCでは再現しないエラーを投げる。失敗する工程をラップすれば、実際の入力がそのままブラウザに届く。
- Webアプリが本番環境でだけ挙動を崩す。`script`タグのレポーターをHTMLに差し込めば、ビルド工程なしで配信が始まる。
- ペアでデバッグしたり、同僚に助けを求めたりしている。セッショントークンを共有すれば、二人で同じストリームを同時に見られる。
主な機能
1行でできる関数トレース
レポーターの中核は、関数をラップしてすべての呼び出しを関数トレースのイベントとして記録する点にある。JavaScriptにとっては手軽なJavaScriptデバッガとして、Pythonにとっては実行中のコードに入り込むPythonデバッガとして働く。JavaScriptではtraceThat(hello)("world")と書き、ツールが引数、戻り値、呼び出しにかかった時間、コールスタック、投げられた例外を取得する。Pythonも@tracethatデコレータで同じ考え方を使う。printを一行も書かずに、これらすべてが手に入る。
ライブ配信のWeb UI
イベントはリロードを待たない。ライブデバッグUIとして、Webクライアントはサーバーとのソケットを保ち、新しいイベントが起きるたびにルームへ押し出す。呼び出しを展開すれば詳細をすべて確認でき、不要なものは折りたたみ、特定の値でフィルタできる。スクロールバッファではなく、絞り込んだイベント一覧を読むための設計だ。
トークンによる暗号化
トークンはルーム識別子と暗号化キーの二役を担う。レポーターはイベントがアプリを出る前に暗号化し、Webクライアントは同じトークンを与えられたときだけ復号できる。ルームはトークンのSHA-256ハッシュで識別されるため、サーバーはそのセッション宛てのイベントだけを渡す。
複数言語のレポーター
JavaScript/TypeScript、Python、Goのレポーターが用意されている。JS版はnpmからインストールし、単純なscriptタグからも動くので、ビルドパイプラインがないときにも便利だ。Python版はPyPIから、Go版はGitHubから直接インストールする。どれも同じサーバーと同じUIに繋がるので、混在した構成でも一箇所に集まる。
手動のイベント記録
関数全体をラップしたくないときは、1点にマーカーを置ける。tracethat.log('hello function started')がイベントを記録し、追加のデータも一緒に渡せる。これは、レポーターが関数を汎用的にラップできないGoの定番の手段であり、2行の間にチェックポイントを置きたいだけの人にも向く。
メモリ内サーバーと自動クリーンアップ
サーバーはイベントを永続ストレージに書かずメモリに保持し、しばらくすると消す。設定は軽いままで、後始末するログも残らない。同時に、イベントはライブデバッグのためのもので、先週何が起きたかを振り返る用途ではないことも意味する。
メリットとデメリット
メリット
- レポーターを追加する以外に設定は不要で、エージェントもコレクタもストレージも構成しない。
- 取得できるデータは`print`より広く、引数、戻り値、実行時間、コールスタック、例外を1回で押さえられる。
- フィルタと展開/折りたたみを備えたライブUIのおかげで、実行結果は生のログよりずっと読みやすい。
- MITライセンスのオープンソースなので、コードを読むことも自前でホストすることも貢献することもできる。
- JavaScript、Python、Goで動くため、バックエンドが混在するチームにも馴染む。
デメリット
- Goのレポーターは任意の関数をラップできず、Goの利用者はイベントを手作業で記録するので、JSやPythonより手間が増える。
- イベントはメモリに保持され一定時間で消えるため、事後の調査に使える永続ログとしては扱えない。
- レポーターを追加するには結局ソースコードを書き換える必要があり、編集できないアプリにとっては非侵襲ではない。
- 単独のメンテナが運営する小規模なプロジェクトで利用者も限られるため、コミュニティの支援は大手商用プラットフォームより薄く、端のケースは自分で直すことになるかもしれない。
よくある質問
動作中のアプリが実際に何をしているかを見るためのリモートデバッグツールだ。関数をラップすると、引数、戻り値、実行時間、エラーがブラウザUIへストリーミングされ、通常のデバッガでは届きにくいコードをデバッグできる。
関連コンテンツ
tracethat.devに関連するツール、スキル、記事を探す。
tracethat.devの代替ツール
Forefront
Forefront · コーディングForefrontはオープンソースAIで構築するためのウェブプラットフォームだ。主要なオープンソース言語モデルを自分のデータで微調整し、性能を評価し、API経由で実行したり、エクスポートして自分でホストしたりできる。クローズドなプラットフォームの手軽さを求めつつ、モデルとデータの所有権にはこだわる開発者が対象だ。
Startkit
StartKit.AI · コーディングStartkitは、AI SaaSとAIラッパー製品を作るためのボイラープレートだ。面倒な部分をあらかじめ配線済みにしたAIスタートアップボイラープレートと考えればいい。認証、StripeとLemon Squeezyの決済、利用制限、トランザクションメール、そしてOpenAI、Anthropic、Groq、Llamaと通信するAI APIスターターキットが含まれる。リポジトリをクローンして価格を設定し、ユーザーが実際にお金を払う部分に取りかかれる。ReactとTailwind上のNext.jsで作られているため、ボイラープレートコードの多くはすでに見慣れたものだ。
Testim
Tricentis · コーディングTestimは、Web・モバイル・Salesforceアプリ向けにエンドツーエンドテストを構築して実行するAIテスト自動化プラットフォームだ。機械学習を頼りに、インターフェースが変わってもテストを安定させ、チームが壊れたセレクターの修正に費やす時間を減らす。今日から使い始められる自動テストツールとしては悪くない。ブラウザで操作を録画してテストを作り、より細かい制御が必要なときはJavaScriptを足す。忙しいQAチームにとって堅実な選択肢である。
