【JavaScript入門】アドレス情報の取得

 Web アプリが「今どの URL にいるのか」を知り、履歴を自在に操作できれば、ページ遷移や SPA(Single‑Page Application)の状態管理がぐっと楽になります。ブラウザは location オブジェクトでアドレス情報を、history オブジェクトで履歴スタックを公開しています。ここでは両者の代表的なプロパティ/メソッドを整理し、サンプルで URL を動的に書き換える仕組みを体験します。

1.location で現在 URL を読む・書く

プロパティ戻り値主な用途
hrefURL 全体読: 現在の完全 URL書: 代入するとその URL へ遷移
protocolhttps: などスキーム判定
hostnameexample.comドメイン判定
pathname/path/fileルーティング
search?key=valueクエリ解析
hash#section1アンカー制御

例 ― Google 検索 URL を分解

1.Chromeを起してURLに「https://www.google.com/search?q=a」を入力します。

2.「F12」キーを押して、DevToolsを起動します。

上の赤枠のところに以下のコードを入力します。

console.log(location.protocol); // https:
console.log(location.hostname); // www.google.com
console.log(location.pathname); // /search
console.log(location.search);   // ?q=a

するとConsoleに次のように表示されます。

Consoleの出力内容

https:
www.google.com
/search
?q=a

2.location の遷移メソッド

メソッド説明
assign(url)引数 URL へ遷移(履歴に残る)
replace(url)引数 URL へ遷移(履歴を置換)
reload(force)現在ページを再読込。true で強制リロード

location.href = 'https://example.com' と代入する方法も assign と同じ動きをします。

3.history で履歴スタックを操作

メソッド説明
back() / forward()1 ページ戻る / 進む
go(n)相対 n ページ移動(-1 は戻る、1 は進む)
pushState(state, title, url)履歴にエントリ追加し、見かけ上 URL 変更
replaceState(state, title, url)現在エントリを置換
state (プロパティ)現在エントリに保存したオブジェクトを取得

 pushStatereplaceState はページ再読み込みなしで URL を変えられるため、SPA のルーティングに欠かせません。

4.実践サンプル ― SPA 風ルーティング体験

ファイル名: spa_router_demo.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>アドレス情報の取得デモ</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<style>
body{font-family:sans-serif;margin:2rem}
#view{margin-top:1rem;padding:.8rem;border:1px solid #ccc}
button{margin-right:.5rem;padding:.3rem .8rem}
</style>
</head>
<body>
<h2>📍 SPA 風ルーター</h2>
<button data-page="home">Home</button>
<button data-page="about">About</button>
<button data-page="contact">Contact</button>
<div id="view">Home ページです</div>

<script>
(() => {
  const view = document.getElementById('view');

  // ページ名→表示文の簡易マップ
  const pages = {
    home:    'Home ページです',
    about:   'About ページです',
    contact: 'Contact ページです'
  };

  // 画面描画 + 履歴追加
  function navigate(page, replace = false) {
    const url = `?page=${page}`;
    const state = {page};
    replace
      ? history.replaceState(state, '', url)
      : history.pushState(state, '', url);
    render(page);
  }

  // 表示だけを更新
  function render(page) {
    view.textContent = pages[page] ?? '存在しないページ';
  }

  // 初期表示(URL 直打ち対策)
  const initPage = new URLSearchParams(location.search).get('page') || 'home';
  navigate(initPage, true); // replaceState で履歴置換

  // ボタンクリックでページ切替
  document.body.addEventListener('click', e => {
    if (e.target.dataset.page) navigate(e.target.dataset.page);
  });

  // 戻る/進む操作
  window.addEventListener('popstate', e => {
    const page = e.state?.page || 'home';
    render(page);
  });
})();
</script>
</body>
</html>

使い方

  1. いずれかのボタンを押すと pushState で URL が ?page=about などに変わり、表示も更新。
  2. ブラウザの戻るボタンで popstate が発火し、以前のページ表示に復元。

プログラム解説

処理説明
history.pushState({page}, '', '?page=xxx')ページ切替を履歴に追加
history.replaceState初期化時に履歴を汚さない
popstate イベント戻る/進む時に state からページ名を取得し再描画
location.search直接 URL を入力しても正しいページを表示

まとめ

  • 現在 URL の分解・書き換えlocation
  • 履歴スタックの制御history
  • pushState / replaceState を使うと、ページ再読み込みなしで URL だけを変えられ、SPA ルーティングが実現できる。

サンプルを動かし、ブラウザの戻る・進むで表示が切り替わる様子を確認してみてください。