mikutterの最新の情報は、mikutter blogに引っ越しました。

2011年7月18日月曜日

非ASCII文字ハッシュタグのはなし

なんか今更感のある日本語ハッシュタグが導入されましたねー(厳密には日本語以外もいけるようになったんだけど、このエントリは日本語なのでまぁ)。
ここんところフォーラムも何も見てないのでそういう情報入ってきてないので、事前情報があったかもしれないけど寝て起きたらできてたかんじでした。
で、いろいろとよくわからんことがあった

リンク条件

どういう時に日本語ハッシュタグになるのかよくわかってない人が多いですね。これは公式ブログ書いてあるけどつまり
  • 最初にスペースorツイートの先頭
  • #か#で始まる
  • 日本語とか(記号は不可)
  • スペースか句読点で終わる
を満たしていないと、そもそも一文字もハッシュタグとして認識されないというあれ。たとえば「#みくったー」は記号「ー」が含まれているのでハッシュタグじゃないです「みくった」の部分だけハッシュタグになるということもないです
(→流石にこの(糞仕様|バグ)は改善されて昨日あたりから「ー」が許されるようになった)

各種Twitterクライアントの対応の差異

大抵のTwitterクライアントは、24時間以内にアップデートをかけて日本語ハッシュタグに対応してしまった。まあこれはいいことですよね。
ただ、上に述べたような、長音が含まれてるとハッシュタグとして認識されないというのはどういう扱いになっているんだろう。かなり怪しい挙動だけど、仕様という解釈もできなくはなかった。また、そもそも最初からハッシュタグに以下のような正規表現を使ってるせいで
#.+?\s
そもそも日本語だろうと何だろうと全部リンクしてしまうあれなTwitterクライアントも結構ある。
つまり、同じツイートなのにハッシュタグとして認識される範囲がツイッタークライアントによってまちまちであるというコーナーケースがいくつか存在してるわけですね。

mikutterの対応

みくったーユーザ「あ、ありのまま今起こったことを話すぜ…。mikutterを立ち上げたら、バージョンも上げていないのに、既にハッシュタグに対応していたんだ、自分でも何を言っているのかry」

こんな風に勝手に対応してしまった理由は、俺が事前に情報をつかんでたわけではなく、Twitterにエンティティ情報を元にリンクを張っているからです。

https://dev.twitter.com/docs/tweet-entities

Twitter的には何文字から何文字目がURLだとか、そういう情報を送ってきている(エンティティ)ので、そのとおりにリンクを張れば、Twitter Webと全く同じ位置にリンクを貼ることができる。
この情報を使っているツイッタークライアントは、Twitterが日本語ハッシュタグのリンク位置を送ってくるようになった瞬間から対応ができてしまっていたということになるわけですね。

エンティティ情報を使っていないのが大多数

何かしらのバージョンアップをするということは、そういうことになりますよね。
ぱっと思いつく理由はこんな所かな

  1. 出来たのが最近なので、対応していない
  2. Twitterが言うことなので、信用ならない
  3. いろいろと面倒くさい

1は既に自前でやっててちゃんとできてるしいいじゃんという話。2は、まあ、はい。3は、なんか<>はエンティティエンコードされて送られてきてるのに&はされてなかった気がするんだけどあれナンダヨとか、実は微妙にバグってたりするんじゃねーのとか、まあそのあたり。

で、mikutterには愚かにもこれを信用していて、Twitterが日本語ハッシュタグ対応した時点で、そのルールに合ったものについてはエンティティがくっついてくるようになったので、普通に日本語ハッシュタグがつかえるようになったというわけ。
だけど、先に述べたような、全角長音記号が含まれているとハッシュタグとして認識されない不具合などまでそのまま反映してしまう(Twitterが治したタイミングで治ったが)。

まとめ

みんなエンティティつかってないんだね…僕テッキリ使ってると思ってたよ…グスン