コンテンツへスキップ

テキストを保存しないテキストツール

カウント、比較、整理、閲覧のための11のツール。下書きもリストもソースコードも保存されません。

11個のツール・登録不要・透かしなし

単語数カウントと文字数カウントは「どれくらいの長さか」に、テキスト比較は「何が変わったか」に答え、重複行削除はリストを整理します。ビューアーは、送られてきたのにうまく開けないファイルのためのもの、3つの圧縮ツールは本番環境に向かうコードのためのものです。一覧の下の解説では、同じテキストでもツールによって数え方が違う理由と、まったく同じに見える2行が実は同じ行ではないことがある理由を説明しています。

カウント・比較

3個のツール

どんな言語でも単語数や文字数を正しく数え、2つのバージョンの違いを正確に確認できます。

ビューアー

3個のツール

CSV、XMLファイル、Markdown文書を、スプレッドシートに崩されることなく正しく閲覧できます。

テキストの正体と、ツールによって結果が食い違う理由

テキストファイルはバイト列と文字コードの組み合わせですが、文字コードはファイルの中に保存されていません。あるバイトが「é」を意味すると、慣習以外に教えてくれるものはないのです。だから同じファイルが、ある場所では正しく開き、別の場所では「é」と表示されます。UTF-8は現代の答えで、一般的なラテン文字を1バイト、アクセント付きの文字を2バイト、中国語・日本語・アラビア語の大半とすべての絵文字を3〜4バイトで保存します。UTF-16はWindowsとJavaScriptが内部で使う文字コードで、ほぼすべてを2バイト、残りを4バイトで保存します。Windows-1252とLatin-1は古いシステムが今も出力する1バイトの文字コードで、文字化けのよくある原因です。これらのページについて知っておいてほしいのは、CSVビューアーはドロップしたファイルの文字コードをUTF-16やWindows-1252も含めて判別し、手動で変更することもできる点です。プレーンテキストの入力欄はそうではありません。ドロップしたファイルはUTF-8として読み込まれるので、Latin-1で書き出したファイルはアクセント付きの文字が正しく表示されません。先に変換してから使ってください。

「文字」には4つの意味があり、どれが必要かは制限をかける側次第です。人が1文字として見るものは書記素クラスタです。正規表現がマッチするのはコードポイントです。JavaScriptのstring.lengthが返すのはUTF-16の単位数です。データベースの列やHTTPヘッダーが測るのはUTF-8のバイト数です。普通の英語ならこの4つは一致するので誰も気づきません。ところが家族の絵文字は、書記素では1、コードポイントでは7、UTF-16単位では11、バイトでは25になり、200文字のメッセージが255文字の欄で拒否されることになります。文字数カウントが4つすべてを表示するのは、まさにこのためです。

見えない文字も本物の文字です。ノーブレークスペースは普通のスペースとまったく同じに見えますが、まったく別の文字です。Webページやワープロからコピーしたテキストには頻繁に紛れ込み、検索、CSVの解析、スペースで区切るコードを壊します。ゼロ幅接合子は、複数人の絵文字をひとつにつなぎとめているものです。ソフトハイフン、方向制御文字、バイトオーダーマークも、貼り付けたテキストと一緒についてきます。どれも画面には表示されないので、手がかりは見た目と合わないカウントだけです。これは文字数カウントの正当な使い道のひとつです。なお、テキスト比較の空白を無視するオプションは、通常のスペースとタブをまとめて扱うものです。ノーブレークスペースはスペースとして扱いません。両者は同じ文字ではないからです。

差分ですべての行が変更されたように表示されることがあるのは、改行コードが原因です。Windowsは行末をキャリッジリターンとラインフィードで表し、それ以外はラインフィードだけを使います。LFのファイルをWindowsのエディタで保存すると、すべての行が見えない1バイト分だけ変わります。そのため、git diffやdiff(1)のようなバイト単位の比較はファイル全体が書き換えられたと報告し、実際に加えた1か所の変更が埋もれてしまいます。当サイトのテキスト比較と重複行削除は、比較の前に3種類の改行コードすべてで行を区切るので、改行コードが変わっただけのファイルが一面の赤で表示されることはありません。これは閲覧用のツールでは便利ですが、リポジトリでは落とし穴になります。エディタやgit自体の改行コード設定で、元から直してください。

同じに見える2つの文字列が違うと判定されるのは、たいてい正規化が原因です。Unicodeでは「é」を2通りに書けます。1つのコードポイントとして書くか、普通の「e」の後に結合用のアキュートアクセントを続けるかです。表示は同じでもバイト列は異なるので、比較、重複排除、データベースの検索では2つの別の値として扱われます。macOSとWindowsはファイル名にどちらの形式を使うかで昔から食い違っていて、2台のマシンから集めたリストに、完全な重複に見えるのに重複排除できない項目が生まれるのはそのためです。これを見つけるには文字数カウントを使います。2つの形式は書記素の数が同じで、コードポイントの数が異なります。これらのツールはどれも形式間の変換は行いません。それはPythonのunicodedata.normalizeのようなUnicodeライブラリを使えば、スクリプト1行で済む作業です。

「単語数」は測定ではなく判断です。空白で区切るのは英語のルールで、単語の間にスペースを入れない中国語、日本語、タイ語に当てはめると、長い記事が1語と報告されます。当サイトのカウンターはその代わりにブラウザのUnicode単語分割を使い、どの文字体系でも単語の始まりを判別します。残る食い違いは、ハイフン(「well-known」はここでもWordでも1語ですが、ツールによっては2語)、単独の数字、そして何を1文と数えるかです。「We met Dr. Smith」は1文ですが、単純な分割では2文になります。読了時間はさらにその上に重ねた推定値で、ブログ記事の間でコピーされ続けている切りのいい数字ではなく、メタ分析に基づく黙読で1分あたり238語を使っています。

ブラウザが本当に適さない場面

このカテゴリのツールは何も送信せず、何も保存しません。だから未公開の下書きや社外秘のソースコードも安心して貼り付けられます。一方でそれが上限を決めてもいます。作業の途中で気づくより、どこに上限があるのかを先にお伝えします。

大きなファイル。テキスト全体がタブのメモリに保持され、入力するたびに調べ直されます。数MBなら快適ですが、数百MBのログファイルはそうはいきません。スマートフォンはノートパソコンより早く限界に達します。コマンドラインにはこの問題がありません。ストリーミングで処理するからです。grepとripgrepはメモリより大きなファイルも検索でき、sedとawkは1行ずつ変換し、uniqueフラグ付きのsortはディスクを使いながら数千万行のリストの重複を削除します。どれも無料で、macOSとLinuxには最初から入っています。

大きく異なる文書。テキスト比較は差分が8,000か所に達すると止まります。それを超えるとアルゴリズムのメモリ消費が急増してタブが固まるうえ、そこまで大きな差分はどのみち読めないからです。同じ文書の2つのバージョンなら、ほぼ上限に届きません。無関係な2つの文書なら、すぐに届きます。コードのレビューには、diffやgit diffならどんなサイズでも扱え、本格的な3方向マージツールはこのページにはまったくできないことをこなします。

文字コードの変換、Unicodeの正規化。これらのページは読み込んで報告するだけで、文字コード間の変換は行いません。iconvはあらゆる文字コード間で変換でき、fileコマンドは手元のファイルの文字コードを推測し、Unicodeの正規化はPython 1行かICUのuconvで行えます。文字化けした書き出しファイルを修復するなら、それらのツール群を使ってください。

繰り返しの作業全般。これらのツールは人がクリックしたときに動きます。400個の文書の単語数を数える、コミットのたびにディレクトリを圧縮するといった作業はスクリプトやビルド工程の仕事です。特に圧縮なら、ビルドツールが同じ圧縮を、ソースマップ、監視モード、キャッシュ付きで行ってくれます。貼り付け欄にはできないことです。このページは、目の前にある1つのファイルのためのものです。

モダンなCSS。CSS圧縮は、ネイティブのネストや新しいメディアクエリの範囲構文を圧縮せずに拒否します。内部で使っている圧縮エンジンはどちらよりも古く、理解できないものを黙って削除してしまうからです。これは機能ではなく正直な拒否です。解決策は、先にSass、PostCSS、Lightning CSSでネストを展開しておくことで、お使いのビルドツールはおそらくすでにそうしています。

似た名前のツールの選び方

単語数カウントと文字数カウント。数え方は同じで、大きく表示する数字が違います。単語数カウントは単語数、文の数、段落数、読了時間を中心に表示します。エッセイ、記事、スピーチはこれで測ります。文字数カウントは文字数、スペースを除いた文字数、UTF-8のバイト数を中心に表示します。メタディスクリプション、SMSの分割単位、データベースの欄はこれで測ります。長すぎるとテキストを拒否されたなら、使うべきは文字数カウントで、特にそのバイト数です。

テキスト比較と重複行削除。テキスト比較は「この2つのバージョンで何が変わったか」に答えるもので、2つのテキストが必要です。重複行削除は1つのリストを対象に「この中で2回以上出てくるものは何か」に答えます。どの項目が何回重複したかを表示したり、item2がitem10より前に来るよう自然順で並べ替えたり、ちょうど1回だけ出てきた行だけを残したりもできます。2つのリストのうち片方にしかない項目を見つけるのは、比較ツールではなく重複行削除の仕事です。

HTML圧縮、CSS圧縮、JavaScript圧縮。3つの言語に3つの圧縮ツールがあり、知っておきたい重なりが1つあります。HTML圧縮は、styleブロック内のCSSとscriptブロック内のJavaScriptも、ほかの2つのページと同じ方法で圧縮します。つまり1つのHTMLファイルなら必要なツールは1つで、3つではありません。独立した.cssファイルや.jsファイルには、それぞれのページを使ってください。

XMLビューアーと、XML整形・XML構文チェック。ここにあるビューアーは、折りたためるツリーで内容を探れるようにします。文書が大きく、何かを探しているときに向いています。開発者ツールにある整形と構文チェックは、ファイルに貼り戻せるインデント付きのテキストと、壊れている箇所の正確な行と列を示します。読むためか、編集して直すためかの違いです。

CSVビューアーと、Excelでファイルを開くこと。競合するツールではありませんが、人が実際に比べているのはこの2つです。Excelは開くときに断りなく変換します。00123という商品コードは123に、5-3という部品番号は5月3日に、長い注文番号は指数表記になり、ドイツのシステムから書き出したセミコロン区切りのファイルは全部A列に入ってしまいます。ビューアーはすべての値を保存されたとおりのテキストで表示するので、実際に何が送られてきたのかを確認できます。

MarkdownプレビューとMarkdown PDF変換。プレビューは、READMEがGitHubでの表示どおりにレンダリングされるかを、入力しながらリアルタイムで確認するためのものです。ドキュメントツールにあるMarkdown PDF変換は、改ページ付きの完成した文書を作るためのものです。ここで確認して、あちらで仕上げてください。

これらのツールを支える技術

実際の処理を担うオープンソースのエンジンと、それらが実装している仕様です。

  • Unicode Annex #15Specification — 正規化を解説。同じに見える2つの文字列が異なることがある理由です.
  • Unicode Annex #29Specification — 書記素クラスターを定義。これが「1文字」の本当の意味です.
  • cssoMIT — CSSを圧縮.
  • TerserBSD-2-Clause — JavaScriptを圧縮.
  • markdown-itMIT — Markdownのプレビューを描画.

よくある質問

テキストはどこかに保存されますか?

いいえ。何も保存されず、何も記録されず、リクエストも発生しません。ページを読み込んだあとにインターネットを切断しても、すべてそのまま動きます。これはテキストにとって見た目以上に重要です。オンラインのカウンターや比較ツールに貼り付けられるのは、未公開の原稿、法律文書の草案、学生の課題、社外秘のソースコードだからです。

単語数がMicrosoft Wordやほかのサイトと違うのはなぜですか?

数えるには判断が伴うからです。ハイフンでつながった語、単独の数字、何で文が終わるか、何で段落が区切られるかはどれも判断事項で、ツールによって決め方が違います。当サイトは「well-known」を1語と数え、改行ごとではなく空行を段落の区切りとし、「Dr.」のような略語の後で文を区切りません。さらにUnicodeの単語分割を使うので、中国語や日本語も巨大な1語と報告されることなく、正しく数えられます。普通の文章なら数値はほぼ一致しますが、部品番号のリストでは一致しません。

ドロップしたファイルが「é」ではなく「é」と表示されるのはなぜですか?

UTF-8ではないからです。入力欄はドロップされたファイルをUTF-8として読み込みます。今世紀に作られたものならほぼすべてこれで読めますが、古い書き出しファイルはWindows-1252やLatin-1のことがあり、そのバイトは別の意味になります。iconvで一度変換すれば、恒久的に直ります。これらのツールの中で例外はCSVビューアーで、文字コードを判別し、判別が間違っていれば変更できます。

重複を削除したのに、まだ重複が残っているのはなぜですか?

ほとんどの場合、行末の空白が原因です。目に見えませんが、2つの行を実際に別物にしてしまいます。そのため比較前の空白の除去は既定でオンになっていて、影響するのは比較だけです。残った行は元のテキストのまま保たれます。もう1つの原因はUnicodeです。1文字で書いたアクセント付きの文字と、文字に結合用のアクセントを続けたものは、見た目は同じでも等しくありません。ここではそれを自動で正規化することはありません。

Word文書、PDF、スプレッドシートにも使えますか?

直接は使えません。これらのツールはテキストを対象にしていて、だからこそ一瞬で動きます。先に変換してください。当サイトの[PDFテキスト抽出](pdf-to-text)と[DOCX TXT変換](docx-to-txt)がまさにその作業を行い、結果はそのままここに貼り付けられます。例外はCSVで、CSVビューアーで直接開けます。

サイズや1日の利用回数に制限はありますか?

アカウントも、容量の割り当ても、1日の上限もありません。回数を数えるサーバーがないからです。制限は端末のメモリです。明示的な上限が1つだけあり、テキスト比較は差分が8,000か所に達するとタブを固まらせる代わりに停止し、その旨を表示します。同じ文書の2つのバージョンを比べるなら、上限に近づくことはまずありません。