クールな URL の心得 - Knowledge of Cool URLs

このエントリーをはてなブックマークに追加

文責
@debiru_R
作成日
2024年7月5日

クールな URL とは?

クールな URI とは変わらないもののこと。

どんな URI が変わってしまう?

URI は変わらない:人がそれを変更するのだ。

クールなURIは変わらない -- Style Guide for Online Hypertext

URI と URL

元々 Web のアドレスは URL と呼ばれていました。ティム・バーナーズ=リーが 1991 年に発表した論文では Universal Resource Locator と命名されましたが、後に Uniform Resource Locator の略であると改定されています。RFC 1808 までは URL という語が使われていましたが、1990 年代中頃に URL に加えて名前である URN (Uniform Resource Name) とそれらの総称である URI (Uniform Resource Identifier) が提唱され、1998 年に公開された RFC 2396 以後では仕様上は専ら URL ではなく URI が使われるようになりました。URN は scheme が urn の URI で、URL はそれ以外の URI と決められました。

2000 年代中頃、HTML5 の策定を進めていた WHATWG (Web Hypertext Application Technology Working Group) は、一部の専門家コミュニティ内でしか通用しない URI や URN といった語を排除し、市民権を獲得していた URL という呼称を URI に代えて再定義しました。それに伴い 2010 年代には URI の仕様書に代わる URL Standard が公開されました。

こうした経緯があるため、URL, URN, URI の区別の議論は意味を成さないものになっています。Web のアドレスおよび URN と呼ばれていたものの総称として URL という語が再定義され、今となっては URL は何かの略語ではなく URL という一単語として扱われています。

第一原則:ドメイン名をタイポしてはいけない

URL は典型的にはスキーム(プロトコル)、ホスト名(ドメイン名または IP アドレス)、パス以降のパーツによって構成されています。

https://example.com/about/url/

このうち、ドメイン名は URL の所在地を表す一意な識別子であり、エンドユーザーはドメイン名を見て、そこが本当に訪れたい URL なのかどうかを判断しています。

例えばあなたが「株式会社 新宿新聞」のオーナーであるとしましょう。この例は今思い浮かべたものですが、調べてみると「株式会社 新宿区新聞社」というのが実在するようです。ここでは実在する企業の事情は関係せず、あくまで説明の例として紹介していることをお断りしておきます。

あなたの会社(新宿新聞)の Web サイトを公開するためにドメイン名を用意しようという話になりました。あなたならどのようなドメイン名を用意するでしょうか。

  • (1) shinjuku-shimbun.co.jp
  • (2) shinjuku-shinbun.co.jp
  • (3) shinjuku-shinbune.co.jp
  • (4) shinjyuku-shinbun.co.jp
  • (5) sinzyuku-sinbun.co.jp

ヘボン式のローマ字表記に精通している人であれば、どれが適切かはすぐに判断できるでしょう。URL の文字列には「英語表記」あるいは「ヘボン式表記」を採用することが望ましく、一部の例外を除いて「訓令式表記」を使うことは推奨されません。

(2) が正解だと思った人はどのくらいいるでしょうか。最も適切なドメイン名は (1) です。(1) だと思えなかった人はヘボン式について学んでください。

(2) は、非常にそれっぽいのですが、新聞の綴りが shinbun になっています。正しいローマ字表記は shimbun です。

(3) は、衍字があります。「しんぶん」ではなく「しんぶね」になっています。たまにこうした誤字・脱字・衍字のあるドメイン名を使っている人がいますが、ドメイン名に誤字・脱字・衍字があるというのは問題があるでしょう。

(4) は、「じゅ」のローマ字表記が間違っています。訓令式では zyu であり、ヘボン式では ju であるので、存在しない jyu という綴りを使っていることになります。この間違いを犯している実在企業もしばしば見かけます。

(5) は、訓令式で綴られています。(1) と (5) を見比べて、(5) をドメイン名として使いたいと思う人はいるでしょうか。総務省でも URL のパス部分について「組織」を sosiki と綴ったり、内閣府でも「国民の祝日」CSV データを巡り syukujitsu.csv というヘボン式と訓令式が混ざった表記を使うといった過ちを犯しています。

原則としては英語表記またはヘボン式のローマ字表記を使うべきですが、一部の単語、例えば「さんま」という語を入れたいときに、ヘボン式の規則通り samma とするか sanma とするかについては議論の余地があります。

タイポスクワッティングを予防せよ

タイポスクワッティング (Typo; 打ち間違い) (Squatting; 占有) とは、エンドユーザーの URL (ドメイン名)の入力ミスを利用して、攻撃者が用意した偽サイトへと誘導する攻撃のことです。例えば、三菱UFJ銀行 https://www.bk.mufg.jp/ の URL によく似た https://www.bk.mufj.jp/ を用意して、そこに偽のログイン画面を設置した場合、エンドユーザーが誤って偽サイトの方にアクセスして情報を入力すると、攻撃者に入力した情報が漏洩してしまいます。

運営主体が企業であるならば特に、こうしたエンドユーザーが間違いやすいドメイン名は確保し、攻撃者の手に渡らないように予防することが望まれます。他の例として、銀だこの公式サイトはどうでしょう。本物の公式サイトは https://www.gindaco.com/ ですが、https://www.gindako.com/ は誰でもドメイン名を登録できる状態になっています。

タイポスクワッティング攻撃のことを考えると、なおさら公式サイトのドメイン名が「正しい」綴りになっていることの重要性が分かります。エンドユーザーは「正しそう」な URL を公式サイトだと認識するものです。その URL のドメイン名の綴りが「変」であるとこうした攻撃を誘発してしまうことにも繋がるのです。

第二原則:パスの末尾に拡張子またはファイル名をつけてはいけない

https://example.com/about/url/

という URL でアクセスできる Web ページがあったとしましょう。これが、次のような URL だったらどうなるでしょうか。

https://example.com/about/url/index.html

ただ長くなっただけ、ではありません。この URL では index.html ファイルの存在に依存してしまうことになります。サーバーサイドでフレームワークを導入して Web サイトの配信を(例えば)PHP で行うようにした場合、もしかしたらファイル名は index.php になるかもしれません。そのコンテンツを表す URL として、拡張子情報は果たして重要なのでしょうか。――いいえ、重要ではありません。

フレームワークを導入するといったサーバーサイドの構造の変化によって、コンテンツに対応する URL が変化するというのは好ましくありません。リンク切れを起こすような状況は最悪です。少なくとも変更前から変更後へのリダイレクト処理を実施すべきですが、最初からこのセクションの冒頭で示したようなクールな URL 設計を行っていればそんなことをするまでもなく何の問題も生じません。

第三原則:フレームワークに依存したパス名を使うべきではない

典型的なのが WordPress を使って開発されたサイトです。エンドユーザーが HTML ソースコードを見るだけで「このサイトは WordPress を使っているんだな」と分かるケースがあります。テーマファイルを独自開発する程度の技量は求められますが、テーマを独自開発しておきながら URL のことを何も考えていないサイトも多々あります。管理画面上からアップロードされたファイルを参照するための URL に /wp-content/ などという文字列が含まれていませんか。これらを隠蔽するように URL 設計するだけでも URL をクールに保つことができます。

第四原則:属性型ドメイン名を正しく使うべきである

一般に、ドメイン名は誰でも登録できるものですが、一部のドメイン名は登録するのに条件が必要なものがあります。例えば .co.jp ドメイン名は企業としての実在証明が必要だったり、.lg.jp ドメイン名は地方公共団体向けのものであり一般人がドメイン名を登録することはできないようになっています。

属性型ドメイン名を使うと、そのドメイン名の末尾(サフィックス)を見るだけで、前述の通り「本物の地方公共団体のドメイン名かどうか」といったことが判断できるようになります。一方で、一般人が誰でも登録できる .jp のような汎用ドメイン名が使われていると、そのドメイン名が本当に信頼できるのかどうかを別途確認する必要が生じてしまいます。

政府や地方公共団体の中には .go.jp.lg.jp といった属性型ドメイン名を使う資格があるにも関わらず、汎用ドメイン名を使ってしまっているケースがあります。これではエンドユーザーの安全性を向上させることはできず、タイポスクワッティングなどの攻撃に脆弱な状態となってしまいます。

第五原則:新しいドメイン名を気軽に登録してはいけない

あなたがある組織やサービスで既にドメイン名を使っている場合、その組織やサービスに関連するコンテンツを新たに展開する際に新しいドメイン名を登録して使うべきではありません。しばしば、キャンペーンサイトなどを作る際に、ドメイン名の新規登録を行ってしまうケースが散見されます。

ドメイン名を複数使うべきではないという意味ではありません。計画的に、ある組織やサービスにおいて複数のドメイン名を登録してブランディングすることは問題なく、例えば shinjuku-shimbun.co.jp の他に shinjuku-shimbun.jp を登録して利用していくことはむしろ合理的でしょう。

すべきではないのは、例えばリクルート関連のコンテンツを展開するに当たって、recruit-shinjuku-shimbun.jp のようなドメイン名を使うケースです。こうした単語の追加を行ったドメイン名は使うべきではありません。ドメイン名は一度登録されたら使わなくなった後でも保守し続ける必要のあるものです。そうでなければ、後から第三者に同じドメイン名を使われてしまう(ドロップキャッチされる)危険性があり、ブランドに対する信用を毀損してしまうことにも繋がりかねません。

ではどうすればいいかというと、サブドメインを使うのです。recruit.shinjuku-shimbun.jp のようなサブドメインを利用すれば、ドメイン名の信用性については shinjuku-shimbun.jp が信用できるか否かについて確認すればよくなります。(サブドメインハイジャックという種類の問題は別にありますが、今はそれについて考慮する必要はないでしょう。)サブドメインを使うようにすれば、いくつキャンペーンサイトが増えようとも登録上管理すべきドメイン名は一つにすることができます。

第六原則:URL を記述する場合は正規化された URL にすべし

例えば Twitter (X) で投稿 URL をシェアしようとするとき、次のような URL が生成されることがあります。

https://x.com/debiru_R/status/1809151723728232759?s=46&t=1LUTk-yBKr2ZAkhtsPdfDQ

このような URL を見たとき、何も考えずにその URL を使うべきではありません。このクエリストリングは何なのか、疑問を持つことが大事です。無意味に URL を複雑にすべきではありません。シンプルな URL に変換できるのであれば、正規化されたシンプルな URL を使いましょう。

https://x.com/debiru_R/status/1809151723728232759

これが正規化された投稿 URL です。

もう一つ、典型的な例が Amazon の商品 URL です。

https://www.amazon.co.jp/Amazonギフトカード-1_JP_Email-Eメールタイプ-テキストメッセージにも送信可-Amazonベーシック/dp/B004N3APGO/ref=sr_1_1?crid=3TD6AC0P0Y3W3&dib=eyJ2IjoiMSJ9._Kh44KfSe1n1wAnm4KGms_iUidFuGFy_mwq6HB8b2xN8zh8JfT3XSFkTCqaCk37ZQSjNoFowmkwROaycoMu-hzOcq8vCH2QmrWX-NnXQXnm4q-LEFkaEbJtqJ7bl8baInpZNUBDFhHc7QytEmXtfKFAg9AtU70sTeTypieuy_kLYkejH51GOaE2EyAR6c-rWLN9uduVhtFPc4_7DqfvA4cObT2bFLVHFN5lHnMzJ0NkxL2rQU3pk43CMBKFRZ4vZ8shi26SO5YYBJf6Zu1g_bHPe9cZ8qKLugItxGdgBiQ8.ORjRYWG8BBuCNTn3f8Xkyd5nyg3l6jI0ItZwZV5hgP8&dib_tag=se&keywords=amazonギフトカード&qid=1720235748&sprefix=amazon%2Caps%2C182&sr=8-1

このような(実際にはパーセントエンコーディングされてより長くなる)URL をチャットツールなどに貼ってしまっていたりしないでしょうか。そういうことをしてはいけません。URL を貼る前に、不要なパラメータが付いていないのかについて疑問を持つべきです。Amazon の商品 URL は次のように正規化できます。

https://www.amazon.co.jp/dp/B004N3APGO

Amazon の商品 URL に関しては、/dp/*** 部分のみをパスとすることで正規化された URL を得ることができます。

URL を記述する場合は正規化された URL を使ってください。さもなくば優秀なエンジニアから冷たい目で見られることでしょう。

最後に

クールな URL は変わらない。

一度展開した URL は 20 年経とうが利用できるべきなのです。それが World Wide Web のあるべき姿であり、HTML コンテンツの真髄なのです。そのためにはドメイン名も保守され続けなければなりません。あなたは新規登録したドメイン名を何年先まで保守する自信があるでしょうか。

組織にしても個人にしても、ドメイン名を登録して利用するという状況においては、ドメイン名の計画的な管理が必要になります。そしてそれは、ドロップキャッチを防ぐことも含め未来永劫に及ぶ保守が必要になることを覚悟すべきなのです。