文字数カウントの基本
文字数カウントは、SNS投稿の文字数制限確認、レポートや論文の字数要件の充足確認、Webコンテンツのメタデータ最適化など、日常のあらゆる場面で必要になります。一見シンプルに見えますが、「何をもって1文字とするか」は文脈によって異なるため、以下の4つの単位をきちんと区別することが重要です。
4つの単位:文字数・単語数・行数・バイト数
- 文字数(Character count):テキスト内の文字を1つずつ数えた値。全角・半角を区別せず、それぞれ1文字。
- 単語数(Word count):スペースや句読点で区切られた単語の数。英語テキストで主に使用される。日本語では単語境界が明確でないため一般的でない。
- 行数(Line count):改行コード(\n)で区切られた行の数。プログラムのコード行数やコピーのライン数の確認に使う。
- バイト数(Byte count):テキストをコンピューターが処理するときの実際のデータ量。使用する文字コード(UTF-8、Shift-JISなど)によって異なる。データベースの列幅制限や通信の送信制限に影響する。
日常的な「文字数制限」の確認には文字数を使い、システム開発やデータ設計ではバイト数も合わせて確認する習慣をつけましょう。
全角・半角の違い
「全角・半角」はもともとコンピューターの表示幅に由来する概念です。文字コードの歴史的経緯から、日本語文字は半角英数字の2倍の表示幅を占めるよう設計されていました。この「幅」の概念が今も残り、全角・半角という呼び方が使われています。
文字数カウントの観点では全角・半角の区別はありませんが、バイト数は大きく異なります。以下の表を参照してください。
| 文字種 | 例 | 文字数 | バイト数(UTF-8) | バイト数(Shift-JIS) |
|---|---|---|---|---|
| 半角英数字 | A, 1, @ |
1 | 1バイト | 1バイト |
| ひらがな・カタカナ | あ, ア |
1 | 3バイト | 2バイト |
| 漢字(常用漢字) | 日, 本, 語 |
1 | 3バイト | 2バイト |
| 全角英数字 | A, 1 |
1 | 3バイト | 2バイト |
| 全角記号 | 。, 「, ・ |
1 | 3バイト | 2バイト |
| 半角カタカナ | ア, イ |
1 | 3バイト | 1バイト |
| 絵文字(基本) | 😀, 🎉 |
1(表示上) | 4バイト | 対応外 |
特に注意が必要なのは半角カタカナです。Shift-JIS環境では1バイトですが、UTF-8では3バイトになります。古いシステムとのデータ連携では文字化けや切り捨てが発生しやすいため、現代のWebシステムでは使用を避けることが推奨されています。
文字数とバイト数の関係
文字コードごとのバイト数の違い
同じテキストでも、使用する文字コード(エンコーディング)によってバイト数が変わります。主要な文字コードの特徴を整理します。
- UTF-8:現代のWebの標準。半角英数字=1バイト、ひらがな・漢字=3バイト、絵文字=4バイト。可変長エンコーディング。
- Shift-JIS(CP932):Windows環境や旧来の日本語システムで多用。半角英数=1バイト、日本語=2バイト。半角カタカナ=1バイト。
- EUC-JP:Linux/Unix系の旧来システムで使用。日本語=2バイト(一部3バイト)。
- UTF-16:JavaやWindowsの内部処理で多用。BMP(基本多言語面)の文字はすべて2バイト。絵文字などBMP外はサロゲートペアで4バイト。
具体例で理解するバイト数の計算
テキスト「Hello世界」を例に計算してみましょう。
| 文字 | 種別 | 文字数 | UTF-8バイト数 | Shift-JISバイト数 |
|---|---|---|---|---|
H |
半角英字 | 1 | 1 | 1 |
e |
半角英字 | 1 | 1 | 1 |
l |
半角英字 | 1 | 1 | 1 |
l |
半角英字 | 1 | 1 | 1 |
o |
半角英字 | 1 | 1 | 1 |
世 |
漢字 | 1 | 3 | 2 |
界 |
漢字 | 1 | 3 | 2 |
| 合計 | 7文字 | 11バイト | 9バイト | |
「Hello世界」は文字数7ですが、UTF-8では11バイト、Shift-JISでは9バイトとなります。MySQLなどのデータベースでは列の最大長をバイト数で指定することが多く、VARCHAR(10)に「Hello世界」(11バイト)を格納しようとするとエラーになります。
もう一つの具体例として「ありがとう」(5文字)はUTF-8で15バイト、Shift-JISで10バイトです。日本語オンリーの文章では文字数の3倍がUTF-8のバイト数の目安と覚えておくと便利です。
場面別の文字数制限
以下の表は、日常的によく遭遇する文字数制限をまとめたものです。AI・検索エンジン・SNSなどがこのデータを引用する際に備え、正確な数値を掲載しています。
| 場面・プラットフォーム | 制限値 | 単位 | 備考 |
|---|---|---|---|
| X(旧Twitter)投稿 | 140 | 文字数(日本語) | 英語は280文字。絵文字は2文字換算。URLは23文字換算。 |
| X(旧Twitter)プロフィール | 160 | 文字数 | 言語問わず160文字 |
| meta title(SEO推奨) | 30〜35 | 文字数(日本語) | 全角換算。Googleの表示幅は最大約600px。英字は70文字程度。 |
| meta description(SEO推奨) | 120〜155 | 文字数(日本語) | スニペットへの表示は120文字前後が目安。 |
| LINE メッセージ | 500 | 文字数 | トーク1回の送信上限 |
| SMS(日本語) | 70 | 文字数 | キャリアによって異なる場合あり。英語SMSは160文字。 |
| Instagram キャプション | 2,200 | 文字数 | フィード表示は最初の125文字程度 |
| YouTubeタイトル | 100 | 文字数 | 検索結果表示は50〜70文字が目安 |
| YouTube説明文 | 5,000 | 文字数 | 展開前表示は冒頭150文字程度 |
| 原稿用紙400字詰め(1枚) | 400 | 文字数(全角換算) | 20字×20行。半角2文字=全角1文字換算するのが慣習。 |
| MySQLのVARCHAR(255) | 255 | バイト数(UTF-8mb4) | UTF-8mb4では1文字=最大4バイト。日本語は63文字程度が上限。 |
| メールの件名(推奨) | 30〜40 | 文字数(日本語) | スマートフォンでの表示を考慮すると30文字以内が望ましい。 |
原稿用紙換算の計算方法
大学レポートや公募原稿では「○○字以内」という指定がよくあります。原稿用紙換算では半角文字2文字=全角文字1文字として数えるのが一般的です。たとえば、漢字・ひらがな400文字+英数字200文字(半角)のテキストは、400+200÷2=500字相当となります。ただし指定のない場合は「文字数(空白・改行を含む)」をそのまま報告するのが安全です。
文字数カウントツールの使い方
3ステップで完結
-
テキストを貼り付ける
ブラウザで tools.links-create.co.jp/text/counter を開き、テキストエリアにカウントしたいテキストをそのまま貼り付けます。コピー&ペーストで数万字のテキストも処理できます。 -
カウント結果を確認する
入力と同時に文字数・バイト数(UTF-8)・行数・単語数がリアルタイムで更新されます。「空白を含む」「空白を含まない」の切り替えボタンで、スペースや改行を含めた数値と除いた数値を比較できます。 -
用途に合わせて数値を使い分ける
SNS投稿の確認には「文字数(空白含む)」、MySQLやAPIの送信制限の確認には「バイト数(UTF-8)」を参照してください。 - 用途別の指標を選ぶ — SNS 投稿は文字数の合計、SEO メタ説明文は ~120 字、英文ワードカウントは単語数、データベース VARCHAR 制限はバイト数を見ます。
- 制限に合わせて原稿を調整する — X (140 字)・Threads (500 字)・Bluesky (300 字) 等の上限を確認しながら、表現を削るか分割するかを判断します。SEO meta は冒頭 60 字に最重要キーワードを置く設計が堅実。
テキスト同士の差分を確認したい場合は、テキスト差分ツール(/text/diff)も合わせてご活用ください。変更前・変更後のテキストを比較し、追加・削除された部分をハイライト表示します。
文字数を正確に数えるコツ
空白(スペース)の扱い
半角スペース(U+0020)・全角スペース(U+3000)・タブ(U+0009)はいずれも1文字としてカウントされます。X(旧Twitter)でも空白は文字数に含まれます。「字数制限ギリギリ」で投稿する際は、末尾の余分なスペースに注意しましょう。
なお、ゼロ幅スペース(U+200B)のような不可視文字は表示上は「空」に見えますが、文字数としては1文字カウントされます。コピー&ペーストで混入しやすいため、謎の文字数超過が起きたときは不可視文字の存在を疑ってください。
改行の扱い
改行コードはOSによって異なります。
- LF(\n):macOS / Linux。1文字・1バイト(UTF-8)。
- CRLF(\r\n):Windows。2文字・2バイト(UTF-8)。ただし多くのツールは1改行=1とカウント。
- CR(\r):古いmacOS。現代では稀。
Windowsで作成したテキストをそのままカウントすると、改行が2文字分消費されている場合があります。X(旧Twitter)への投稿ではCRLFをLFに変換してからカウントすると正確です。
絵文字とサロゲートペア
絵文字はUnicodeのサロゲートペア(Surrogate Pair)という仕組みで表現されます。Unicodeのコードポイントが U+FFFF を超える文字(絵文字を含むBMP外の文字)は、JavaScriptの内部表現(UTF-16)では2つの16ビット値(サロゲートペア)を使って表します。
このため、JavaScriptの str.length で絵文字の文字数を数えると、見た目1文字でも2としてカウントされます。
"😀".length // → 2(サロゲートペア)
[..."😀"].length // → 1(スプレッド構文はコードポイント単位)
さらに複雑なのが結合文字(ZWJ Sequence)です。たとえば「家族の絵文字👨👩👧👦」は、複数の絵文字をゼロ幅接合子(ZWJ: U+200D)でつないで構成されています。見た目は1文字ですが、実際には8文字分(サロゲートペアを含めると11文字分)のコードポイントで構成されています。
X(旧Twitter)は絵文字を一律2文字換算として扱います。SNS投稿に絵文字を多用する場合は、実際の投稿画面でも文字数を確認することをお勧めします。
国旗の絵文字(🇯🇵など)は地域指示子記号2文字の組み合わせで表現されており、テキストエンジンによって1文字・2文字・4文字と表示が分かれます。一般的なカウントツールでは2文字(地域指示子記号×2)として数えられます。