Skip to content

Repository files navigation

UwView

日本語 | English

巨大なログ・テキストを調べるための道具です。探すのは端末、読むのは画面。

📥 ダウンロード(無料) ・ 🌐 公式サイト ・ 🧪 ブラウザで試す


UwView は、ripgrep とも klogg とも同等の速さです。両方を1回で終えるので、通しでは約2倍になります。

探すのは ripgrep と同等。開くのは klogg と同等。 片方ずつ比べるなら、互角です。

でも、実際にやりたいのは「探して、当たった場所を読む」ことです。 rg で探して、当たりを見つけて、その場所を読むためにビューアで開き直す——このとき、ファイルは2回読まれています。 UwView は uvf ファイル '語' -open と打つだけで、1回読むあいだに探して、そのまま画面に出すところまで終わります。

これが約2倍の正体です。速いアルゴリズムを見つけたからではなく、読む回数が2回から1回になったからです。

51.25GB の1本のファイル(Mac M4・外付け USB SSD・毎回キャッシュを捨てたコールド)

やること 相手 相手 UwView
探す(CLI・1語) ripgrep 15.2.0 55.54秒 uvf … -open 50.76秒 同等
開く(GUI) klogg 24.11.0 52.55秒 50.44秒 同等
探して、画面で読むまで rg + klogg 108.1秒 uvf … -open 50.76秒 2.13倍

1行目と3行目は、同じコマンドの同じ1回の実行です。 探すだけの時間と、探して画面に出すまでの時間が、同じなのです。

ここまで全部、無料版です。

rg+klogg の 108.1秒は、実測2本(55.54秒・52.55秒)の足し算です。klogg 単体(開く+検索)も 108.14秒。 語は 東京(94,979件)。uvf … -open の 50.76秒は 51.25GB ÷ 50.76秒 = 963 MB/s で、このディスクを1回読み切る速度そのものです。 条件と全データ →

サイズ別

3GB 10GB 50GB
ripgrep 15.2.0(探す・1語) 3.29秒 11.38秒 55.54秒
klogg 24.11.0(開く) 3.65秒 10.98秒 52.55秒
UwView CLI(uvf … -open・探して画面へ渡す) 3.40秒 10.42秒 50.76秒
UwView GUI(開くだけ) 2.99秒 10.13秒 50.44秒

どの行も、ファイルを1回読む時間そのものです。索引を持たない道具どうしなので、律速はディスクの読み出し速度になります。

下2行を見比べてください。 画面でただ開くだけが 50.44秒、コマンドで探して画面に渡すまでが 50.76秒。 差は +0.41秒/+0.29秒/+0.32秒——ファイルが17倍になっても、探すぶんの上乗せは 0.3〜0.4秒のままです。 読みながら探しているので、探索そのものには追加の読み込みが要りません。

同じファイルに2回聞くと、3GB だけ ripgrep が勝ちます。 メモリに載る大きさなので2回目がキャッシュから返るためで、 検索7種を2回ずつ流した合計では 3GB が rg 32.30秒 対 uvf 33.31秒、10GB が 158.69秒 対 147.01秒、 50GB が 806.22秒 対 735.97秒 でした。

Windows で rg を使っている方へ: 50GB では --no-mmap を付けると 2.89倍速くなります → 検証記事


インストール

Mac(Homebrew)

brew install --cask amru195704/uwview/uwview

Windows(Scoop)

scoop bucket add uwview https://github.com/amru195704/scoop-uwview
scoop install uwview

Linux・手で入れる場合は GitHub Releases から dmg/zip/tar.gz を。

Homebrew と Scoop は、どちらも公式の GitHub Releases から取得して SHA256 を照合します。uvf コマンドもそのまま使えます。 更新は brew upgrade --cask uwview / scoop update uwview。


使い方

uvf japan-latest.osm '東京' -open

探し終えた瞬間に画面が開き、行番号つきの結果一覧が出ます。画面はもう一度探しません。 コマンドが終わってから一覧が出るまで 0.03〜0.08秒です(3GB・10GB で 0.03秒、50GB で 0.08秒)。画面は、受け取った位置を並べるだけだからです。 あとは、前後の行を読む・一覧からジャンプする・複数キーワードを色分けする・条件を変えて探し直す—— 調べる作業は、この行き来でできています。

258.68GB・45億行でも同じです。uvf … -open が 265.21秒。 klogg がこのファイルを開き終わるのに 258秒かかります(差 7秒・2.8%)。


どれを使えばいいか

状況 使うもの
探すだけ・画面は要らない uvf(無料)
探して、当たった場所を読む uvf … -open(無料)— いちばん短い道
とにかく開いて眺めたい UwView の画面(無料)— 開いた瞬間から末尾までスクロールできます(下記)
同じファイルに何度も戻る/圧縮したまま保管 UwView Pro
巨大ファイルを書き換える UwView Pro + Edit Upgrade
〜3GB・インストールしたくない ブラウザ版

uvf も GUI も無料版に入っています。 単体実行ファイル・インストーラ不要・Windows / macOS / Linux 共通。

258GB でも、開いた瞬間から末尾を見られます

klogg は索引ができるまで末尾までスクロールできません。258GB では 4分18秒、 その間は先頭付近しか見えません。

UwView は先に全域を動けるようにしてから、索引を裏で作ります。 「とりあえず末尾を見る」「真ん中あたりを流し読みする」が待ち時間ゼロでできます。

258.68GB・45億行 末尾まで行けるまで 画面に出ているもの
klogg 24.11.0 4分18秒(258秒) 索引ができるまで先頭付近だけ
UwView(無料) 待たない 本文(行番号は索引ができてから)
UwView Pro・1回目 待たない 無料版と同じ
UwView Pro・2回目以降 待たない(0.01〜0.07秒で開く) 本文+行番号(最初から)

普通にスクロールできます。 マウスホイールでも、スクロールバーのドラッグでも、 Cmd/Ctrl+End でも、開いた直後からファイルの末尾まで行けます。 割合を打ち込む必要はありません(50% のような入力は、一気に飛びたいときの近道です)。

無料版も Pro も、1回目は同じです。 違うのは行番号が出るタイミングだけ。 行番号は索引ができてから表示されます(258GB で約4分半・klogg とほぼ同じ)。 その間もスクロールは普通にできます。

違いは2回目からです。 Pro は索引を .uwvz に保存しているので、 開いた瞬間から行番号つき——行番号を打ち込んで飛べます。

  • ジャンプはファイルの大きさによらず体感で即時(8.9億行でも 0.003ms/実測)

速いのは索引ではなく、順番です。 索引を作ってから使わせるか、先に動けるようにしてから 索引を作るか——その違いです。

UwView Pro — 2問目から桁が変わります

1問目は、klogg も uvf も uvp も、ファイル全体を1回は読まなければいけません。物理の話なので逃げ場がない。 違うのはそのあと何が残るかです。uvp は1回目に .uwvz(元の約 1/9・行索引つき)を作り、2回目以降は元ファイルに触りません。

51.25GB に、2問目を投げたとき

開く 検索 合計
klogg 24.11.0 52.55秒(毎回作り直し) 55.59秒 108.14秒
uvf … -open(無料) — — 50.76秒 2.13倍
uvp(.uwvz あり) 0.01〜0.07秒 6.34秒 6.41秒 16.9倍

klogg の 16.9倍、無料版 uvf の 7.9倍。 ここで初めて桁が変わります。 klogg は索引を残さないので開くたびに作り直し、uvf は索引を作らないので2問目も1問目と同じ時間。 uvp だけが、1回目に払ったコストを2回目以降に回収します。

元ファイルを消しても検索でき、-extract で戻せます。 51.25GB が約 5.7GB になります。

1問目は無料の uvf が ripgrep と同程度で、uvp は .uwvz を作るぶん 6〜7% 遅くなります(v1.6.6.1・50GB で 59.0秒 対 54.9〜55.8秒)。 uvp が効くのは 10GB を超えて、同じファイルに2回以上聞くときです。

買い切り $129 / 月額 $9(Edit Upgrade は +$120 / +$8)・14日間の無料試用 → UwView Pro


主な機能

実測最大 258.68GB・45億行(無料版で到達)/uvf コマンド(-i・-E・-v・終了コード 0/1/2(当たりあり/なし/エラー)・-open)/ .gz をそのまま検索(v1.6.6〜・下記)/検索結果一覧(元の行番号つき・ジャンプ・前後の文脈・保存)/ 複数キーワードの色分け(32色・プリセット7種・.uwvhl)/文字コード自動判定(UTF-8・Shift-JIS・EUC-JP・UTF-16)/ リアルタイム Tail /gzip を直接開く/マルチタブ・ブックマーク・横スクロール・セッション復元/全OS同一描画

動作環境: .NET 10 / Avalonia UI 12.x / Windows・macOS・Linux

🗜 .gz の検索は zgrep より速い(v1.6.6〜)

uvf app.log.gz 'ERROR'          # パイプを書かずに済む
uvf app.log.gz 'ERROR' -open    # 当たりをそのまま画面へ

展開処理を OS 標準の zlib に載せ替え、gzip -dc | rg(=zgrep 相当)を追い抜きました。

.gz を検索(コールド/ホット) gzip -dc | rg uvf 倍率
3GB 相当(301MB の gz) 1.18秒 / 1.16秒 1.16秒 / 1.00秒 1.02/1.16倍
10GB 相当(1.12GB の gz) 4.38秒 / 4.29秒 3.66秒 / 3.38秒 1.20/1.27倍
50GB 相当(5.75GB の gz) 22.06秒 / 21.71秒 17.20秒 / 17.04秒 1.28/1.27倍

gzip コマンドそのものより速いのは、プロセス間のパイプを経由しないぶんです。

既知の制限:圧縮ファイル内の極端に長い行

.gz の中に 1行が 64MiB(ASCII で約6,700万文字)を超える行があり、その行が検索に一致した場合、 「最後まで読めませんでした」という案内が出て、検索が止まることがあります。ファイル自体は壊れていません。

この制限は対応予定がありません。 ログや XML ダンプで 1 行が 64MiB を超えることは通常なく、 一方でこの制限を外すには行の長さに上限を置かない作りが必要で、通常のファイルの処理まで遅くなります。 UwView は「巨大なファイルを速く見る」ことに全振りした道具なので、速度を優先します。

該当するファイルは、gunzip で展開してから開いてください。


次期バージョン予告 — Wide Field(v1.7・開発中)

複数のファイルを、1つの入力として扱えるようにしています。 試験用ビルド 1.7.0.18 で段階1〜7 の実装が揃い、Mac の実データで確認できた段階です。まだリリースしていません(Linux・Windows での試験はこれから)。

無料版 uvf でできるようになること

uvf '*.log' ERROR                    複数のファイルをまとめて探す(結果は標準出力)
uvf 'app.log,app.log.*.gz' ERROR     平文と .gz を混ぜて、1つのコマンドで

UwView Pro(uvp)だけでできること

複数のファイルを 1本の .uwvz に束ねて、2回目からは作り直さずに探せます。.zip の中のテキストや、OpenStreetMap の .pbf も入力にできます。-open で画面に渡せるのも Pro だけです(無料版の -open は1ファイルまで)。

実測(Mac・8論理CPU・UwTest/osm17 の 8ファイル・初回と直後の再検索の合計・1.7.0.18)

探すもの ripgrep 15.2.0(-z) uvf uvp(束ねた .uwvz)
平文 4本(102MB〜1.03GB) 2.23秒 2.68秒 3.45秒
.gz 4本(11MB〜1.12GB) 8.75秒 7.17秒 3.63秒
平文+.gz 8本 9.72秒 8.58秒 3.97秒

この大きさの平文だけなら ripgrep が最速です(試験に使ったのは 102MB〜1.03GB の平文4本と、それを圧縮した gz 4本)。.gz が混ざると uvf が 1.13〜1.22 倍、束ねた uvp が 2.41〜2.45 倍になります。秒数は環境によって変わります。

pbf(Pro のみ): japan-latest.osm.pbf 2.46GB から、XML 51.3GB 相当の内容を 24.4秒で検索できる .uwvz(5.74GB)にします。要素数は osmium fileinfo と一致。「東京」の検索は初回 6.81秒・2回目 5.08秒でした。

進み具合は Releases と ブログ でお知らせします。いま使えるのは v1.6.6.1 です。


もっと詳しく

📊 実測の全データと条件 ベンチマーク一覧(EmEditor・klogg・010 Editor・UltraEdit・Log Viewer・grep・ripgrep・amber を 3GB〜250GB で実測。負けている数字もそのまま載せています)
📖 klogg と正直に比べ直した話 記事
📖 同じ50GBを3つの土俵で測った 記事
📖 画面がコマンドに追いついた話 記事
📖 ripgrep の --no-mmap 記事
🔧 機能の詳細・アーキテクチャ・ビルド手順・テスト 以前の README(v1.6.5 時点)
📰 プレスキット PRESSKIT.md

版について: このページの秒数は v1.6.6.1 の実測です(画面と uvf は v1.6.6 から変更なし。 v1.6.6.1 は uvp コマンドの1問目を「作りながら探す」に変えた版)。→ v1.6.6 で何が変わったか


支援について

UwView(無料版)は、これからも無料のままです。 個人利用も、会社の中での業務利用も無料です。

もし役に立って、続いてほしいと思っていただけたら GitHub Sponsors からどうぞ。任意です。 お金よりも助かるのは、うまく動かなかった報告(どんなファイルで、どう困ったか)と、手元の巨大ファイルで測った結果です ——負けていた、という報告が特にありがたいです → Issues

開発資金は主に UwView Pro の売上でまかなっています。Pro を買っていただくのが、いちばん直接的な支援です。

ライセンス

PolyForm Internal Use License 1.0.0。個人利用・企業の社内業務利用は無料です。 再配布・製品/サービスへの組込み・転売・第三者への提供はできません(別途「商用(再配布)ライセンス」が必要です → Issues)。 日本語の参考訳: LICENSEjp.txt(正文は英語版)

パッケージマネージャへの登録について(明確化) Homebrew・Scoop・winget などのマニフェストから、公式の配布物(GitHub Releases)を 参照する形は、再配布にあたりません。 利用者の環境が公式の配布元から直接ダウンロードするためです。 こうした登録・PR は歓迎します。 マニフェストに記載するハッシュは、各リリースに添付している SHA256SUMS をお使いください。 ファイルのコピーを配布元以外でホストする場合は、上記のとおり別途ご相談ください。

作者の関連プロダクト

測量士・土地家屋調査士向けの iOS アプリ群(同じ作者 y4u。UwView とは独立した製品です): GeoConverter Pro(座標変換)・GeoPrism JP(測地系のズレの可視化)・GeoDiveExa(RTK-GNSS 位置調査)

About

Gigantic text & log viewer, with a CLI. Find it with uvf, read it in the window: on par with ripgrep and klogg one at a time, ~2x faster than using both. 51GB / 890M lines, 258GB tested. Viewable from the moment you open it. macOS / Windows / Linux + WASM. 大容量テキスト・ログビューア

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages