X (Twitter) の 280 文字制限に収める
スレッドを書いていて、2 番目のツイートが 312 文字になった、ジョークを失わずに削りたい。ツイートをここに貼り、character count を見ながら 280 以下になるまで削ります。X は URL を長さに関係なく 23 文字としてカウントし、絵文字は 2 としてカウントするので、素朴な文字カウントは残り容量をやや少なめに見せる点に注意してください。Twitter のウェイト計算については FAQ を参照。
テキストを貼り付けるだけで、単語数、文字数、行数、段落数、文の数、reading time がライブで表示されます。アップロードなし、登録なし、ブラウザの外には何も出ません。
ブラウザ内で動く無料の word counter です。エッセイ、ツイートの下書き、meta description、4,000 単語のブログ記事を貼り付けるだけで、単語数、空白あり/なしの文字数、行数、段落数、文の数、reading time の見積もりがライブで得られます。テキストはあなたのマシンから出ません。
存在意義はよくある小さな場面のためです。X の 280 文字制限を 12 文字オーバーした、meta description が 187 文字あって Google に切り捨てられそう、出願書類に「500 words 以内」と書いてあるのに MS Word の word count ダイアログはメニュー 2 階層下に埋もれている。貼って、見て、直して、次へ。
カウントは見た目より興味深い処理です。word count に関する Wikipedia 記事でも、MS Word、Pages、Google Docs が同じドキュメントに対して微妙に違う数値を返すことに触れられています。主な原因はハイフン付き複合語、em dashes、インライン脚注の扱い方です。私たちはどのルールを使っているかをはっきり示すので、あなたが信頼するエディタの結果と対応付けられます。
単語は空白で分割し、空のエントリを除外して数えます。これは MS Word、Google Docs、ほとんどのブログプラットフォームが内部で使っているのと同じ方式です。高速で、英語、フランス語、スペイン語など空白で区切られる言語には十分です。トレードオフ: 中国語、日本語、韓国語、タイ語の単語は正しく数えられません。これらの文字体系では word の間に空白が入らないからです。すべての言語で仕様どおりの単語境界がほしいなら、適切なツールは Intl.Segmenter です。これは Unicode UAX #29 (Text Segmentation) のアルゴリズムを実装しています。入力が必要としそうな場合には CJK の注意メッセージを表示します。
文字数は 2 通りの方法でカウントします: 空白あり (文字列内のすべての code point) と空白なし (ASCII の空白、タブ、改行を除外)。どちらの数値が必要かは、チェック対象の制限によります。ページタイトル、meta description、SMS は空白を含めて数えます。Twitter は独自方式なので FAQ を見てください。さらに、人間が見て認識できる文字数を grapheme クラスタで報告します。7 code point からなる家族の絵文字でも、人間の読者にとっては 1 文字としてカウントされます。
行、段落、文がパネルを完成させます。行は改行で分割します。段落は空行 (連続する 1 つ以上の空行) で分割します。文は .、!、? の後に空白が続く箇所で分割します。多くの散文では正しい結果になりますが、"Mr. Smith said hello" は 2 文と数え、"i.e." を新しい文の始まりと判定してしまいます。JavaScript 200 行で動く信頼できる文セグメンタは存在しないので、略語が多いテキストでは文の数はおおまかな目安と捉えてください。
テキストペイン 1 つに、ライブカウント 6 つ。インストール不要、アップロード不要、アカウント不要。
MS Word、Google Docs、メールクライアント、SMS の下書き、CMS エディタから貼り付けます。あるいは Upload をクリックして .txt や .md ファイルを読み込みます。Sample ボタンを押すと、まずカウンタが動く様子を見るためのサンプル段落が挿入されます。貼り付けは書式を取り除きます。これは望む動作で、テキストだけがカウントされます。
入力や編集に合わせて各カウントが更新されます。単語、空白ありの文字、空白なしの文字、行、段落、文、reading time がすべて同時に表示されます。reading time の見積もりは一般的な散文に対して 230 words per minute を使います。さらに、空白ベースの単語カウントでは入力を過小評価することを知らせる CJK 検出器もあります。
Copy を押すと整形済みテキストがクリップボードに戻ります。あるいはカウントチップを使って特定の数値だけをコピーできます。Download はテキストを .txt として保存します。別のカウントルール (たとえばハイフン付き複合語を 1 単語として扱う) が必要な場合は、入力を調整すればカウントが更新されます。サーバ側で設定するものはありません。
スレッドを書いていて、2 番目のツイートが 312 文字になった、ジョークを失わずに削りたい。ツイートをここに貼り、character count を見ながら 280 以下になるまで削ります。X は URL を長さに関係なく 23 文字としてカウントし、絵文字は 2 としてカウントするので、素朴な文字カウントは残り容量をやや少なめに見せる点に注意してください。Twitter のウェイト計算については FAQ を参照。
500 単語の自己紹介、4,000 単語の文学エッセイ、学会投稿用 250 単語の要旨。多くの教育機関は空白で区切られたあらゆるトークンを 1 単語として数え、ハイフン付き複合語も 1 単語とします。これは私たちの結果と一致します。Common App のエッセイ制限は 650 単語で、運営側は厳格です。10 単語の食い違いがある word counter を使うと、提出と却下の差につながります。
Google はページタイトルを 60 文字付近で切り捨てます。モバイルではもっと早いこともあります。meta description は 160 文字付近で切り捨てられます。どちらも空白を含む文字数です。下書きをここに貼り、カウンタを見ながら、重要なキーワードが切り捨て位置の前に来るように書き直してください。Open Graph タイトルや Twitter card description にも同じルールが適用されます。
標準的な SMS は 7-bit GSM エンコーディングで 160 文字です。GSM 外の文字 (絵文字や曲線型クォートなど) を含めるとセグメントあたり 70 文字に下がります。iOS のプッシュ通知はロック画面プレビューで 178 文字付近で切り捨てられます。テキストが 159 文字なら 1 通の SMS に収まり、161 文字なら 2 通に分かれます。カウンタはその境界が正確にどこにあるかを示します。
Medium や Substack のようなブログプラットフォームは記事の上部に reading time の見積もりを表示します。標準計算は単語数を 230 (一般的な散文に対する大人の典型的な読書速度) で割って切り上げです。コードブロックや数式を含む技術コンテンツはそれより遅く、おおよそ 100 words per minute なので、エンジニアリング記事では見積もりが甘めになります。1,200 単語の how-to はおよそ 5 分の読書量です。
1,400 単語の下書きを書いたが、要件は 1,000 未満。元の文を貼り、削った版を 2 つ目のタブに貼れば、どれだけ削れたかがそのまま見えます。カウントの差分だけでなく、どの文が動いたか書き換えられたかを横並びの diff で見たい場合は、私たちの compare-text ツールがそのケースを扱えます。両方の指標がほしい時はセットで使ってください。
ほとんどのツールがつまずく状況と、私たちの挙動と注意点。カウントが変だと感じたら答えはたいていここにあります。
| Topic | What this tool does |
|---|---|
| 空白分割 vs Unicode セグメンテーション | 私たちは空白で分割します。これは高速で、英語については MS Word/Google Docs と一致します。仕様どおりの代替手段は Unicode UAX #29 で、JavaScript には Intl.Segmenter として公開されています。速度より言語カバレッジが重要な場合はそちらを使ってください。 |
| 単語の空白がない CJK 言語 | 中国語、日本語、韓国語、タイ語は word を空白で区切りません。空白カウントは段落全体でおおむね 1 を返します。これらの言語では意味のある指標は character count で、ここでは正しく動作します。本物の CJK word count には Intl.Segmenter を使ってください。 |
| 絵文字と Unicode の code point | 家族の絵文字 👨👩👧👦 は 1 文字に見えますが、ゼロ幅接合子で結ばれた 7 つの UTF-16 code point です。私たちは人間にわかりやすい数として grapheme (見える文字) を数え、code point は別に表示します。サムズアップに付く肌色のモディファイアは grapheme としては 1 つですが code point としては 2 つです。 |
| Twitter / X の文字ウェイト | X は各文字に重みを付けます。多くの ASCII は 1、絵文字と CJK は 2、URL は長さに関係なく 23 で固定です。私たちの character count は生の文字数です。使う絵文字 1 つにつき、おおよそ 7 を 280 のバジェットから引いてください。 |
| ツイート内の URL と @mentions | X はすべての URL を、実際のリンクの長さに関係なく t.co 経由で 23 文字に圧縮します。@mentions は文字どおりの長さでカウントされます。私たちのカウンタは生の長さを表示するので、長い URL を 2 つ含むツイートはここでの数値が X の報告より大きくなります。 |
| スマートクォート vs ストレートクォート | "カーリー" な引用符と "ストレート" な引用符は別の Unicode 文字ですが、それぞれ 1 文字としてカウントされます。多くのフォントでは似て見えます。MS Word や Pages から貼り付けると、しばしばスマートクォートに静かに置き換えられます。コードを貼る場合は先に元に戻してください。 |
| 末尾の空白と空行 | 行末の空白は依然として文字としてカウントされます。文書末尾の改行は 1 行としてカウントされます。段落間の空行は行の合計には加算されますが、段落カウントでは段落を分ける役割を果たします。 |
| エンコーディング (UTF-8) とバイト長 | "character limit" を表示するほとんどの API は Unicode 文字を意味しますが、一部は UTF-8 バイトを意味します。UTF-8 では絵文字は 4 バイト、CJK 文字は 3 バイト、アクセント付き Latin 文字は 2 バイトです。制限がバイト単位の場合、私たちの character count は少なめに見えます。Twitter は有名な中間派で、バイトでも文字でもなく、独自のウェイト方式です。 |
word count はテキスト中の空白で区切られたトークンの数なので、"hello world" は 2 word です。character count は個々の文字の数なので、"hello world" は空白込みで 11 文字、空白なしで 10 文字です。プラットフォームによって気にする数値は違います。アカデミックエッセイは word count、SMS とツイートの制限は character count、SEO の title タグも character count を使います。カウンタは両方を同時に表示するので、文脈に合った方を選べます。
入力を空白 (スペース、タブ、改行) で分割し、空ではない断片を数えます。なので "fast-paced" は 1 word、"well known" は 2 word、"isn't" は 1 word です。これは英語散文での MS Word および Google Docs の結果と一致します。トレードオフは、中国語、日本語、韓国語のテキストを正しく扱えないことです。これらの言語は word を空白で区切らないからです。すべての言語で仕様どおりの単語カウントが必要な場合、モダンブラウザは Intl.Segmenter を提供しており、Unicode の word 境界アルゴリズムを実装しています。
reading time は単語数を 230 words per minute で割り、最も近い分に切り上げます。230 wpm は一般的な散文を読む大人の妥当な中央値です。公開されている見積もりは非技術的な素材で 200 から 250 wpm です。コードブロック、数式、見慣れない用語を含む技術文書は読者を約 50 から 100 wpm まで遅くするので、エンジニアリングや科学コンテンツでは見積もりが甘めになります。ニッチな読者向けに厳密な計算がほしいなら、word count をその実際の reading speed で割ってください。
単語については数えません。CJK 言語は word を空白で区切らないので、空白ベースの word count は CJK の段落全体に対しておおむね 1 を返します。character count は依然として正確で (CJK 文字 1 つは 1 文字)、これらの言語ではむしろそちらが普通に求められる指標です。日本語のエッセイ制限は word ではなく文字単位です。本物の CJK の word count が必要なら、モダンブラウザの Intl.Segmenter API は Unicode の word セグメンテーションアルゴリズムを実装しており、CJK、タイ語、その他空白なしの文字体系を正しく扱います。
いいえ。カウンタは完全にブラウザ内で動作します。サーバへの送信、ログ取得、保存は一切行いません。機密の下書き、未公開の記事、確定申告の書類を貼り付けてタブを閉じても、コピーは残りません。確認したければ、DevTools を開いて Network タブに切り替え、入力中の様子を見てください。カウント更新時に外向きのリクエストはありません。ツールは依存関係についてもオープンで、関わるカウントコードはあなたのマシンで動くプレーンな JavaScript だけです。
おおむねその通りです。X は基本的な Latin、数字、一般的な句読点をほぼ 1 として、それ以外のほとんど (絵文字、CJK、アクセント付き文字) を 2 として、280 文字の枠から差し引く独自のウェイト方式を使っています。正確なアルゴリズムは counting-characters のドキュメントにあります。grapheme クラスタではなく code point の範囲を使うので、旗の絵文字 (regional indicator の code point 2 つ) は実際には 4 としてカウントされます。URL は長さに関係なく 23 文字として特別扱いされます。私たちの character count は重み付けなしの生の数値です。
テキストはブラウザから出ません。カウント、分割、レンダリングはすべてあなたのマシン上で動きます。テキストをアップロードしたり、ログに残したり、サードパーティサービスを経由させたりしません。機密の下書き、未公開のエッセイ、その他のプライベートな内容を貼り付け、タブを閉じても痕跡は残りません。確認するには、ブラウザの DevTools を開き、Network タブに切り替えて、入力中の様子を見てください。外向きのリクエストはありません。唯一の依存関係はブラウザ自身の JavaScript エンジンと、grapheme カウント用の任意の Intl.Segmenter だけです。横並びの テキスト diff、case converter、行のソート、重複行の除去が必要なら、それらのツールはワンクリック先にあり、同じブラウザ内ポリシーに従います。