icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【Vue.js】ライブラリVue Routerを導入してSPA(シングルページアプリケーション)を作ってみる

更新: 2025/07/07 2322文字

今回はVue.jsにルーティング用のライブラリVue Routerを導入し、SPA(シングルページアプリケーション)を作ってみます。管理人は以前、PHPとGETパラメータで内容を切り替えるSPAを作りましたが、検索エンジンが登録せず大変でした。今度はvueでやってみます。さっそくやりかたを確認していきましょう。

Vue.js用ライブラリ Vue Routerとは?

Vue Routerは、Vue.js用のルーティング制御ライブラリです。具体的には、vueアプリケーションに以下のような機能を持たせることができます。

・ルート(URLパス)ごとに表示するコンポーネントを設定
・パラメータを含むルートも設定
・ルートの中に子ルートを持つ(入れ子)
・ナビゲーションリンクの作成
・Historyモード or Hashモード履歴管理

今回管理人は『コンポーネント設定・ナビゲーションリンク・Hashモード履歴管理』あたりを使用してきます。公式ドキュメントはありますが英語です(ブラウザで翻訳して読んでみましょう)。

Vue RouterでSPA・コード例及びポイント

コードはこんな形に。CSSなどは省略しています(後述のサンプルページではpタグにマージンついてるなど)。id="vueApp"の要素にマウントします。router-link toの要素にはナビのリンク、router-viewの要素にはcomponentで設定した内容が入ります(urlによって切り替わる)。

またcdn.jsdelivr.netから、vueの本体と、ライブラリVue Routerを読み込みしています。そのほかのポイントとして、ルーターインスタンス部分で履歴モード設定というのがあります。以下の部分です。

const router = VueRouter.createRouter({
  history: VueRouter.createWebHashHistory(),
  routes,
});

『createWebHashHistory()』の記載で履歴モードがHashになります。こちらのモードだと設定がラクそうです。
あとはいつものように『createAppでVueインスタンス作成・app.use(router)でルーター登録・id要素にマウント』といった流れです。

表示例

では早速動作確認してみます。まずはトップページ。 『path: '/'』で設定したcomponentの文章が表示されました。url後ろの#はハッシュモード由来と考えられます。

productページ。『ドメイン/test/2025-0701vueSpa/#/product』というurlになります。 『path: '/product'』で設定したcomponentの文章が表示されました。

次に、存在しないurlの処理。『ドメイン/test/2025-0701vueSpa/#/ttttt』はルーティングを設定していないページです。 『ページが見つかりません。』の表示を出すようにcomponentの文章を書いていたので、こちらもOKですね。

今回作ったvueアプリは、以下のurlで見れるようにアップしておきましたので、こちらもご確認ください。

index.htmlなどのファイルで行う場合は?

上記の例ではルートごとにcomponentの文章を書いていましたが、これを『ルートごとにhtmlファイルを切り替えたい』というケースがあるかもしれません。componentに渡す定数に、以下のようなファイルをfetchする内容をつける感じでしょうか。

async mounted() {
  const res = await fetch(`components/${file}.html`);
  const html = await res.text();
this.$el.innerHTML = html;
}

このタイプのサンプルはまだ作っていないんですけど、管理人がなんか自社サービスサイトを作るときは、こっちの方法でやろうかなと思っています。

あとがき・まとめ

  • Vue.jsとVue RouterでSPAを作ることができる
  • 基本的にはパスごとにcomponentsの中身を書いてrouterインスタンスに渡す形に
  • Vue Router履歴管理にはHistoryモード/Hashモードがある
  • ルートごとにhtmlファイルを切り替えるときはファイルをfetchする

まとめると、こんなところでしょうか。想像していたよりはシンプルだったかなという印象です。


【カテゴリ】- javascript/jQuery、その他
【タグ】-

関連記事