導入
Web開発において、現在のページのドメインを取得したり、APIのエンドポイントを動的に切り替えたりするシーンは非常に多いです。よくある失敗として、正規表現を使ってURLからホスト名を抽出しようとして、複雑なURL構造でバグを生んでしまうケースがあります。そんな時、ブラウザ標準の URL.prototype.hostname を活用すれば、誰でも正確かつ安全にドメイン情報を取得できます。
基礎知識
URLオブジェクトは、Webブラウザの標準機能(URL API)であり、URL文字列を解析して構造化するツールです。そのプロパティの一つである hostname は、URLから「ドメイン名(またはIPアドレス)」のみを抽出して返します。
例えば「https://example.com:8080/path/to/page」というURLであれば、「example.com」の部分だけを綺麗に取り出してくれます。プロトコル(https)やポート番号(8080)、パス(/path/to/page)を個別に意識する必要がないため、非常に強力です。
実装/解決策
使い方は非常にシンプルです。まず、解析したいURLを引数にして new URL() コンストラクタを呼び出し、URLオブジェクトを生成します。その後、そのオブジェクトの hostname プロパティにアクセスするだけです。もしURLの形式が不正な場合はエラー(TypeError)がスローされるため、try-catch文で囲むことで、不正な入力によるアプリケーションのクラッシュを防ぐことができます。
サンプルプログラム
以下のコードは、入力されたURL文字列からドメインを安全に取り出し、特定の条件で処理を分岐させる実用的な例です。
/
- URLからホスト名を取得し、特定のドメインか判定する関数
応用・注意点
現場で活用する際の注意点は、ポート番号が含まれる場合です。hostnameプロパティは「ホスト名のみ」を返し、ポート番号は含まれません。もし「example.com:8080」のようにポート番号を含めて扱いたい場合は、host プロパティを使用してください。
また、localhost環境やIPアドレス(127.0.0.1)なども正確に抽出できるため、開発環境と本番環境の切り替え処理に非常に便利です。複雑な正規表現を書いてメンテナンスコストを上げるよりも、まずはブラウザ標準のURL APIで対応できないか検討するのが、モダンなフロントエンド開発の鉄則です。