本連載でURIの話を取り上げ始めて,もう4回目になってしまいました。URIに関しては,いろいろ面白い話題もあり,興味は尽きないのですが,ほかに考えてみたい題材もありますし,あまりこの話ばかりを続けるのもなんですから,ひとまず今回で最後にしたいと思います。

 今回は,動的生成されるURIの使いやすさ,という視点から考えてみます。ここでいう「動的生成されるURI」というのは,ブログのエントリ・ページやWikiのページのように,機械的に生成されるページのことです。また,商品情報を元に商品ページを自動生成するオンラインショップなども動的生成ですね。

 新たにページやデータを追加できるようなツールやサービスでは,新しくデータが追加された際に,新たに生成されるページにURIを割り当てる必要があります。その際に,どういったURIをつけてあげるのが使いやすさにつながるのか,ということを中心に,これまでの内容で触れられなかったトピックスなども含めて紹介していきます。

ブログにおけるURIのルールを見てみる

 ページがどんどん新たに作成されていくツールとして,代表的なものの一つといえるのがブログではないでしょうか。エントリを追加すれば,「Permalink」という形で新しいページが必ず一つ出来上がります。ブログに限らず,CMS的なツールの多くはページを新たに生成する機能を持っていますが,ここではまずはブログのPermalinkに注目してみることにします。

 海外のブログなどでよく見かけるのが,こんな形式のURIです。

http://webworkerdaily.com/2007/06/15/20-ways-to-use-linkedin-productively/

 サービスで言うと,Bloggerはこのタイプです。このURIの特徴は,年,月,日(Bloggerは日は入っていません)のあとに,個々のエントリのタイトルが入っている点です。タイトルは,すべて小文字になり,単語と単語の間がハイフンで区切られています。

 小文字にする,ハイフンで区切る,というのは,連載の第20回で説明した「使いやすいURIにするためのルール」を紹介する各種サイトでも述べられているセオリーどおりです。すべて小文字にするのは,大文字を混ぜると覚えづらくなること,単語の区切りを明確にして読みやすくすること,さらには検索エンジンにとっても理解しやすいためSEO対策にもなることなどが理由としてあげられるでしょう。

 日付とタイトルをURIに入れてしまう,というのはとても合理的な感じがします。ブログの場合,重要になるのはその内容と,それがいつ書かれたものなのか,ということだからです。筆者は,どんなブログを読んだときでも,まずはタイトルと日付を見ます。ブログは,情報が時系列で表示されるものです。もし内容を改める場合は,基本的にすでに公開したエントリを編集するのではなく,新しいエントリを追加するのが普通です。

 したがって,アクセスする記事がつい最近公開されたものであれば,その情報は最新のものである可能性が高いでしょうけれど,例えばそれが2年,3年前のものであれば,情報が古かったり,もっと新しい情報がどこかにあるかもしれないわけです。URIをみれば,それがどんな内容で,いつごろかかれたかが一目瞭然,というのはまさしく,そのリソースの意味をきちんとURIから認識できることになると思います。

 ただ,同じ月,もしくは同じ日に,同じタイトルのエントリを2回以上投稿した場合にどうなるのか,というのが気になったので,Bloggerで実験をしてみました。すると,2回目以降は以下のようなURIになりました。

http://nanzou.blogspot.com/2007/04/this-is-test.html
http://nanzou.blogspot.com/2007/04/this-is-test_15.html

これはどちらも「This is test」というタイトルで入力したエントリです。2回目のエントリでは,後ろに数字がつけられ,異なるURIになっています。これについては,同じ情報から異なるURIを作るとこういう風になるのは仕方が無いかなあ,と思いました。そもそも,全く同じタイトルを何回もつける,というのは,わかりにくくなるのでブログを書くうえであまり好ましくないんじゃないかと思いますし,そこを制御するのはコンテンツを作成する利用者のほうだという気がしますよね。

 ただし,Bloggerでは,日本語でタイトルを入力した場合には,そのURI生成規則がちょっと違っていて,例えば以下のようになります。

http://nanzou.blogspot.com/2007/04/blog-post_15.html

 仕組みとしては,英数字以外の文字がタイトルに含まれるとその文字は自動的に削除される,というもののようですが,英数字が一文字も含まれていないと「blog-post」という文字が入ってしまいます。英数字と日本語を混ぜた場合は,英数字の部分だけが抽出されてURIになります。けれど,単語の区切りを示すスペースが入っていませんので,例えば「dogとcat」というタイトルをつけると,以下のようになってしまいます。

http://nanzou.blogspot.com/2007/04/dogcat.html

 これについては,英数字以外が入っていても単語の区切りとみなすなど,もう少し工夫ができるんじゃないかな,とは思います。いずれにせよ,URIだけを見ても意味がわかりづらくなってしまっているのはUS-ASCII以外の文字を利用する言語を使うものの宿命というか,日本語とURIの相性の問題があって仕方が無いのかもしれません(日本語に関する話題は後ほど考えたいと思います)。

 では,日本のブログ・サービスはどうなのか,というと,以下のような感じになっています。

http://hogehoge.blog35.fc2.com/blog-entry-273.html
http://blogs.yahoo.co.jp/hogehoge/7795790.html
http://blog.goo.ne.jp/hogehoge/e/e5b5d33907510b8ad4d6da90205418e2
http://hogehoge.seesaa.net/article/43403170.html
http://hogehoge.blog.shinobi.jp/Entry/70

 これをみると,エントリのIDらしきものを埋め込んでいる場合や,何らかのハッシュのキーや16進数っぽい何かが含まれるものなど,いくつかのパターンがありますが,ちょっと調べた限りでは,タイトルが入っているものはほとんどありませんでした。Bloggerのケースでもありましたが,日本語のタイトルが入力されやすい日本のブログ・サービスでは,タイトルをURIに入れるというのはあまり考慮されない,というか難しい感じがしますね。

 ただもう一つ,調べてみて意外だったのは,日付などが入っているものも結構少なかったことです。ブログの場合,日付という感覚をどれだけ強く意識させるのかということは,そのシステムの開発者や設計者によって異なるような気がしますし,特に開発をしていると日付よりも時系列に並んだ順番を意識しやすいのかもしれません。でもやっぱり日付情報の入っているものと並べて比較すると,日付情報だけでもあったほうが,ずっとわかりやすい気がします。

 ブログ・サービス内では,日付単位や月単位でエントリを一覧できるページが用意されているケースはもちろんありますが,「Permalink」単位でURLが流通しやすいので,それだけでは不十分です。また,検索エンジンの結果や,そのほか多くのリンクのされ方を見ても,タイトルは表示されているものの,そのタイトルには日付情報が含まれないケースも多く,URIでいつごろかかれたものなのかという情報を得る,という使い方ができるという意味でも,URIに日付を入れる意味は大きいと思います。

WikiのURI生成ルール

 URIを自動生成するサービスとして,もう一つ代表的な例として「Wiki」をとりあげます。Wikiシステムとして最も有名なのはWikipediaですが,それ以外にもWikiのシステムで構築されているサイトは結構よく見かけます。

 Wikiシステムでは,(原則として)誰でも新しいページを作成することができ,そのURIはタイトルから生成されます。しかもWikiの場合は,「WikiName」という,先頭だけを大文字にした単語を二つ以上連結したキーワードをページのコンテンツ中に記述すると,それが自動的にそのタイトルのページへのリンクになる,という機能があります。

 つまり「DataSet」という言葉をWikiに記述すれば,「DataSet」という新しいページへのリンクが生成される(その時点でページが存在していなければ,その時点でページが生成されるのではなく,リンクをたどるとページ生成用の画面にアクセスできる)わけです。そして,Wikiのページの多くは,そのページのタイトルを含むURIを生成します。そしてそのため,URIでは大文字と小文字が区別されています。

 例えばWikipediaでは,その百科事典的な性格上,WikiNameが積極的に利用されていませんが,「DocBook」という項目を表すページは以下のようになっています。

http://ja.wikipedia.org/wiki/DocBook

 そしてこのページには以下のURIではアクセスできません。

http://ja.wikipedia.org/wiki/Docbook

 URIにおいては,大文字小文字は区別しなうほうがいい,という話は第20回でも触れており,例えば大文字,小文字にかかわらず同じコンテンツを表示したり,最も正確な表記のURIにリダイレクトしたり,といったほうが使いやすいとされていました。実際そういう処理を入れるのは結構簡単だと思うのですが,Wikipediaはあえて「言葉の厳密性」を重視して,そうしたことをしていないのかな,と思います。いろいろ調べていくと,先頭の文字だけは大文字でもどちらでもいいことになっていました。そして,英字のタイトルのページ(英語版のWikipediaなどを見ると明らかです)では,ほとんどのページの先頭が大文字になっていて,このあたりも,百科事典であるがゆえの書き方のルールのようなものの影響を受けているように思います。

 このことからわかるのは,大文字小文字を区別するかどうか,といったことにはそのサイトの思想や性格も関係してくるので,どういう目的や考え方でサイトを運営していくのかによって,“正しいやり方”は異なっている,ということです。こうしてほかのサイトのルールを調べてみると,そこにある考え方や世界観を垣間見えて面白いなあ,と思います。

 なお,Wikipediaでは,単語の区切りの半角スペースは「+」や「%20」ではなく「_(アンダースコア)」になるようになっていました。これはブログのタイトルからのURI生成の際に見られた「-(ハイフン)」と同じように,単語の区切りとして人間が識別しやすい文字で,なるべくURIを見やすくしようとしていることも伝わってきますよね。

日本語とURIの関係

 さて,続いてURIに日本語の関係について考えてみたいと思います。ここまで,URIにタイトルやその内容を表す言葉を入れるとわかりやすい,という事を見てきましたが,日本人の多くは普段日本語で話し,読み書きをしていますから,ページのタイトルだって日本語でつけることが多くなります。

 しかし,タイトルが日本語だから,URIも日本語にしたらわかりやすいか,というとそうではないわけです。URIに日本語が入っている場合,たいていはこんな感じになっちゃいます。

http://ja.wikipedia.org/wiki/%E6%A2%85%E9%9B%A8

 これは,Wikipediaの「梅雨」というページのURIです。すでに述べたとおり,Wikiはシステム上,タイトルがそのままURIに含まれるため,日本語でタイトルをつけたページはこのような感じになってしまいます。

 これはいわゆるURL(URI)エンコーディング(RFC 3986では「Percent-Encoding」と呼ばれています)と呼ばれるデータ変換によって,日本語(というよりもURIで使えない文字)を文字コードに変換して1バイトごとに「%」をつけて表すことで,すべてURIで使える文字で表現する手法です。と書くと仰々しいですが,ウェブ・アプリケーションを作っていれば,かなりおなじみですよね。

 そして,この日本語が入ったURIは,長くてものすごく読みづらい,覚えづらいという特徴を持っています。なぜ読みにくいのかといえば,何が書いてあるのかわからないからです。文字コードの一覧が頭に入っている人というのはなかなかいないと思います。「%E6%B8%8B%E8%B0%B7」という文字をぱっと見て「渋谷」だとわかる人がいたら,それはかなりすごい人です。筆者も,例えば「%20」が半角スペースだとか,「%25」が「%」だとか,というくらいは記憶していますけれど,文字種の多い日本語の文字はそもそも覚えようとしたこともありません。しかも,ここで使われるエンコード結果は,同じ文字でも文字コードが違えば変わってきます。例えばUTF-8では「渋谷」は「%E6%B8%8B%E8%B0%B7」ですが,EUC-JPなら「%BD%C2%C3%AB」です。ほかにもShift-JISの場合だってあるでしょうし,これをすべて覚えろというのもかなり無理な話ですし,第一あまり覚えても意味がありません。

 しかも「Percent-Encoding」で変換された文字は長いんですよね。日本語1文字が,UTF-8なら3バイトで表現されますから,エンコードすると9文字になってしまいます。ちょっと長い日本語をそのままURIに入れたりすると,ブラウザのアドレス欄から平気ではみ出してしまいます。しかも16進数で表されたデータですから,同じような文字の羅列になってしまって,手入力(URIを手で入力する機会も減ってきているとは思いますが)なんてかなり大変です。

 じゃあ,どうすればいいんでしょうか。

 一つの解決方法として考えられるのは,当たり前のことではありますが,URIに日本語の文字を入れないことです。とはいっても,手動でページを作る場合などには,URIは自由に決められますから,英語に訳したものをURIとして使う,何てこともできますが,機械的にページを増やす場合は,そうもいきません。

 例えば前述のBloggerは,タイトルがPermalinkのURIに入るのですが,英数字以外の文字だけでタイトルを構成した場合,以下のようなURIになってしまいました。

http://nanzou.blogspot.com/2007/04/blog-post_15.html

 この方法の場合,完全に日本語だけの場合,もはやURIからその内容を知ることはできなくなってしまいますが,一部でも英数字を使っているとそれが反映されるため,例えば「Wikipediaについて」というようなタイトルをつければ,「wikipedia」という単語だけはURIに含まれます。そうすれば,少なくともWikipediaについて語っていることだけはわかるわけで,全くタイトルと関係ない言葉だけで構成されるよりはかなり良いような気がします。さらに,「Percent-Encoding」された文字を入れるよりも,見やすくなるケースももしかしたら結構多いんじゃないかと思っています。

 もう一つの解決策として,ローマ字を使う,なんて方法もあるのかもしれません。例えば「春山登山」というタイトルだった「haruyamatozan」という言葉をURIに入れるというのはどうでしょうか。漢字かな混じりの文章をローマ字にすることができるライブラリとしては,KAKASIなどが有名ですが,こうしたものを利用すれば,テキストをローマ字に変換してURIに入れることも可能な気がします。

 でも実際は,あんまりそういうことをしているサービスって見たことがないです。それには,そもそもローマ字にしてもあまり読みやすくないし,日本語は(中国語なども)漢字も使っているおかげで同音異義語がたくさんあり,名前の衝突は避けられない,ということがあります。さらには,本気と書いてマジと読ませるなどの読ませ字の問題もあり,そもそもすべての漢字を完全に正しく読み仮名を振ってローマ字にできるかのどうか疑問が残ってしまいます。手間がかかる割にはいろいろ問題があるからなのかなあ,と思いますが,一方でそういう可能性を検討しても良いような気はしています。

 実はローマ字のことをここに挙げたことにはきっかけがあります。それは先日,現在ある音楽サービスを開発中だというアメリカ人とたまたまあって話す機会があったことです。彼は「日本人向けにユーザー名で日本語や漢字も使えるようにする」と言っていたので,ユーザーページのURIはどうするの?と聞いたところ,「大丈夫だ,きちんと考えてある。ローマ字に変換すればいいんだよ」と答えていました。

 そこで「でも日本語は違う漢字で同じローマ字になるケースが結構あるから難しいかもしれない」という話をしました。ユーザー名の場合は,太郎と太朗のように同音異字のケースがたくさん出てきそうで難しいだろうなあとそのときは思ったのですが,その後でよくよく考えてみると,URI用にローマ字に変換する,という方法はあるよなあ,と思った次第です。

 ただ結局,日本語のタイトルからURIを生成する美しい方法って完璧なものはなくて,どこかで妥協をしなければならないのかもしれません。英数字以外を除去したり,ローマ字にしたり,といったことをしないのであれば,URIに日本語などの文字を入れるときにできる対策としては,UTF-8にすることくらいかなあ,と思っています。

 なぜUTF-8なのかというと,世界中の文字を表現できるコードである,ということだけでなく,二つの理由があります。