Vue.jsと周辺エコシステムで振り返る2024年
Vue Advent Calendar 2024の9日目の記事です。
この記事では2024年のVue.js、そしてそれらにまつわる周辺エコシステムについてを振り返っていきます。関連する大きな出来事や変更があったものについてを中心にまとめています(この内容も取り上げてほしい!というものがあった際は、GitHubから編集提案をください)。
Vue.js
公開10周年
2024年はVue.jsがHacker Newsで公開されてから10周年目を迎える年でした。Vue.jsの進化の歴史については以下の通りになります。
- 2015年10月: Vue 1リリース
- 2016年10月: Vue 2リリース
- 2018年9月: Vue 3の開発が開始
- 2020年9月: Vue 3リリース
- 2022年1月: Vue 3がデフォルトになる、ドキュメントもVue 3がメインに
- 2023年12月: Vue 2がEoLを迎える
また、今年の9月の時点でnpmからの総ダウンロード数が10億を突破しました。
Vue 3.5
9月にVue 3.5がリリースされました。コードネームは「Tengen Toppa Gurren Lagann」です。このリリースでは以下の変更が含まれています。
- リアクティブシステムの最適化: パフォーマンスが向上し、メモリ使用量が大幅に削減されました
-
リアクティブプロップのデストラクチャリング:
defineProps
からデストラクチャリングされた変数がリアクティブになりました -
SSRの改善: 遅延ハイドレーションや
useId()
などの新機能が追加されました -
カスタムエレメントの改善:
defineCustomElement
APIに新機能が追加されました -
新しいAPI追加
useTemplateRef()
Deferred Teleport
onWatcherCleanup()
Vapor Mode
Vapor ModeはFine Grained Reactivityの概念を取り入れた仮想DOMを使用しない新たなVue.jsのコンパイル戦略です。Vaporを実装しているVue.jsは現在本体とは別リポジトリで運用されております。
コンポーネントに関する実装のTODOはほぼ完了となりクローズされております。ロードマップも公開されており、今年末までにはVitePressコードをVaporで差し替え、ベータ版を公開する予定とのことです。
VitePress内にVaporを組み込むのは現在進行中で、Issueとリポジトリにて進捗が確認できます。
Vue Router
Vue RouterはVue.jsの公式ルーターライブラリです。
v4.4.0よりRouteNamedMap
による型付きルートのネイティブ・サポートが導入されました。unplugin-vue-routerなしでマップを定義し、型を自動的に推論させることができるようになりました。
v4.5.0よりRouterLinkにview-transition
Propが追加されました。
Vitepress
VitePressは、Vite製の静的サイトジェネレータ(SSG)です。今年よりv1.0がリリースされました。
Pinia
PiniaはVue.jsの状態管理ライブラリです。
12月4日にリリースされたv2.3.0によるとVue 2.7が必要になるのと、2025年1月に登場するPinia 3.0では、Vue 2のサポートを終了する予定とのことです。
Vue DevTools
Vue DevtoolsはVue.jsのデバッグがブラウザ上でできるChrome拡張機能です。v7からはVue3のみをサポートするようになりました。そのためVue2でデバッグする際はv5やv6を別途使用する必要があります。
eslint-plugin-vue
Vue.jsのESLint pluginであるeslint-plugin-vueでは、以下の新たなルールが追加されました。
vue/enforce-style-attribute
vue/max-props
vue/require-default-export
vue/max-template-depth
vue/no-deprecated-delete-set
そのほかVue3.4からのv-bind
same-name shorthandとdefineModel
のサポートが追加されたり、Flat ConfigサポートやESLint v9をpeer dependencyとして追加するなどの変更も行われました。
Vue Language Tools
Vue Language ToolsはVSCodeでのVue関連の開発支援する拡張機能、VueファイルのTypeCheckをしてくれるツールなどを提供しているリポジトリです。
Vue Language Toolsの基盤となっているVolarのv2.0.0が今年リリースされました。Takeover Modeは廃止され、Vueファイルに対するすべてのTS機能を引き継ぐHybrid Modeが導入され、vue-tscを書き換えてメモリ使用量を大幅に削減するなどの変更が加えられました。
VueUse
VueUseはVue.jsのComposition APIを用いて作られたユーティリティライブラリです。
今年はv11、v12のメジャーバージョンアップがありました。v12よりVue2のサポートを終了し、Vue3のみをサポートするようになりました。
Vue I18n
Vue I18nはVue.jsの国際化(i18n)ライブラリです。
v10.0.0では軽量版のpetite-vue-i18n、JITコンパイルの有効化がデフォルトに、設定されたLocaleに合わせた型生成、レガシー APIモードの$t
とt
のオーバーロードシグネチャの変更などがされました。
次期バージョンのv11からはLegacy API modeの非推奨化や、v10から非推奨としていた$tc
とtc
のAPI廃止が計画されています。
UI フレームワーク
Vue.jsにまつわるUIフレームワークやコンポーネントライブラリで大きな変更があったものについてを取り上げます。
PrimeVue
PrimeVueはPrimeFacesというカスタマイズ可能なUIコンポーネントライブラリを提供するプロジェクトのVue.js版です。
2024年9月時点でnpmでの月間100万ダウンロードを突破しました。
今年はフォームを構築できるForm ライブラリ、Figma UI Kit、コピーペーストで使用できるUI群のPrime BlocksのVue.js版が公開されました。
Vuetify
Vue.jsのコンポーネントライブラリとして有名なVuetifyが、認証と状態管理のためのツールであるVuetify One、コード共有ツールであるVuetify Bin、プレグラウンドツールであるVuetify Playground、Vuetifyを使ったUIスニペット集を公開するサイトであるVuetify Snipsといったエコシステムツールやサイトが公開されました。
11月にはVuetifyのテーマエディターでもあるVuetify Studioがリリースされました。
Oku UI
Vue.js、Nuxt利用できるUIコンポーネントライブラリであるOku Primitivesを公開しているOku UIで、モーションにまつわるライブラリのOku Motion、NuxtとNitro Kitでフルスタックアプリケーション開発ができるようになるPergelが今年公開されました。
Unovue
Vueのコンポーネントやユーティリティ集であるUnovueが公開されました。
現在、ヘッドレスコンポーネントのRadix VueをリブランドしたReka UI、再利用可能なVueコンポーネント群のInspira UI、shadcn/ui非公式のコミュニティ主導でのVue移植版であるshadcn-vueがまとめられています。
GovUK Vue
イギリス政府のデザインシステムであるGOV.UK Design SystemをVueコンポーネントを提供する非公式プロジェクトが公開されました。
Storybook
コンポーネントカタログツールのStorybookでのv8からは、Vue公式のLanguage ToolsであるVolarを活用してStorybookとVue.jsの連携が強化されました。docgenではvue-component-meta
を使用するようになりました。VueプロジェクトにおいてReactをpeer dependencyとしてインストールする必要もなくなりました。
v0 for Vue
Vercelが提供するAI駆動型のUI生成ツール「V0」がVue.jsでのアプリケーション生成に対応しました。
The State of Vue.js 2025 Survey
The State of Vue.js Report 2025 - Developer Survey
Vue.jsの開発者向けサーベイが公開されました。Vue.jsやNuxtの利用状況や課題についての項目についてを回答できます。この結果を元に来年には「The State of Vue.js Report 2025」としてレポートが公開される予定です。英語での回答になりますが、日本のVue.js、Nuxt開発者もサーベイに参加してみましょう。
同日のNuxt / UnJS Advent Calendar 2024ではNuxtと周辺のエコシステムについての2024年を振り返っています。こちらも併せてご覧になってみてください。
Discussion
vue/enforce-style-attribute
のリンクが 誤っていますでしょうか?ありがとうございます。
vue/no-deprecated-delete-set
のURLとで取り違えていたのでリンク先の修正をいたしました。