【開発中】1億行・10GBのファイルを21,994箇所、16.8秒で置換しました。増えたのは3.7MBです

技術解説

この記事は開発中の製品の動作検証記録です。UwEditor Pro はまだ発売していません(発売時期未定)。

UwEditor Pro(巨大ファイルを、書き換えずに編集) で、1億行のファイルを実際に編集してみた記録です。

やったことは単純です。10.09GB・1億行のXMLを開いて、「東京」を「Tokyo」に全置換した。 それだけです。

先に結果を書きます。

操作 実測
「東京」を検索(21,948行がヒット) 3.7 秒
「東京」→「Tokyo」を全置換(21,994箇所) 16.8 秒
置換によって増えたディスク使用量 3.7 MB

そして——元の10.09GBのファイルは1バイトも書き換わっていません。

対象

ファイル OpenStreetMap 日本全域を分割したXML japan-dv-aa
サイズ 10.09 GB
行数 100,000,000 行(ちょうど1億行)
文字コード UTF-8(自動判別)
環境 macOS / UwEditor Pro(開発版)
ストレージ USB接続の外付けSSDdd 実測 0.41 GB/s)。内蔵SSDではありません

1. 開く

UwEditor Pro で1億行のXMLを開いた直後。ステータスバーに Total 100,000,000 lines と表示されている

ステータスバーに Total 100,000,000 lines と出ています。ここは UwView Pro と同じで、開いた瞬間から全体を表示・スクロール・検索できます。索引はすでに .uwvz(圧縮キャッシュ)に保存済みなので、行番号も最初から付いています。

2. 編集モードに入る

編集ボタンを押して置換バーが現れた画面。置換して次へ/すべて置換/ヒット行を削除などのボタンが並ぶ

ツールバーの「編集」を押すと、検索バーの下に置換バーが現れます。「置換して次へ」「すべて置換」のほか、「ヒット行を削除」「選択を削除」「選択を置換」「この行を削除」——ログの整形で実際に使う操作が並んでいます。

3. 置換対象を数える

Drill-down 検索で「東京」が 21,948 件ヒットした一覧

置換の前に、多段階検索(Drill-down)で「東京」を数えました。21,948 ヒット・3.7秒です。1億行を走査してこの時間なのは、生の10.09GBではなく圧縮索引(.uwvz 1.38GB)を読んでいるからです。しかもこれはUSB接続の外付けSSD(実測 0.41 GB/s)での値です。内蔵SSDは同じ機材で 3.29 GB/s なので、そちらならもっと縮むはずです。

一覧を眺めると、<tag k="operator" v="東京臨海高速鉄道"/><tag k="wikipedia" v="ja:大久保駅 (東京都)"/> のように、地物の名前・運営者・Wikipedia参照に「東京」が散らばっているのが分かります。

4. すべて置換

「21,994 件を置換しますか?(1回の取り消しで元に戻せます)」という確認ダイアログ

「置換後」に Tokyo と入れて「すべて置換」。確認ダイアログが出ます。

21,994 件を置換しますか?(1回の取り消しで元に戻せます)

21,948 と 21,994 の差は何か

検索は 21,948、置換は 21,994。46件ずれています。これは不具合ではなく、数えている単位が違うからです。

  • 検索一覧が数えているのは (ヒットした行の数)
  • 置換が数えているのは 出現箇所(実際に書き換える箇所の数)

先ほどの一覧に v="東京急行電鉄;東京地下鉄" という行がありました。1行に「東京」が2回出てきます。こういう行が46行ぶんあった、という意味です。

5. 実行

「21,994 件を置換しました。取り消すときは「戻す」(Cmd/Ctrl+Z)を1回押してください。」の完了ダイアログ

21,994 件を置換しました。取り消すときは「戻す」(Cmd/Ctrl+Z)を1回押してください。

16.8秒でした。1億行の中の21,994箇所です。

そして、2万箇所の一括置換が undo 1回で元に戻ります。置換の一件一件が履歴に積まれるのではなく、操作としてまとまっているためです。

6. 確かめる

置換後、Tokyo が 23,147 件ヒットしている一覧。ja:大塚駅 (Tokyo都) などに置き換わっている

置換後にもう一度 Drill-down で Tokyo を数えると 23,147 ヒット

置換前からファイル内にあった Tokyoname:en など)が 1,153 行あったので、それに置換ぶんが乗った数です。一覧を見ると v="ja:大塚駅 (Tokyo都)" のように、元が日本語だった箇所がきちんと置き換わっているのが確認できます(意味としては珍妙ですが、置換の検証としては都合がよい)。

検索結果からジャンプして、本文73,344行目の該当箇所がハイライトされている画面

検索結果からジャンプすれば、7万行目付近の該当箇所へ直接飛べます。編集中でも表示と検索は生きたままです。

7. ファイルサイズを見る

ここが本題です。

Finderのファイル一覧。japan-dv-aa 10.09GB(7月16日)、japan-dv-aa.ewvz 3.7MB(今日)、japan-dv-aa.uwvz 1.38GB(8月24日)

ファイル サイズ 更新日 中身
japan-dv-aa 10.09 GB 2026年7月16日 元のXML
japan-dv-aa.uwvz 1.38 GB 2026年8月24日 圧縮+索引(約1/7)
japan-dv-aa.ewvz 3.7 MB 今日 21:33 編集の差分

更新日時に注目してください。 21,994箇所を書き換えたのに、元ファイル(7月16日)も索引ファイル(8月24日)も、日付が動いていません。 触っていないからです。

今日できたのは 3.7MB の .ewvz だけ。10.09GBに対して 0.037% です。

なぜこうなるのか

普通のテキストエディタは、保存のたびにファイル全体を書き直します。10GBのファイルの1行を直しても、10GB書き直す。だから巨大ファイルの編集は遅く、そして途中で失敗すると原本が壊れます。

UwEditor Pro は非破壊オーバーレイ編集です。

  • .uwvz(圧縮+索引)は不変。読むだけ
  • 編集は差分として .ewvz に積まれる(どこを何に書き換えたか、の記録)
  • 画面に見えているのは、この2つを合成したビュー

だから 編集のコストがファイルサイズに依存しません。10GBでも100GBでも、1行の修正にかかる手間は同じです。

もうひとつ、地味ですが実務では効く性質があります。上のスクリーンショットで、アプリのステータスは「編集中(未保存)」のままです。それでも .ewvz はすでにディスクに書かれています。保存を押す前に落ちても、編集は残っています。

正直に書いておくこと

  • UwEditor Pro は開発中で、まだ発売していません。 発売時期は未定です
  • 実測は macOS・USB接続の外付けSSD・.uwvz 化済みのファイルでの1回の計測です。内蔵SSDではありません。 同じ機材の内蔵SSDは 3.29 GB/s なので、そちらで測ればこの数字は縮むはずです(3サイズ×3ストレージのベンチマークと同じ機材・同じ計測方法です)。遅いストレージなら逆に伸びます
  • 16.8秒は「編集」の時間であって、「書き出し」の時間ではありません。 「保存」を押すと .uwvz.ewvz から新しい .uwvz を1パスで再構成するので、そこは当然サイズなりの時間がかかります
  • 【追記 2026-08-29】その書き出し時間を計測しました。 Windows・48GBのファイルで 1分33秒
    同じファイルを EmEditor が全体書き直しで保存すると 31分 かかったので、約20倍です。
    詳細 → 48GBのファイルを編集して、途中で保存するまで
  • 今回の対象は .uwvz 化したファイルです。UwEditor Pro の編集対象は .uwvz に一本化しています

UwView Pro との関係

UwEditor Pro は UwView Pro を包含する上位版です。この記事に出てきた多段階検索(Drill-down)も、瞬時の再オープンも、そのまま使えます。そこに編集が乗る、という構造です。

いま巨大ファイルを「見る」だけでよければ、UwView Pro — Huge Files, No Waiting が現行の製品です。


10GBで0.037%なら、100GBでも同じ比率で済むはずです。試して壊れたファイルがあれば、教えてください。890万行が上限ではなかったと分かったのも、そうやってでした。

タイトルとURLをコピーしました