この連載の数字は、ほとんど1台の Mac で測ったものです。
UwView は Windows・macOS・Linux 向けに配っています。Mac で「ripgrep と同等以上」と書いたことは、ほかの2つでも本当なのでしょうか。
同じテスト一式を、3台で流しました。
- 先に結論: 正しさのテスト(145件)は3台とも合格、速さの比較(96項目)でも結果の不一致は 0 件でした。総合は mac 2.49倍・Windows 3.42倍・Linux 1.88倍で、3台とも UwView(uvf/uvp)が速い結果です。大きい1本のファイルでは、Windows で差が最も大きく出ました(50GB の7つの検索で uvf 2.47倍)。一方で、Mac では出なかった負けが Windows で見つかりました。 圧縮ファイルの xz・zst・lz4 で、uvf は ripgrep より 1.5〜2.1倍遅い。原因は、まだ確かめていません
- 3台と、測ったもの
- 正しさ: 3台とも合格
- 大きい1本のファイル: Windows で差が最も大きい
- 複数のファイル: Windows と Linux では uvf が速い
- 負け: Windows の圧縮ファイル
- 見立て(まだ確かめていません)
- Linux(論理 2)の uvp
- 正直に書いておくこと
- 持ち帰れる一般論: 1台で「速い」と書かない
- 使っている道具
- リンク
先に結論: 正しさのテスト(145件)は3台とも合格、速さの比較(96項目)でも結果の不一致は 0 件でした。総合は mac 2.49倍・Windows 3.42倍・Linux 1.88倍で、3台とも UwView(uvf/uvp)が速い結果です。大きい1本のファイルでは、Windows で差が最も大きく出ました(50GB の7つの検索で uvf 2.47倍)。一方で、Mac では出なかった負けが Windows で見つかりました。 圧縮ファイルの xz・zst・lz4 で、uvf は ripgrep より 1.5〜2.1倍遅い。原因は、まだ確かめていません
uvf・uvpは私が作っている UwView(v1.7.3.6.9 “Wide Field”・2026年10月4日)の検索コマンドです。uvfは無料版、uvpは有料版 UwView Pro のものです。Windows と Linux は 1.7.3.6.8 で測りました(1.7.3.6.9 との違いは、小さなファイルが大量にある場所の検索だけです)。
3台と、測ったもの
| mac | Windows | Linux | |
|---|---|---|---|
| 機械 | Apple M4・論理 10・32GB・外付け USB SSD | x64・論理 8・15.6GB | aarch64・論理 2・7.0GB |
| 版 | 1.7.3.6.9 | 1.7.3.6.8 | 1.7.3.6.8 |
| スレッド | uvf 8・uvp 8(既定) |
uvf 4(設定)・uvp 8 |
uvf 2・uvp 2(既定) |
| ripgrep | 15.2.0 | 15.2.0 | 15.1.0 |
| 通しの時間 | 2時間20分 | 4時間9分 | 3時間29分 |
機械がまったく違うので、秒数は OS をまたいで比べません。 並べるのは、それぞれの機械の上での「ripgrep の時間 ÷ UwView の時間」だけです(1 を超えると UwView が速い。1.5倍未満は「同等」)。
Windows の uvf のスレッドが 4本なのは、テスト機の設定ファイルにそう書いてあったからです。既定(論理プロセッサの数まで)ではありません。後で効いてきます。
正しさ: 3台とも合格
| mac | Windows | Linux | |
|---|---|---|---|
| 入力の種類(文字コード・圧縮7形式・空のファイルなど) | 66 合格 | 66 合格 | 66 合格 |
| 複数ファイル | 36 合格 | 34 合格・2 省略 | 36 合格 |
除外の規則(.gitignore など) |
43 合格 | 43 合格 | 43 合格 |
| 速さの比較での結果の突き合わせ | 不一致 0 | 不一致 0 | 不一致 0 |
Windows の省略 2件は「zip を作る手段がない」(テスト機に Python が無い)ためで、製品の問題ではありません。
速さの比較では、毎回、出力を ripgrep(や sed・sort・uniq の組み合わせ)の出力と突き合わせています。 速くても答えが違えば意味がないので、ここが先です。
大きい1本のファイル: Windows で差が最も大きい
OpenStreetMap の XML(3GB・10GB・50GB)で、7つの検索(素の検索・-i・-E・行頭つき・-E -i・-v・-E -v)を、1回目(キャッシュを捨てた直後)と2回目の合計で比べました。
| ripgrep との比 | mac uvf |
Windows uvf |
Linux uvf |
mac uvp |
Windows uvp |
Linux uvp |
|---|---|---|---|---|---|---|
| 3GB | 1.00 | 1.48 | 1.31 | 2.39 | 2.22 | 1.62 |
| 10GB | 1.16 | 1.90 | 1.13 | 3.28 | 2.81 | 2.45 |
| 50GB | 1.13 | 2.47 | 1.33 | 3.74 | 3.44 | 1.99 |
総合 96項目(uvf+uvp) |
2.49 | 3.42 | 1.88 |
- Windows では ripgrep の1回目が遅く、
uvfの 1.65〜2.53倍かかっていました。uvfは 50GB の2回目でも 2.42倍です。7パターン × 3サイズの21通りすべてで、uvfのほうが速い結果でした。 - Mac では、
uvfは ripgrep と同等です(1.00〜1.16)。この連載でずっと書いてきたとおりです。 uvpは索引(.uwvz)を作る1回目を含めても、3台とも 1.6〜3.7倍速い結果でした。2問目からは索引を読むだけだからです。
Mac の数字だけを見ていると、「uvf は ripgrep と同等」で終わります。 Windows では、同じ uvf が 1.5〜2.5倍速い。どちらも本当で、どちらかだけを書くと、読む人の環境では外れます。
複数のファイル: Windows と Linux では uvf が速い
| ripgrep との比(1回目+2回目) | mac | Windows | Linux |
|---|---|---|---|
| 平文 5本 | 1.02 | 1.86 | 2.22 |
| gz 7本 | 1.31 | 1.54 | 1.67 |
| 平文+gz 12本 | 1.29 | 1.58 | 1.67 |
Linux(論理 2)では、rg -z が gz を展開するために外部の gzip を呼ぶ分が、2コアでは重く効きます。uvf は展開を自分の中で行います。
負け: Windows の圧縮ファイル
圧縮した 1GB・3GB のファイルを rg -z と uvf で探しました(1回目+2回目の合計)。
| ripgrep との比 | mac 1G | mac 3G | Win 1G | Win 3G | Linux 1G | Linux 3G |
|---|---|---|---|---|---|---|
| 平文 | 1.06 | 1.07 | 1.15 | 1.53 | 1.04 | 1.07 |
| gz | 1.26 | 1.30 | 1.30 | 1.37 | 2.00 | 2.08 |
| bz2 | 1.04 | 1.04 | 1/1.28 | 1/1.30 | 1.08 | 1.10 |
| xz | 1/1.11 | 1/1.09 | 1/1.43 | 1/1.69 | 1.11 | 1.06 |
| lzma | 1.22 | 1.22 | 1/1.02 | 1.08 | 1.30 | 1.23 |
| zst | 1.08 | 1.07 | 1/1.61 | 1/1.22 | 1/1.01 | 1.01 |
| lz4 | 1.11 | 1.12 | 1/2.09 | 1/1.51 | 1.53 | 1.38 |
| br | 1.25 | 1.25 | 1.01 | 1.05 | 1.57 | 1.63 |
| 混在(平文+圧縮) | 1.04 | 1.03 | 1/1.43 | 1/1.41 | 1.24 | 1.24 |
| 混在(圧縮だけ) | 1.04 | 1.06 | 1/1.36 | 1/1.23 | 1/1.25 | 1/1.04 |
1.5倍を超えて負けたのは、Windows の xz(3G)・zst(1G)・lz4(1G・3G)の4か所です。 bz2 と混在も 1/1.2〜1/1.4 で、同等の範囲ながら Windows だけが負け側に寄っています。Mac と Linux では、同じ形式が同等以上でした。
Windows の内訳(3GB・秒。同じ機械の上なので秒を並べます):
| 3GB | rg -z 1回目/2回目 |
uvf 1回目/2回目 |
|---|---|---|
| 平文 | 4.03/1.35 | 2.53/0.99 |
| bz2 | 39.38/36.73 | 48.22/50.80 |
| xz | 2.74/2.63 | 4.79/4.27 |
| zst | 2.49/2.18 | 2.98/2.71 |
| lz4 | 1.43/1.14 | 2.08/1.81 |
もうひとつ気になる数字があります。1GB の平文の2回目が、Windows の uvf では 0.57秒かかっています(Mac は 0.12秒)。機械が違うので秒を比べることはしませんが、「展開がほとんど要らない場面でも、毎回 0.4〜0.7秒ほどの固定の時間が乗っているのでは」と疑っています。展開の速い zst・lz4 ほど比が悪いのも、固定の時間が効いているなら説明がつきます。
見立て(まだ確かめていません)
| # | 見立て | 根拠 |
|---|---|---|
| W1 | Windows の uvf・uvp は、起動の速い形式(NativeAOT)でビルドしていない。 起動のたびに .NET の起動と、コードをその場で機械語にする手間が乗る |
平文の2回目・uvp の2回目に 0.4〜0.7秒ほどの固定分。展開の速い形式ほど比が悪い |
| W2 | uvf のスレッドが設定で 4本(論理 8)。xz の並列展開・bz2 で外部コマンドに負ける |
xz 3G で uvf 4.27秒・rg -z 2.63秒 |
| W3 | ウイルス対策(Defender)の検査 | 未確認 |
Mac と Linux の配布物は NativeAOT(前もって機械語にしたもの)ですが、Windows は「中身を1つにまとめた実行ファイル」で、起動のたびに準備が要ります。NativeAOT は、その OS の上でしかビルドできないので、Mac から Windows 用を作るときにこうなっていました。
確かめ方は決めてあります。W2 は、テスト機の設定(スレッド 4本)を消して、圧縮の比較だけ流し直す。W1 は、Windows 機の上で NativeAOT のビルドを作って比べる。この記事の時点では、どちらもやっていません。
Linux(論理 2)の uvp
uvp は1回目に索引(.uwvz)を作ります。索引は圧縮して書くので、CPU を使います。
2コアの Linux では、展開の速い zst・lz4 と平文で、この1回目が重く、2回の合計で ripgrep の 1/1.2〜1/1.4 でした(gz・bz2・lzma は 1.7〜2.1倍速い)。3回目からは索引を読むだけなので uvp が速くなります。コアの少ない機械で、1回しか探さないなら、uvf か ripgrep で十分です。
正直に書いておくこと
- Windows の圧縮ファイルの負けは、原因を確かめていません。 上の W1〜W3 は見立てです。直ったら、測り直した数字で書きます。
- Windows の
uvfは、スレッドが設定で 4本でした。既定の本数で測ると、結果が変わる可能性があります(良くなる見込みですが、測るまで書きません)。 - Windows・Linux は 1.7.3.6.8、mac は 1.7.3.6.9 です。違いは小さなファイルが大量にある場所の検索だけで、この記事の表の項目にはほとんど効きません。
- 3台は CPU・メモリ・ディスクがすべて違います。秒数を OS またぎで比べていません。 比も、その機械の上での比です。「Windows のほうが UwView に有利」ではなく、「Windows のこの機械では ripgrep の1回目が遅かった」と読んでください。
- 50GB はどの機械でもメモリに収まりません。2回目もディスクから読みます。
- 私は自分の製品について書いています。その分は割り引いてお読みください。
持ち帰れる一般論: 1台で「速い」と書かない
(1)負けは、ほかの環境で見つかる。 Mac では同等以上だった圧縮形式が、Windows では 1/2.1 でした。1台で測る限り、この負けは書けませんでした。
(2)環境をまたぐときは、比だけを並べる。 CPU もディスクも違う機械の秒を並べると、何を比べているのか分からなくなります。それぞれの機械の上で「相手 ÷ 自分」を出して、その比を並べました。
(3)速さの前に、答えの一致を3台で確かめる。 速さの比較のすべての項目で、出力を突き合わせています。3台とも不一致 0件でした。
(4)見立てと確認を分けて書く。 「NativeAOT でないから遅い」はもっともらしい話ですが、前回(⑫)は、もっともらしかった mmap の見立てが外れていました。確かめるまでは見立てとして書きます。
使っている道具
UwView は巨大テキスト・巨大ログのビューアです(無料版 UwView/有料版 UwView Pro)。
uvf app.log.zst ERROR # 圧縮ファイルは展開しながら探す(7 形式・外部コマンド不要)
uvf 'logs/*' ERROR # 平文と圧縮を混ぜて、1回で
uvf --tune # この機械に合うスレッド数を測る(--apply で設定に保存)
終了コードは grep と同じで、0=あり・1=なし・2=エラーまたは結果が不完全です。
無料版は GitHub Releases から。Mac は brew install --cask amru195704/uwview/uwview、Windows は Scoop(scoop bucket add uwview https://github.com/amru195704/scoop-uwview → scoop install uwview)でも入ります。
リンク
- ⑫ 「秒に出ない」と書いた改行の数え方が、2回目の検索の4割を占めていた: https://uvp.y42u.net/blog/uwview-wf12-newline-hot/
- ⑪
--jsonと--tune(スレッド数を測って決める): https://uvp.y42u.net/blog/uwview-wf11-json-and-tune/ - ① 平文と gz の12本を1コマンドで: https://uvp.y42u.net/blog/uwview-wf01-multi-file-one-command/
- ログの圧縮形式の選び方(7形式を実測): https://uvp.y42u.net/blog/log-compression-format-choice/
- Windows で
rgを使っている方へ(--no-mmap): https://uvp.y42u.net/blog/uvp-rg-no-mmap-50gb/ - 測って分かった「差」の下限(1.5 倍未満を差と呼ばない理由): https://uvp.y42u.net/blog/uwview-fl09-difference-threshold/
- v1.7.3.6.9 のリリースノート: https://github.com/amru195704/UwView/blob/main/2-doc/release-body-v1.7.3.6.9.md
- 実測の全データ(ベンチマーク一覧): https://uvp.y42u.net/benchmarks/
- ソースコード(GitHub): https://github.com/amru195704/UwView
そして、ストレージを専有している巨大ログを圧縮して保管し、さらに高速に検索したいなら UwView Pro をどうぞ。永続索引・圧縮キャッシュ検索・約 1/9 保管で、開き直しも検索も一段速くなります(全 OS 対応・買い切り/月額プランあり)。
開発者より: アプリ・Kindle 本・公開プロジェクトの一覧は GitHub: amru195704 にまとめています。

