金箱 遼

2013.11.27

Twitterは140文字ではない。と気づいた時の処方箋

こんにちは、PHPエンジニアの金箱です。

まずはじめに、Twitterは140文字ではありません!!!

嘘だと思われる方は、Twitterアカウントを持っていればツイートボックスに以下の文字を入れてみてください。

https://www.google.com/#q=Twitter%E3%81%AF140%E6%96%87%E5%AD%97%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%80%82%E3%81%A8%E6%B0%97%E3%81%A5%E3%81%84%E3%81%9F%E6%99%82%E3%81%AE%E5%87%A6%E6%96%B9%E7%AE%8B

何文字とカウントされましたか?

23文字とカウントされたはずです。
実際には199文字あります。
どうしてこうなってしまったのでしょうか?

実は、Twitterは特殊な条件のとき、1文字を1文字とカウントしないように出来ています。(←これだけ読むと意味が分かりませんね。)
URLも特殊な条件のうちのひとつです。
URLがどんなに長くても、”短くても”、22or23文字です。(なぜ「or」なのかはのちほど説明します)
”短くても”の場合は、例えばgoo.glの短縮ドメインは20文字に短縮されますが、Twitterでは22文字とカウントされます。

TwitterのAPIを作りたいようなエンジニアにとっては、とても困ったことが起こります。
「テキスト入力欄に文字を入力して送信ボタンを押すとツイートする」というプログラムを作ろうと思ったとします。
Twitterは140文字だからと思って、140文字で文字数制限をかけます。
すると、もれなくTwitterの文字数カウント方式とずれが発生してしまいます。あらかじめURLを含ませるツイートをさせるときなどは困りますね。

そこそこ腕の良いエンジニアなら「URLは23文字とカウントするように文字数制限をかければ良い」と考えるでしょう。
それは正しいアプローチです。
しかし、URL以外にもTwitterは特殊な条件を用意しているかもしれないという不安は残ります。
事実、URL以外にも特殊な条件が存在します。

困った。

実はTwitterが特殊な条件を公開しているページが存在します。(こちらが今回の処方箋です)
以下のURLです。

https://dev.twitter.com/docs/api/1.1/get/help/configuration

パッと見だと意味が分からないと思うので、
コメントを付けてみました。

どうでしょうか?
これを信じればTwitterの文字数のバリデートは完璧です。

ちなみに、このconfigurationは時々変わります。

例えば以前URLは21or22文字でした。また、ユーザー名(@user_name)は22文字とカウントするみたいな制限もありました。(だからユーザー名の予約語がリスト化されてる)

前回はAPIが1.0→1.1になってしばらくしてから変わりました。頻繁に変わるわけではありません。
ですが、安定したサービスを提供したい場合には変更に注意しましょう。

TwitterやFacebookはドラスティックに仕様変更を行ってきます。

プラットフォームに依存しているサービスにとってはかなり迷惑ですが、
一方で、仕様変更はユーザーのために行われることがほとんどです。
サービスとしては仕様変更を嫌がらずに、むしろ歓迎するぐらいの気構えが必要です。

最近ではTwitterのダイレクトメッセージでURLを含む投稿ができなくなるという仕様変更がありました。
スパムに対抗する手段だとうわさされています。

ところが、 Yahoo!やGoogleなどのメジャーなドメインのURLは問題なく投稿できます。

弊社のサービスであるモニプラのURLもダイレクトメッセージで送ることができるようになっています。
http://monipla.comhttp://monipla.jp です。)

プラットフォームに依存するサービスは、プラットフォーマーと一緒にプラットフォームを育てようという心持でいるべきです。
しいては、プラットフォーマーと良好な関係を構築することにつながり、仕様変更にへの1つの処方箋となります。

アライドアーキテクツではプラットフォーマーとともにユーザーのことを真剣に考えたいエンジニアを募集しています。
こちらのサイトへアクセスしてください。