0Pricing
Vue Academy · レッスン

ルートメタフィールドと型付け

meta: { requiresAuth: true }、型付きmetaのためのTypeScript宣言マージ

「ルートメタフィールドと型付け」はCoddyKit上の無料Vue Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはVue Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Vue Academyコースには全4レッスンが含まれています。

ルートメタフィールドとは

すべてのルートには meta オブジェクトを持たせられます。これはルートに関連付ける任意のデータです。認証要件、許可するロール、ページタイトル、レイアウトの選択などのフラグに最適です。

ルートにメタデータを追加する

ルートレコードに meta キーを設定します。値は自由に決められます。

const routes = [
  {
    path: '/dashboard',
    component: Dashboard,
    meta: { requiresAuth: true, roles: ['admin', 'editor'] }
  }
]

ガードでメタデータを読み取る

最も一般的な用途はナビゲーションガードです。router.beforeEach はすべてのナビゲーションの前に実行され、対象ルートを受け取ります。その meta を調べることができます。

router.beforeEach((to, from) => {
  if (to.meta.requiresAuth) {
    // check login
  }
})

認証されていないユーザーをリダイレクトする

リダイレクトするには、ガードからルートロケーションを返します。false を返すとナビゲーションがキャンセルされ、何も返さないか true を返すと許可されます。

router.beforeEach((to) => {
  const auth = useAuthStore()
  if (to.meta.requiresAuth && !auth.isLoggedIn) {
    return { path: '/login' }
  }
})

ロールベースのアクセス制御

roles メタフィールドと現在のユーザーのロールを組み合わせて、権限に基づいてページへのアクセスを制限します。

router.beforeEach((to) => {
  const auth = useAuthStore()
  const roles = to.meta.roles
  if (roles && !roles.includes(auth.role)) {
    return { path: '/forbidden' }
  }
})

メタデータは親からマージされる

ネストされたルートは、to.meta を通じて親のメタデータを継承します。これは一致したすべてのレコードをマージしたものです。子ルートでは、同じキーを上書きしない限り親のメタデータが見えます。

型付けに関する問題

デフォルトでは、TypeScript は meta を空のオブジェクトとして型付けするため、to.meta.requiresAuth でエラーになります。これを解決するには、Vue Router の型に対して宣言マージを行います。

型付きメタデータを宣言する

vue-router の RouteMeta インターフェースを拡張します。これを .d.ts ファイル、または export {} を含む任意のモジュールに記述します。

import 'vue-router'

declare module 'vue-router' {
  interface RouteMeta {
    requiresAuth?: boolean
    roles?: string[]
  }
}

export {}

これでメタデータが型チェックされる

拡張後は、コンパイラーが meta の構造を認識します。requireAuth のようなタイプミスが検出され、オートコンプリートも機能します。

router.beforeEach((to) => {
  if (to.meta.requiresAuth) { /* typed as boolean | undefined */ }
})

コンポーネントでメタデータを使う

コンポーネント内では、useRoute() を通じて現在のルートのメタデータを読み取れます。拡張のおかげで、これにも型が付きます。

import { useRoute } from 'vue-router'
const route = useRoute()
const secure = route.meta.requiresAuth

ページタイトルにメタデータを使う

よく使われる方法は、メタデータに title を保存し、グローバルガードから document.title に設定することです。

router.afterEach((to) => {
  if (to.meta.title) document.title = to.meta.title
})

理解度チェック

ルートメタデータと型付けについての知識を確認します。

まとめ

ルートメタフィールドには、ルートごとのデータを格納します。

  • ルートレコードにメタデータ(requiresAuth、roles、title)を定義します。
  • router.beforeEach で読み取り、ナビゲーションを制御します。
  • メタデータは親ルートから子ルートへマージされます。
  • vue-router の RouteMeta に対する宣言マージで型付けします。

よくある質問

「ルートメタフィールドと型付け」レッスンは無料ですか?

はい。「ルートメタフィールドと型付け」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Vue Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Vue Academyコースには全4レッスンが含まれています。

「ルートメタフィールドと型付け」で何を学びますか?

meta: { requiresAuth: true }、型付きmetaのためのTypeScript宣言マージ ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Vue Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのVue Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「ルートメタフィールドと型付け」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このVue Academyレッスンでコードを書いて実行できますか?

はい。すべてのVue Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ルートメタフィールドと型付け
  2. ルート遷移とアニメーション
  3. スクロール動作の設定
  4. プログラムによるナビゲーションとuseRouter
← Vue Academyに戻る