SNS長文分割 — X・Bluesky・Threads・Mastodonの数え方で連投に切る
長い文章を連投用に分けます。Xは日本語1字を2として数え、URLは長さに関係なく23字。投稿先ごとの数え方でぴったり切り、通し番号の桁数まで含めて枠を計算し直すので、最後の1通が上限を超えません。絵文字とURLは途中で切りません。
本文を貼ると、いまの字数がここに出ます。
本文はこのページの中だけで処理します。どこにも送信しません。
使い方
本文を貼って投稿先を選び、分割するを押すだけです。通ごとの箱には、その通が投稿先の数え方で何字になるかが出ます。コピーのボタンは1通ずつ付いているので、上から順に投稿していけばそのまま連投になります。通し番号は既定で末尾に付きますが、要らなければ「付けない」を選んでください。余白の欄は、あとから毎回同じ署名や引用元を足す人のためのものです。ここに入れた字数ぶんだけ枠を狭めて切るので、足したあとで上限を超えません。
「140字で切る」がうまくいかない3つの理由
長文をSNS用に切る道具はいくつもありますが、多くは決めた字数で機械的に切っているだけです。日本語の投稿ではそれだと合いません。理由は3つあります。
1つ目は、字数の数え方が投稿先ごとに違うことです。X(旧Twitter)の上限は280で固定ですが、日本語の文字は1字を2として数えます。だから日本語だけなら実質140字で、英数字が混ざるとその分だけ多く入ります。さらにURLは、実際の長さに関係なく23字として数えられます。60字のURLを貼っても23字ぶんしか減りません。逆にBlueskyは1字を1字として数え、URLも見えているとおりの長さで数えます。「140字で切る」も「280字で切る」も、この違いをまたいだ瞬間にずれます。
2つ目は、通し番号が本文を食うことです。末尾に (1/5) を足せば、その5字と改行の1字は本文の枠から引かれます。厄介なのはここからで、枠を狭めた結果9通が10通に増えると、番号の桁がもう1つ増えてさらに枠が狭まります。切ってから番号を貼るだけの実装は、この2段目を見ていないので最後の通が上限を超えます。この道具は、通数が動かなくなるまで枠を計算し直してから切ります。
3つ目は、絵文字が1文字ではないことです。家族の絵文字や肌の色を付けた絵文字は、複数の符号位置がZWJという見えない文字で繋がった塊です。文字数だけを見て途中で切ると、別の絵に化けるか、豆腐(□)になります。この道具は書記素クラスタを最小単位にしているので、絵文字の途中では切りません。URLも同じ理由で塊として扱い、途中では切りません。
切れ目の選び方
枠に入るだけ詰めてから、後ろに向かって切れ目を探します。望ましい順は空行(段落の変わり目)→ 改行 → 句点や閉じ括弧 → 読点や中黒です。ただし枠の半分より前にしか候補が無ければ、そこでは切りません。遠い段落境界に引っぱられると、枠の3割しか使わない通ができます。そちらのほうが読みにくいためです。同じ望ましさの候補が複数あればいちばん後ろを採るので、ふつうは枠の8割以上まで詰まります。行頭に来ると据わりの悪い記号(閉じ括弧・句読点・長音符)の直前でも切りません。
数字で確かめる
Xで1370字ぶんの仮名を投げると、番号なしなら280 ÷ 2 = 140字ずつで10通です。ここに (1/10) の番号を足すとどうなるか。1通と仮定した時点では (1/1) と改行で6字なので枠は274、仮名137字ずつで137 × 10 = 1370字ちょうど、やはり10通に見えます。ところが10通なら番号は (10/10) と改行で8字。枠は272に縮んで仮名136字ずつになり、136 × 10 = 1360字しか入りません。10字あふれて11通が正解です。番号を貼るだけの実装は、この場合に10通目を282字にしてしまいます。
注意点
- 上限はいずれも既定値です。Mastodonの500字はサーバの設定で変えられますし、各社の仕様も変わります。長い連投を投げる前に、1通目だけ実際の投稿画面に貼って字数表示を確かめてください。
- メンション(
@名前)やハッシュタグの数え方は投稿先ごとに違い、この道具はふつうの文字として数えます。Mastodonのようにメンションのドメイン部分を数えない実装もあるので、その分はこちらが多めに見積もります(足りなくなる向きのずれは出ません)。 - 画像や引用を付けた場合の消費もここには含みません。余白の欄で自分で引いてください。
- URLの見つけ方は
http://とhttps://で始まる部分に限っています。example.comのようにスキーム無しで書かれたものは、投稿先ではリンクとして短縮されることがありますが、この道具はふつうの文字として数えます。 - 枠より長いURLが1本だけあるときは、それだけで1通にします(切ればリンクとして死ぬため)。その場合は画面にその旨を出します。