ByteScope

Large File Viewer

メモ帳も VS Code も諦める 3 GB のログを開く。すぐスクロールでき、検索して、grep のように絞り込み、JSONL を 1 行ずつ読めます。何もアップロードされません。

ファイルはディスクから少しずつ読み込まれます。インデックス作成、検索、書き出しはすべてこのタブ内で完結し、アップロードもアカウントも不要、サーバーにコピーも残りません。

ログやテキストファイルをここにドロップ

サイズ制限なし。クリックして選ぶこともできます。.gz ファイルはまだ開けません。

このツールについて

サーバーのログが 3 GB あって、02:14 ごろに何かが起きた。メモ帳は固まり、VS Code は警告を出した末に止まり、grep のためだけにファイルを scp で運ぶのも気が進まない。このページはそのための大容量テキストファイルビューアです。.log、.txt、.jsonl、.ndjson、.csv、.json — ブラウザが渡せるテキストファイルならどんなサイズでも開き、ファイル全体をメモリに読み込むことはありません。先頭行からすぐにスクロールでき、行番号・パーセント・末尾へジャンプし、リクエスト ID を検索してヒットごとに前後の行を確認し、WARN の行だけを表示して新しいファイルとして保存できます。

これほど大きなファイルをどう開くのか

ファイルは必要なときに必要な部分だけ、スライス単位で読みます。バックグラウンドのワーカーが一度だけファイルを走査して、1,024 行ごとに 1 件の疎な行インデックスを作るので、ファイル全体を RAM に置く必要がありません。インデックス構築中はスクロールバーがバイト位置で動き、完成後は行番号で動いて、N 行目へのジャンプが正確になります。文字コードは先頭 64 KB から自動判定し(UTF-8、UTF-16 LE / BE、Big5、GBK、Shift_JIS、EUC-KR、Windows-1252)、判定が外れていれば手動で切り替えられます。極端に長い 1 行 — たとえば 1 行に詰め込まれた 500 MB の minify 済み JSON — は 1 MB まで表示して「長すぎるため切り詰め」と印を付け、その後の行番号はずれません。ページが落ちることもありません。

検索・フィルタ・ログレベル

検索はプレーンテキスト(大文字小文字の区別は任意)か JavaScript の正規表現です。ファイルをチャンクごとに走査し、見つかった結果から順に流れてきます。クリックすればその位置へ前後の行つきでジャンプします。Stop ボタンは暴走した正規表現でも即座に検索を止め、行インデックスは失われません。フィルタ表示では一致する行だけ、または grep -v のように一致しない行だけを表示し、最大 5,000,000 件まで列挙して、それ以上あるときは知らせます。ログレベルは自動で色分けします。ERROR、WARN、INFO、DEBUG、TRACE、FATAL の単語、syslog の <N> 優先度、JSON ログの level / severity フィールド(pino や bunyan の数値レベルを含む)、logfmt の level=、Android の logcat に対応し、「WARN 以上」はワンクリックです。先頭 20 行がすべて JSON のオブジェクトか配列なら JSONL モードに切り替わり、どの行でもツリーに展開できます(解析するのはその 1 行だけ)。絞り込んだ行は新しいファイルとして書き出せます。Chrome と Edge では選んだファイルへ直接ストリーミングし、それ以外のブラウザではメモリ上で組み立てて、512 MB を超えると警告を出します。

正直な制限

今のバージョンには全文インデックスがないので、検索のたびにファイルを先頭から末尾まで読み直し、速度はディスク次第です。これは読み取り専用のビューアです。バイトを書き換えたいなら Hex Editor で開いてください。.gz はまだ非対応なので、先に解凍してください。正規表現は grep や PCRE ではなく JavaScript の構文で、強欲な量指定子(possessive quantifier)などは使えません。ファイル全体が 1 つのオブジェクトや配列になっている巨大な JSON ドキュメントはテキストとして表示・検索できますが、ツリーにはなりません。

プライバシー

何もアップロードされません。ファイルはお使いの端末上でスライス単位で読まれ、インデックスも検索結果もフィルタもすべてタブの中にあります。サーバーは関わらず、片付けはタブを閉じるだけです。

よくある質問

5 GB のログをメモ帳や VS Code で開けないのはなぜ?

一般的なエディタはファイル全体をメモリに読み込み、編集用のバッファを作ります。数 MB なら問題ありませんが、数 GB では手に負えません。このページはそれをしません。見ている部分のスライスだけを読み、バックグラウンドのワーカーで行の位置をインデックス化し、チャンクごとに検索するので、ファイルサイズが影響するのは全文検索にかかる時間だけで、開けるかどうかには関係しません。

ファイルはアップロードされますか?

いいえ。ブラウザがディスクからスライス単位で読み、インデックス作成・検索・フィルタはすべてタブの中で動きます。サーバーはなく、送り先もありません。絞り込んだ結果のエクスポートも、あなたのディスクへ直接書き込まれます。

行数が wc -l より 1 多いのはなぜ?

行は \n、\r\n、または単独の \r で終わります。wc -l は改行文字の数しか数えないので、最終行に改行がないファイルは 1 行少なく数えられます。このページはその最終行も数えます。実際に読めて検索もできる本物の行だからです。ファイルが改行で終わっていれば両者は一致し、そうでなければこのページは wc -l + 1 を表示します。

末尾や特定の行へ直接ジャンプできますか?

できます。N 行目へ、ファイルの何パーセントの位置へ、あるいは末尾(tail)へジャンプできます。バックグラウンドの行インデックスが完成するまではスクロールがバイト位置で動き、完成後は行番号が正確になります。インデックスは 1,024 行ごとに 1 件の疎なものなので、数億行のファイルでも小さく収まります。

grep のようにエラー行だけ表示するには?

フィルタ表示を使います。プレーン文字列か JavaScript 正規表現を入力し、一致する行か一致しない行(grep -v 相当)を選びます。ログレベルについては、各行から検出したレベルを使うワンクリックの「WARN 以上」があり、プレーンな単語、syslog 優先度、JSON の level / severity フィールド、logfmt、logcat をすべて認識します。一致行は最大 5,000,000 件まで列挙され、結果は新しいファイルとして保存できます。

JSONL や NDJSON のログも読めますか?

読めます。先頭 20 行がすべて JSON のオブジェクトか配列なら、ページは JSONL ビューアとして動く JSONL モードに切り替わります。各レコードはスクロールと検索のために 1 行のままで、どの行でもツリーに展開できます。解析されるのはその 1 行だけなので、数百万レコードのファイルでも追加コストはありません。レベルの色分けは level または severity フィールドを読み、pino や bunyan の数値レベルにも対応します。

.gz のログを開いたり、ファイルを編集したりできますか?

今のバージョンではできません。圧縮された .gz ファイルは先に解凍が必要で、このページは読み取り専用のビューアです。バイトを書き換えるには Hex Editor を使ってください。列でソート・フィルタしたり SQL で問い合わせたい CSV なら CSV Explorer のほうが適していますし、Parquet なら Parquet Viewer をご覧ください。

1 行が巨大なファイルはどうなりますか?

1 行は 1 MB まで表示され「長すぎるため切り詰め」と印が付きます。残りは表示上スキップされますが、その後の行番号は正しいままなので、1 行に詰まった 500 MB の minify 済み JSON でもページは落ちません。ファイル全体が 1 つの巨大な JSON ドキュメントの場合、テキストとして検索はできますがツリーにはなりません。ツリー表示は各行が独立したドキュメントである JSONL 専用です。