SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【最新Nuxtアップデート解説】Nuxtの変更点まとめ

Vueベースのフレームワーク「Nuxt 4.3」までの大きな変更点──コンポーザブルやコンポーネント

【最新Nuxtアップデート解説】Nuxtの変更点まとめ 第2回

日時表示専用コンポーネントであるNuxtTime

 次に紹介するのは、バージョン3.17で新たに導入されたNuxtTimeコンポーネントです。NuxtTimeコンポーネントは、日時表示におけるハイドレーションミスマッチの解消を実現するコンポーネントです。

ハイドレーションミスマッチの温床となる時刻表示

 例えば、リスト5のコードがあるとします。単純にその時点の日時(Dateオブジェクト)を表示させるコードです。

[リスト5]no02/once/app/pages/index.vue
<script setup lang="ts">
const now = ref(new Date());
</script>
<template>
  <p><time>{{ now }}</time></p>
</template>

 このようなコンポーネントを利用していると、開発者ツールのコンソールに図1の警告が表示されることがあります。これはハイドレーションミスマッチが発生している状態を示しています。

図1:ハイドレーションミスマッチの警告表示
図1:ハイドレーションミスマッチの警告表示

 ハイドレーションミスマッチとは、サーバサイドでのレンダリング結果とクライアントサイドでのレンダリング結果が違うことを指します。こういった現象は、リスト5の日時表示のように、レンダリングのたびに表示内容が違う場合によく発生します。

 Nuxtでは、まずサーバサイドでレンダリングを行います。リスト5のtimeタグ内は、もちろん、その時点での日時となります。そのようにレンダリングされたHTMLがブラウザに送信され、ブラウザ上ではさらにレンダリングされます。

 サーバでのレンダリングからクライアントでのレンダリングまでの間に僅かでも時間差があると、両者で異なった日時が表示されてしまい、ミスマッチが発生する原因となるのです。これが、日時表示を伴うコンポーネントがハイドレーションミスマッチの温床となりやすい理由です。

日時表示でハイドレーションミスマッチを解消するNuxtTime

 この問題を解決するために導入されたのが、NuxtTimeコンポーネントです。このコンポーネントは、以下のように使用します。

<NuxtTime v-bind:datetime="now"/>

 v-bind:datetime属性に、表示したいDateオブジェクト、ISO日時フォーマットの文字列、またはUNIXタイムスタンプ(数値)を渡します。

 NuxtTimeコンポーネントは、この入力を受け取り、自動的に次のような<time>タグへとレンダリングを行います。その際に、サーバサイドのレンダリングの際のdatatime属性の値と、クライアントサイドでのレンダリングの際のdatatime属性の値を比較し、適切な方でレンダリングするように自動判定するようになっています。つまり、ハイドレーションミスマッチへも自動的に対応されるため、開発者はこの問題に頭を悩ませる必要がなくなります。

<time datetime="2026-02-16T02:38:27.690Z" data-prehydrate-id=":NIiDfe5__B:">2026/2/16</time>

ロケールとフォーマットの指定

 ただし、timeタグへとレンダリングされる際に、デフォルトでは、サーバ、もしくは、ブラウザのロケールを利用した日付のみの表示となってしまいます。ロケールや表示フォーマットをカスタマイズしたい場合は、次のようなコードを記述します。

<NuxtTime v-bind:datetime="now" locale="ja-JP" timeStyle="full"/>

 この場合は、次のようにレンダリングされます。

<time datetime="2026-02-16T02:38:27.690Z" data-prehydrate-id=":NIiDfe5__B:">11時38分27秒 日本標準時</time>

 ロケールの指定はlocale属性(例: "ja-JP")を使用し、表示フォーマットはIntl.DateTimeFormatのオプションをそのまま利用できます。

 上記の例では、時刻表示のフォーマットを指定するtimeStyle属性に"full"が指定されています。他にも日付表示フォーマットのdateStyle属性や、day、hour、minuteなど、日時を個別にフォーマットするための属性が用意されています。詳細な属性値については、公式ドキュメントを参照してください。

次のページ
NuxtLinkのプリフェッチトリガー

この記事は参考になりましたか?

【最新Nuxtアップデート解説】Nuxtの変更点まとめ連載記事一覧
この記事の著者

WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/23622 2026/03/19 08:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング