Twitterの日本語ハッシュタグ機能追加

Twitterが日本語(その他の言語も同時対応だけれども)によるハッシュタグを有効にした。

しかも仕様がきちんとしていてありがたい。最近更新していないけれども、Twitterクライアントアプリ作者としてはここまできちんと決めてくれると作りやすい。

前後に半角を強制したり、文字種を決めてくれたりは本当にありがたいことだ。

それほど面倒ではないにせよ、やっかいなのは、半角と全角の「#」と「#」をどちらもハッシュタグの開始として有効にしなさいということくらい。それ以外は結構厳密に決まっているように見えるから頻繁にアップデートしているアプリならすぐに対応するのではないかと思われる。

URLとは大違い。本文中に記述したURLも、ハッシュタグと同じで、ある規則で書いた本文をプログラム、またはTwitterシステムがある意味を持たせて動作させているに過ぎない。だからきちんと書かないと書いた本人の意図とは違った動作になっても仕方が無い。それがURLとハッシュタグでは曖昧さが出にくいようにきちんとハッシュタグの仕様を決めてくれたことを評価したいのだ。

今、URLには日本語URLが使える。ブラウザのアドレスバーに有効な日本語URLを手入力すれば(例えばWikipediaの日本語項目とか)そのままアクセスできるし、テキストエディタなどにコピー・ペーストすればエスケープ・エンコードされた文字列がペーストされる。

HTMLで書く時にはAタグで文字列を囲ってAタグのref要素にリンク文字列を書けば誤解も何も発生し得ないのであるが、Twitterは140字制限の上にHTMLではなく、ベタのテキストなので、プログラムが文字列を解析してURL判定をしなければならない。

例として次の文字列を考える。

http://hogehoge.foo.bar.shorten(PDF)

これはhttp://で始まるある短縮URLであると考える。shortenで終わらせたのはその意味だ。そして書いた人はそれを分からせるために注釈として(PDF)と書き添えた。「()」が全角、「PDF」が半角とした。

プログラムが日本語URLを有効判定しない仕様で構文解析をすれば、この文字列の解析はhttp://から始まって、「(」で向こう文字判定されるから、URLとしては「http://hogehoge.foo.bar.shorten」がURLとして抽出されるからおそらく書いた人の思ったとおりだろう。

しかし、日本語を有効判定する場合は、「(」は有効文字列に含まないわけにはいかないから、「http://hogehoge.foo.bar.shorten(PDF)」すべてをURLとしなければならない。もちろんクリックしてもブラウザはエラーを返すだろうし、書いた人の意図とは違う。

これを避けるには、「(」の前に半角スペースを入れるしかない。半角スペースはそのままではURLとは判定されない(%20でエスケープされているべき)のでそこで切られるはずである。

私が作っていたアプリは日本語判定を無効にしていたので問題なかったが、比較用に使っていた他のアプリはすべて日本語を有効に判定していたからこの問題が発生していた。短縮URLの後ろには半角スペース、結構入れない人多いのである。日本語が続いているならともかく、英文が続いていたら、どこで切ったらいいか全くわからない。というか、英語圏の人はスペースで必ず切る習慣があるから問題がないのだけれども。

コメント