URLの構造を理解する|スキーム・ホスト・パス・クエリ・フラグメントの役割
URLは、Web上のリソースの「住所」を表す文字列です。一見すると記号の多い複雑な並びに見えますが、実はスキーム・ホスト・パス・クエリ・フラグメントといった意味のある部品に分かれています。本記事では、URLの構造を各部の役割からパーセントエンコーディング、絶対URLと相対URLの違いまで、順を追ってやさしく解説します。
「https://waza.tools/tools/url-parser/?lang=ja#result」のような文字列を、ブラウザのアドレスバーで毎日のように目にしているはずです。これがURLです。一見すると記号と英数字が入り混じった複雑な並びですが、実は決められた順序で意味のある部品が並んだ、よく整理された構造を持っています。本記事では、URLがどんな部品から成り、それぞれがどんな役割を果たしているのかを順に解説します。
URLとは何か
URL(Uniform Resource Locator、統一資源位置指定子)とは、Web上にあるリソース(ページ・画像・APIなど)の「場所」を一意に指し示すための文字列です。郵便物を届けるための住所のように、「どの方式で・どのサーバーの・どの場所にあるものを取りに行くか」を1行で表現します。
より広い概念としてURI(Uniform Resource Identifier)という言葉もありますが、日常的に扱う「ブラウザでアクセスできるアドレス」はほぼURLだと考えて差し支えありません。URLの書式はRFC 3986という仕様で標準化されており、世界中のブラウザやサーバーが同じルールで解釈します。だからこそ、どの環境からアクセスしても同じリソースにたどり着けるのです。
URLの中身がどのように分解されるのかは、URLパーサーツールに実際のURLを貼り付けて、各部品に分かれて表示される様子を見るのが最もわかりやすいでしょう。
URLの構造:5つの部品
典型的なURLは、大きく分けて次の5つの部品で構成されます。
https://example.com:443/path/to/page?key=value#section
| 部品 | 例 | 役割 |
|---|---|---|
| スキーム | https | 通信方式・プロトコルを指定 |
| ホスト | example.com | 接続先のサーバー(ドメイン名) |
| ポート | 443 | サーバー内の接続口の番号 |
| パス | /path/to/page | サーバー内でのリソースの位置 |
| クエリ・フラグメント | ?key=value#section | 追加パラメータと位置指定 |
スキーム
スキームは、URLの先頭にある「https」「http」「ftp」「mailto」などの部分で、「どの方式でリソースにアクセスするか」を表します。直後に「://」が続くのが一般的です。Webページでは、通信を暗号化するhttpsが現在の標準です。暗号化されない http は、扱う情報によってはセキュリティ上のリスクがあります。
ホスト
ホストは「example.com」のような部分で、接続先のサーバーを示すドメイン名です。実際の通信ではこのドメイン名がDNSによってIPアドレスに変換され、対応するサーバーへ接続されます。先頭に「www.」などのサブドメインが付くこともあります。
ポート
ポートは、サーバー上の「接続口」を表す番号です。httpは80番、httpsは443番が既定値として決まっており、これらの標準ポートを使う場合は省略されるのが普通です。そのため、日常的に見るURLではポート番号が書かれていないことがほとんどです。
パス
パスは「/path/to/page」のように、サーバー内のどの場所のリソースかを示す部分です。ファイルシステムのフォルダ階層に似た形で、スラッシュ区切りで階層を表現します。Webサイトの個々のページは、多くの場合このパスによって区別されています。
クエリ文字列とフラグメントの役割
パスの後ろには、さらに2種類の補足情報を付け加えられます。クエリ文字列とフラグメントです。
クエリ文字列(? と &)
クエリ文字列は、パスの後ろに「?」を付けて始まる部分で、サーバーへ渡す追加のパラメータを表します。基本の形は「キー=値」で、複数のパラメータは「&」でつなぎます。
?keyword=url&page=2&sort=new
この例では、keyword・page・sort という3つのパラメータを渡しています。検索ワードや絞り込み条件、ページ番号などを伝える用途でよく使われ、同じパスでもクエリの内容によって表示結果を変えられます。各値に日本語や記号を含めるときは、後述するパーセントエンコーディングが必要になります。
フラグメント(#)
フラグメントは、URLの末尾に「#」を付けて始まる部分で、ページ内の特定の位置(見出しや要素)を指し示します。たとえば「#section」とあれば、そのページを開いた際に該当箇所までスクロールします。
フラグメントの重要な特徴は、サーバーには送信されず、ブラウザ側だけで処理される点です。クエリ文字列がサーバーに渡される「条件」であるのに対し、フラグメントはあくまでクライアント内での「ページ内位置の指定」だと理解すると、両者の違いが整理しやすくなります。こうしたクエリやフラグメントの切り出しも、URLパーサーツールを使えば一目で確認できます。
パーセントエンコーディングの仕組み
URLには、英数字と一部の記号しかそのまま使えないという制約があります。スペースや日本語、「&」「?」「#」のようにURL自体で特別な意味を持つ記号を値の中に含めたい場合は、パーセントエンコーディング(URLエンコード)という変換が必要です。
これは、対象の文字をいったんバイト列に変換し、各バイトを「%」に続く2桁の16進数で表す方式です。たとえば半角スペースは「%20」、日本語の「あ」はUTF-8では「%E3%81%82」になります。
- エンコード:そのままでは使えない文字を「%XX」形式に変換すること。
- デコード:「%XX」形式を元の文字に戻すこと。
クエリ文字列に検索キーワードを入れるときや、リンクを正しく生成するときには、このエンコードが欠かせません。エンコードを忘れると、値の途中の「&」や「#」が区切り記号と誤解され、URLが意図通りに解釈されないことがあります。文字列が正しくエンコード・デコードされているかを確かめたいときは、URLエンコードツールで実際に変換して結果を見比べてみてください。日本語を含む文字列がどのような「%XX」の並びになるかを体感できます。
絶対URLと相対URLの違い
URLには、すべての部品を含む絶対URLと、一部を省略してその場所からの相対的な位置だけを示す相対URLがあります。
| 絶対URL | 相対URL | |
|---|---|---|
| 例 | https://example.com/blog/article | /blog/article、../article |
| スキーム・ホスト | 含む | 省略する |
| 基準 | 単体で場所が確定 | 現在のページを基準に解決 |
絶対URLは、スキームからパスまですべてを含み、それ単体で世界中のどこからでも同じリソースを指します。外部サイトへのリンクや、メール・SNSなどページ外で共有するURLには絶対URLが必要です。
相対URLは、スキームやホストを省略し、「いま見ているページの場所」を基準に解釈されます。「/blog/article」のようにスラッシュで始まればサイトのルートからの位置、「../article」のように「../」で始まれば一つ上の階層を指す、といった具合です。同じサイト内のリンクでは相対URLを使うと、ドメインが変わっても書き換えずに済むという利点があります。
実際にURLを分解してみる
ここまでの知識は、実際のURLを手で分解してみると一気に定着します。手元のブラウザのアドレスバーから1つURLをコピーし、頭から「スキーム」「ホスト」「ポート」「パス」「クエリ」「フラグメント」の順に当てはめてみましょう。「://」の前がスキーム、最初の「/」までがホスト(とポート)、「?」までがパス、「#」までがクエリ、その後ろがフラグメント、と区切りの記号を目印に切り分けるのがコツです。
とはいえ、長くてパラメータの多いURLを手作業で分けるのは骨が折れます。そこで便利なのが、URLパーサーツールです。URLを貼り付けるだけで各部品に自動で分解して一覧表示してくれるので、どの記号がどの部品の境界になっているのかが直感的に理解できます。クエリ文字列が複数のキーと値に展開される様子も確認できます。
あわせて、検索キーワードのように日本語や記号を含む値をクエリに入れたい場合は、URLエンコードツールでその値をパーセントエンコードしてから組み込みます。エンコード前後の文字列を見比べれば、「あ」が「%E3%81%82」に、スペースが「%20」に変わる様子がはっきり分かるはずです。分解と変換の両方を実際に手を動かして試すことが、URL構造を理解する一番の近道です。
URLは、スキーム・ホスト・ポート・パス・クエリ・フラグメントという部品が決まった順序で並んだ、論理的な構造を持つ文字列です。各部品の役割とパーセントエンコーディングの仕組みを押さえれば、リンクの作成やAPIの利用、トラブルの原因究明まで、Webにまつわる多くの作業がぐっと楽になります。
なお本記事は一般的な情報の提供を目的としたものです。URLの仕様や挙動は環境や実装によって細部が異なる場合があるため、最新の公式情報を確認のうえ判断してください。
よくある質問
URLとは何ですか?
URL(Uniform Resource Locator)とは、Web上にあるページや画像、APIなどのリソースの「場所」を一意に指し示す文字列です。郵便の住所のように、どの方式で・どのサーバーの・どの場所にあるものを取りに行くかを1行で表します。スキーム・ホスト・ポート・パス・クエリ・フラグメントといった部品で構成されています。
クエリ文字列とフラグメントはどう違いますか?
クエリ文字列は「?」で始まり「キー=値」を「&」でつなぐ、サーバーへ渡す追加パラメータです。検索条件やページ番号などに使われます。一方フラグメントは「#」で始まり、ページ内の特定の位置を指します。フラグメントはサーバーには送信されず、ブラウザ側だけで処理される点が大きな違いです。
パーセントエンコーディングはなぜ必要ですか?
URLには英数字と一部の記号しかそのまま使えない制約があるためです。スペースや日本語、「&」「?」「#」のようにURLで特別な意味を持つ記号を値に含めたい場合は、各バイトを「%」+2桁の16進数で表すパーセントエンコーディングが必要です。これを忘れると区切り記号と誤解され、URLが正しく解釈されないことがあります。
絶対URLと相対URLはどう使い分けますか?
絶対URLはスキームからパスまですべてを含み、それ単体でどこからでも同じリソースを指します。外部サイトへのリンクやメール・SNSでの共有には絶対URLが必要です。相対URLはスキームやホストを省略し、現在のページを基準に解釈されます。同じサイト内のリンクでは相対URLが便利です。
URLパーサーやURLエンコードツールに貼り付けたURLはサーバーに送信されますか?
WAZA TOOLSのURLパーサーおよびURLエンコードツールはすべてブラウザ内で処理され、入力したURLや文字列がサーバーに送信・保存されることはありません。スマートフォンでも利用でき、何度でも無料でURLの分解やエンコード・デコードを行えます。