Nuxtは今年でリリースされてから8年が経ちました。 ### Nuxt2 EoLI’m 8 years old 🥳 pic.twitter.com/7q6Bq6wDjq
— Nuxt (@nuxt_js) October 26, 2024
Nuxtのダウンロード数はNuxt 3が約75%を占めており、多くの開発者がNuxt 3への移行を進めています。 [Nuxt 2 End-of-Life (EOL) · Nuxt Blog](https://nuxt.com/blog/nuxt2-eol) 一方で前バージョンのNuxt 2は今年の6月30日にEOLを迎えました。引き続き使う場合はHeroDevsでの有償サポートを受けることができます。 ### Nuxt 3.10 [Nuxt 3.10 · Nuxt Blog](https://nuxt.com/blog/v3-10) - **共有されたasyncDataのprerendering**:prerendering時にデータの再取得を防ぐ機能が追加されました - **SSRセーフなユニークIDの生成**:SSRセーフなユニークIDを生成するための `useId` コンポーザブルが追加されました - **app/router.optionsの拡張**:モジュール作成者が独自のrouter.optionsファイルを注入できるようになりました - **クライアントサイドのNode.jsサポート**:クライアントサイドでNode.jsのビルトインモジュールをポリフィルする実験的サポートが追加されました - **`useCookie` のリアクティビティ向上**:`CookieStore` を使用してクッキーの値をリアクティブに更新するオプションが追加されました - **潜在的なバグやパフォーマンス問題の検出機能の追加** - **ページごとにView Transitionsのサポートが可能** - **ビルド時にルートメタデータへのアクセスが可能** - **TypeScriptのバンドラー解決によるバンドラーモジュール解決** ### Nuxt 3.11 [Nuxt 3.11 · Nuxt Blog](https://nuxt.com/blog/v3-11) - **ログ機能の改善**: サーバーサイドレンダリング中にブラウザコンソールへログが表示されるようになりました - **プレビューモード**: [`usePreviewMode`](https://nuxt.com/docs/api/composables/use-preview-mode)を使用して、プレビューモードが利用できるようになりました - **Cache-busting payloads**: デプロイ後に古いデータが残らないように自動的なキャッシュバスティングが行われるようになりました - **Middleware `routeRules`**: Nuxtアプリケーション内のページパスに対してミドルウェアが定義できるようになりました - **新しいデータフェッチユーティリティ `clear`**: `useAsyncData` と `useFetch` が `clear` ユーティリティを公開しました - **新しい `#teleports` ターゲット**: サーバーサイドテレポートをサポートする新しい `` 要素が追加されました - **ローディングインジケーターとトランジションコントロール**: ローディングインジケータを非表示にし、必要に応じて `finish()` メソッドを強制的に実行するためのカスタムタイミングを設定できるようになり、View Transitions APIにフックする `page:view-transition:start` フックが登場しました - **サーバーおよびクライアント専用ページ**: `.server.vue` または `.client.vue` サフィックスを使用して、サーバーまたはクライアント専用ページを作成できます - **サーバーコンポーネントの改善** - **パフォーマンスの向上** - **パブリックアセットの取り扱いの変更** - **JSチャンクのデフォルト命名パターンの変更** - **型の修正** ### Nuxt 3.12 [Nuxt 3.12 · Nuxt Blog](https://nuxt.com/blog/v3-12) - **Nuxt 4の変更テスト**: Nuxt 4の変更箇所をテストするために設定にて `compatibilityVersion` オプションが追加されました。 - **Nuxt Scriptsの自動インストール** - **レイヤーの自動登録とバグ修正**: プロジェクト内の `~/layers` が自動的に登録されるようになり、依存関係の読み込みが改善されました - **アクセシビリティの向上**: [`Nuxt 3 now represents 75% of @nuxt_js downloads 📈 pic.twitter.com/dw2Zz5fO4m
— Sébastien Chopin (@Atinux) November 12, 2024
NuxtアプリケーションのためのUIライブラリであるNuxt UIは今年より次期バージョンであるv3に向けてアルファ、ベータ版の開発が進められています。 主に[Reka UI](https://reka-ui.com/)(Radix Vueの後継UIライブラリ)、Tailwind CSS v4、Tailwind Variantsを活用したもので構築されています。 ## nuxt-bridgeI'm thrilled to unveil Nuxt UI v3-alpha to the world! 🚀
— Benjamin Canac (@benjamincanac) October 2, 2024
✨ Completely rebuilt from the ground up
🎨 Powered by Tailwind CSS v4-alpha
🧩 Integrated with Radix Vue for accessible primitives
🔧 Enhanced with Tailwind Variants for flexible stylinghttps://t.co/wrqTgPVugZ
Nuxt2からNuxt3へのマイグレーションを支援するツールであるNuxt Bridgeの安定版がリリースされました。 ## Nuxt Modules Nuxtアプリケーションで利用できるモジュール群のNuxt Modulesから、大きな変更があったものについてを取り上げます。 ### Nuxt Content https://content.nuxt.com/ Nuxtディレクトリの `content/` 配下のファイルを活用したブログ・ドキュメントなどのコンテンツ管理ができるNuxt Contentは現在v3の開発が進められています。Happy Friday! 🎉
— Nuxt (@nuxt_js) January 12, 2024
🌉 We've just released Nuxt Bridge v3, to help with teams migrating projects to @nuxt_js v3.
💪 zero config required
⚡️ use vite, nitro + unhead
🚀 experience composition api
🚧 a step towards v3
For more about Nuxt Bridge, see https://t.co/TwTOrL0Gzc. pic.twitter.com/pT8aEZdUmA
Nuxt Content and Nuxt Studio will soon be under the same domain ✨
— Nuxt Studio (@nuxtstudio) November 26, 2024
We are just waiting for Content v3 release 👀 pic.twitter.com/dWoABAyL8i
前述したNuxt Studioとのサイトドメインの共通化、Nuxt Contentの内容をNuxt Studioにて直接編集が可能になるなど、連携が進められています。 ### Nuxt Fonts [nuxt/fonts: Plug-and-play web font optimization and configuration for Nuxt apps.](https://github.com/nuxt/fonts) Nuxt FontsはNuxtアプリでお気に入りのフォントソースを使用した際に最適化できるモジュールです。Big news! You can now edit your Nuxt Content v3 websites directly in Studio 🪄
— Nuxt Studio (@nuxtstudio) December 6, 2024
Dive into the open-source docs and see how simple it is to make your content editable pic.twitter.com/keQAMWxjIo
デモにもあるように `font-family` の宣言をするだけでカスタムフォントの追加と最適化を実施してくれます。 ### Nuxt Icon [Introducing Nuxt Icon v1 · Nuxt Blog](https://nuxt.com/blog/nuxt-icon-v1-0) Nuxt IconはIconifyをベースにしたNuxtアプリケーション用のアイコンライブラリです。今年v1.0がリリースされました。 ### Nuxt Leaflet https://leaflet.nuxtjs.org/ Nuxt Leafletは[Leaflet](https://leafletjs.com/)をラップしたリアクティブな地図を作成できるモジュールです。今年より公式のNuxt Modulesのリポジトリに追加されました。 ### Nuxt Scripts [Introducing Nuxt Scripts · Nuxt Blog](https://nuxt.com/blog/nuxt-scripts) Nuxt Scriptsはサードパーティ製スクリプトをNuxtアプリケーションで組み込む際にプライバシー・セキュリティを配慮して最適化するモジュールです。Daniel Roe氏によるRFCを経て今年の5月でパブリックプレビューとなりました。 具体的な内容・使い方については以下記事をご参照ください。 [Nuxt Scripts でサードパーティスクリプトをより身近に](https://zenn.dev/comm_vue_nuxt/articles/what-is-nuxt-scripts) ### Nuxt SEO [Announcing Nuxt SEO Stable · Nuxt SEO](https://nuxtseo.com/announcement) Nuxt SEOはNuxtアプリケーションやサイトのオーガニックトラフィックを増やすための技術的な側面を処理してくれるモジュールです。v2が11月25日にリリースされました。これまで個別でインストール必要だったモジュールが `@nuxtjs/seo` に統一されています。今後はNuxt SEO Proの有料版も公開される予定です。 ## Nuxt Tutorial https://learn-nuxt.vuejs-jp.org/ Nuxt TutorialはNuxt公式で提供されているチュートリアルサイトです。すべてWeb上で完結できるチュートリアルです。 今年のVue Fes Japan 2024ではハンズオン教材として日本語版サイトと[リソース](https://github.com/vuejs-jp/learn.nuxt.com)が公開されました。ハンズオン担当者による振り返り記事も公開されているので併せてご覧ください。 [【Vue Fes Japan】 ハンズオン企画の裏テーマ!? Nuxt Tutorial を選んだ理由と未来|ubugeeei](https://note.com/ubugeeei/n/n2ac2b02043da) ## Nx Plugin [Introducing @nx/nuxt: Enhanced Nuxt.js Support in Nx | by Katerina Skroumpelou | Nx Devtools](https://blog.nrwl.io/introducing-nx-nuxt-enhanced-nuxt-js-support-in-nx-01eac78034fc) モノレポ管理ツールであるNxに、Nuxtプロジェクトをサポートするためのプラグイン `@nx/nuxt` が公開されました。 ## UnJSAdd a custom font to your app with just a font-family declaration ✨
— Nuxt (@nuxt_js) September 12, 2024
We handle the performance optimisation 🚀
Bonus: View your custom fonts right in Nuxt DevTools. pic.twitter.com/uSWibJ3ww5
UnJSはあらゆるJavaScriptフレームワーク上で統一的に動作するユーティリティーツール・ライブラリです。今年の1月には公式サイトがリニューアルされました。 [Introducing UnJS Relations · Blog · UnJS](https://unjs.io/blog/2024-02-07-introducing-unjs-relations/) UnJSパッケージやnpmパッケージの関係をリアルタイムで視覚化できる[UnJS Relations](https://unjs.io/relations)が公開されました。 ### Nitro NitroはNuxtで採用されているUnJSパッケージを活用したサーバーエンジンです。 今年のVue.js Amsterdamにて[v2.9.0](https://github.com/nitrojs/nitro/releases/tag/v2.9.0)がライブリリースされました。 - ドキュメントの刷新 - WebSockets API - SQL database layer - Nitro Tasks - unwasmの採用 [v2.10.0](https://github.com/nitrojs/nitro/releases/tag/v2.10.0)ではNitro v3に向けての内部リファクタリングを行い、以下変更が含まれております。 - Compatibility date - Environment-specific handlers - Route groups - OpenAPIのプロダクションサポート - Cloudflare, Netlify, VercelらのPresetの更新 ### 2024年リリースされたUnJS公式パッケージ、UnJSプラグイン 今年リリースされたパッケージやプラグインについてをアルファベット順で列挙しています。 - https://github.com/unjs/automd - https://github.com/unjs/codeup - https://github.com/unjs/compatx - https://github.com/unjs/confbox - https://github.com/unjs/errx - https://github.com/unjs/glob-native - https://github.com/unjs/impound - https://github.com/unjs/mdbox - https://github.com/unjs/srvx - https://github.com/unjs/undio - https://github.com/unjs/undocs - https://github.com/unjs/unifont - https://github.com/unjs/unrouting - https://github.com/unplugin/unplugin-inline-enum - https://github.com/unplugin/unplugin-isolated-decl - https://github.com/unplugin/unplugin-replace - https://github.com/unplugin/unplugin-unused - https://github.com/unplugin/unplugin-vue-fervid - https://github.com/unplugin/unplugin-vue-jsx-vapor --- 同日の[Vue Advent Calendar 2024](https://qiita.com/advent-calendar/2024/vue)ではVue.jsと周辺のエコシステムについての2024年を振り返っています。こちらも併せてご覧になってみてください。 [Vue.jsと周辺エコシステムで振り返る2024年](./vuejs-2024-year-in-review)New UnJS Website 💅
— UnJS (@unjsio) January 5, 2024
With a light ☀️ and a dark theme 🌙 and overall design improvements.
In 2024, expect to see more articles and learning content! 🗒️
👉 https://t.co/fzthjI27CD
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億を突破しました。10 years ago today, Vue was introduced to the public for the very first time on HackerNews: https://t.co/M2ZRwhiIaP
— Vue (@vuejs) February 3, 2024
10 years later, it is now one of the mostly widely used frontend projects, with a diverse community all over the world.
### Vue 3.5 [Announcing Vue 3.5 | The Vue Point](https://blog.vuejs.org/posts/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](https://docs.solidjs.com/advanced-concepts/fine-grained-reactivity)の概念を取り入れた仮想DOMを使用しない新たなVue.jsのコンパイル戦略です。Vaporを実装しているVue.jsは現在本体とは[別リポジトリ](https://github.com/vuejs/vue-vapor)で運用されております。 [コンポーネントに関する実装のTODO](https://github.com/vuejs/vue-vapor/issues/4)はほぼ完了となりクローズされております。[ロードマップも](https://github.com/vuejs/vue-vapor/issues/233)公開されており、今年末までにはVitePressコードをVaporで差し替え、ベータ版を公開する予定とのことです。We just passed 1 billion total downloads on NPM a few days ago :) pic.twitter.com/pw5mNd6dlA
— Vue (@vuejs) September 29, 2024
VitePress内にVaporを組み込むのは現在進行中で、[Issue](https://github.com/vuejs/vue-vapor/issues/289)と[リポジトリ](https://github.com/sxzz/vitepress-vapor)にて進捗が確認できます。 ## Vue Router https://router.vuejs.org/ Vue RouterはVue.jsの公式ルーターライブラリです。 v4.4.0より `RouteNamedMap` による型付きルートのネイティブ・サポートが導入されました。unplugin-vue-routerなしでマップを定義し、型を自動的に推論させることができるようになりました。 v4.5.0よりRouterLinkに `view-transition` Propが追加されました。 ## Vitepress [Announcing VitePress 1.0 | The Vue Point](https://blog.vuejs.org/posts/vitepress-1.0) VitePressは、Vite製の静的サイトジェネレータ(SSG)です。今年よりv1.0がリリースされました。 ## Pinia https://pinia.vuejs.org/ PiniaはVue.jsの状態管理ライブラリです。 [12月4日にリリースされたv2.3.0](https://github.com/vuejs/pinia/blob/v2/packages/pinia/CHANGELOG.md#230-2024-12-04)によるとVue 2.7が必要になるのと、2025年1月に登場するPinia 3.0では、Vue 2のサポートを終了する予定とのことです。 ## Vue DevTools🎉 Now Vapor can power VitePress with a 💯% identical UI and interaction on homepage. pic.twitter.com/PmylYVjRWx
— Kevin Deng 🦋 @sxzz.dev (@sanxiaozhizi) November 14, 2024
Vue DevtoolsはVue.jsのデバッグがブラウザ上でできるChrome拡張機能です。v7からはVue3のみをサポートするようになりました。そのためVue2でデバッグする際はv5やv6を別途使用する必要があります。 ## eslint-plugin-vue https://eslint.vuejs.org/ Vue.jsのESLint pluginであるeslint-plugin-vueでは、以下の新たなルールが追加されました。 - [`vue/enforce-style-attribute`](https://eslint.vuejs.org/rules/enforce-style-attribute.html) - [`vue/max-props`](https://eslint.vuejs.org/rules/max-props.html) - [`vue/require-default-export`](https://eslint.vuejs.org/rules/require-default-export.html) - [`vue/max-template-depth`](https://eslint.vuejs.org/rules/max-template-depth.html) - [`vue/no-deprecated-delete-set`](https://eslint.vuejs.org/rules/no-deprecated-delete-set.html) そのほかVue3.4からの `v-bind` same-name shorthandと `defineModel` のサポートが追加されたり、Flat ConfigサポートやESLint v9をpeer dependencyとして追加するなどの変更も行われました。 ## Vue Language Tools https://github.com/vuejs/language-tools Vue Language ToolsはVSCodeでのVue関連の開発支援する拡張機能、VueファイルのTypeCheckをしてくれるツールなどを提供しているリポジトリです。 Vue Language Toolsの基盤となっているVolarの[v2.0.0](https://gist.github.com/johnsoncodehk/62580d04cb86e576e0e8d6bf1cb44e73)が今年リリースされました。Takeover Modeは廃止され、Vueファイルに対するすべてのTS機能を引き継ぐHybrid Modeが導入され、vue-tscを書き換えてメモリ使用量を大幅に削減するなどの変更が加えられました。 ## VueUse VueUseはVue.jsのComposition APIを用いて作られたユーティリティライブラリです。 https://vueuse.org/ 今年はv11、v12のメジャーバージョンアップがありました。[v12](https://github.com/vueuse/vueuse/releases/tag/v12.0.0)よりVue2のサポートを終了し、Vue3のみをサポートするようになりました。 ## Vue I18n Vue I18nはVue.jsの国際化(i18n)ライブラリです。 https://github.com/intlify/vue-i18n/releases/tag/v10.0.0 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版です。📢 Important Update
— Vue (@vuejs) October 28, 2024
The much improved Vue Devtools v7 has been submitted for review on the Chrome web store under the stable channel, and we are flipping the switch tomorrow.
Things to note:
- The latest v7 **only supports Vue 3**. We have separate listings for legacy versions…
2024年9月時点でnpmでの月間100万ダウンロードを突破しました。 今年はフォームを構築できる[Form ライブラリ](https://primevue.org/forms/)、[Figma UI Kit](https://primevue.org/uikit/)、コピーペーストで使用できるUI群の[Prime Blocks](https://primeblocks.org/)のVue.js版が公開されました。 ### Vuetify https://vuetifyjs.com/en/blog/state-of-the-union-2024/ Vue.jsのコンポーネントライブラリとして有名なVuetifyが、認証と状態管理のためのツールである[Vuetify One](https://one.vuetifyjs.com/)、コード共有ツールである[Vuetify Bin](https://bin.vuetifyjs.com/)、プレグラウンドツールである[Vuetify Playground](https://play.vuetifyjs.com/)、Vuetifyを使ったUIスニペット集を公開するサイトである[Vuetify Snips](https://snips.vuetifyjs.com/)といったエコシステムツールやサイトが公開されました。PrimeVue has reach 1 million downloads per month on npm. Thank you 💚 #vuejs
— PrimeVue (@primevue) September 10, 2024
p.s. Just getting started, job is not done yet... pic.twitter.com/keyrC58VPf
11月にはVuetifyのテーマエディターでもある[Vuetify Studio](https://studio.vuetifyjs.com/)がリリースされました。 ### Oku UI https://oku-ui.com/ Vue.js、Nuxt利用できるUIコンポーネントライブラリである[Oku Primitives](https://primitives.oku-ui.com/)を公開しているOku UIで、モーションにまつわるライブラリの[Oku Motion](https://motion.oku-ui.com/)、NuxtとNitro Kitでフルスタックアプリケーション開発ができるようになる[Pergel](https://pergel.oku-ui.com/)が今年公開されました。 ### Unovue https://unovue.com/ Vueのコンポーネントやユーティリティ集であるUnovueが公開されました。 現在、ヘッドレスコンポーネントのRadix Vueをリブランドした[Reka UI](https://reka-ui.com/)、再利用可能なVueコンポーネント群の[Inspira UI](https://inspira-ui.com/)、shadcn/ui非公式のコミュニティ主導でのVue移植版である[shadcn-vue](https://www.shadcn-vue.com/)がまとめられています。 ## GovUK Vue https://govukvue.org/ イギリス政府のデザインシステムである[GOV.UK Design System](https://design-system.service.gov.uk/)をVueコンポーネントを提供する非公式プロジェクトが公開されました。 ## Storybook https://storybook.js.org/blog/first-class-vue-support-storybook-8/ コンポーネントカタログツールのStorybookでのv8からは、Vue公式のLanguage ToolsであるVolarを活用してStorybookとVue.jsの連携が強化されました。docgenでは `vue-component-meta` を使用するようになりました。VueプロジェクトにおいてReactをpeer dependencyとしてインストールする必要もなくなりました。 ## v0 for VueVuetify Studio has officially opened its doors! This is more than just a space; it's a dynamic hub for creating, innovating, and mastering UI/UX design with Vuetify. Whether you’re a developer looking to streamline your workflows, a designer aiming to craft stunning interfaces,… pic.twitter.com/nckXbZYz7c
— Vuetify (@vuetifyjs) November 21, 2024
Vercelが提供するAI駆動型のUI生成ツール「V0」がVue.jsでのアプリケーション生成に対応しました。 ## The State of Vue.js 2025 Survey [The State of Vue.js Report 2025 - Developer Survey](https://docs.google.com/forms/d/e/1FAIpQLSc6QQQ14ZuE4akaTZAkqOAMUSGjXVjKS-KuVu2eZ448jzK1Nw/viewform) Vue.jsの開発者向けサーベイが公開されました。Vue.jsやNuxtの利用状況や課題についての項目についてを回答できます。この結果を元に来年には「The State of Vue.js Report 2025」としてレポートが公開される予定です。英語での回答になりますが、日本のVue.js、Nuxt開発者もサーベイに参加してみましょう。 --- 同日の[Nuxt / UnJS Advent Calendar 2024](https://qiita.com/advent-calendar/2024/nuxt-and-unjs)ではNuxtと周辺のエコシステムについての2024年を振り返っています。こちらも併せてご覧になってみてください。 [Nuxt/UnJSと周辺エコシステムで振り返る2024年](./nuxt-unjs-2024-year-in-review)v0 can now answer questions about Svelte, Vue, and Remix.
— v0 (@v0) September 12, 2024
To help us improve quality, please downvote responses you find unhelpful. pic.twitter.com/nwEbtJ7jlZ
後半はViteにまつわる今後の技術戦略(OxC、Rolldown)や、設立した企業の[VoidZero](https://voidzero.dev/)についてを発表してくれました。Viteが様々なフレームワークなどで活用されているエコシステムの凄さを感じつつ、更なる技術的進化が語られておりワクワクさせられました。useId作ってくれてありがとうございます #vuefes
— オオヤマ オクト (@okuto_oyama) October 19, 2024
ちなみにVue.jsは今年で登場して10周年になるのですが、私がVue.jsに初めて触れたのが2016年からなのでそこから8年近くも経っているのだなぁ〜と思い出に浸っていました。 ### IT未経験者をVue.jsで開発できるITコンサルタントに育てあげる秘訣 - フューチャーの新人研修の取り組み こちらはフューチャーアーキテクト株式会社さんのスポンサーセッションです。 新人研修の中でVue.jsを用いた開発ができるように組み込んでいるとのことでしたが、[eslint-plugin-vue](https://eslint.vuejs.org/)のメンテナでもある太田さん([ota-meshi](https://github.com/ota-meshi))が教材の監修に関わっているとのことでした。 Schooでもフロントエンドアーキテクチャの選択肢としてVue.jsやNuxtを用いているので、今後の新卒エンジニアの研修教材にどう組み込むか検討しています。新卒研修でVue.jsやNuxtを組み込んでいる企業の方と意見交換できたらいいなとか考えていました。Viteの将来が楽しみです! #vuefes
— オオヤマ オクト (@okuto_oyama) October 19, 2024
### Nuxtベースの「WXT」で開発用のChrome拡張を作成する Chrome拡張を作るにあたり何かしらのボイラープレートとなるものは色々と存在しています。今回はNuxtのディレクトリ構成に似た「[WXT](https://wxt.dev/)」でChrome拡張を作成したという内容を発表してくれました。 Manifestファイルを自動生成してくれたり、開発時には拡張機能を取り込んだブラウザが立ち上がりホットリロードして機能検証できるなど、開発者体験が良さそうに思いました。モジュールを入れる必要はありますが、Vue.jsやReact、Svelte、SolidJSを用いたUI開発もできるとのことです。Vue.jsを使って開発研修しているところってどれくらいあるんだろうかな #vuefes
— オオヤマ オクト (@okuto_oyama) October 19, 2024
### 同期する都市のキャンバス:Vue.jsによる大規模メディアインスタレーションの舞台裏 セッションやLTのおおよそはVueエコシステムの話やシステム開発・Web開発の話だったのですが、それとは違う毛色のVue.js活用事例についての発表でした。 group_inouとAC部のミュージックビデオ作品『HAPPENING』のWebアプリでも[Vue.jsが使われていた話](https://baku89.com/making-of/kindolphin)もあり、映像とVue.jsは親和性があるのかなと思い、興味をそそられました。 発表では[渋谷サクラステージ](https://www.shibuya-sakura-stage.com/)でのデジタルサイネージにはNuxtが使われているという衝撃の事実を知ることができました([技術解説記事](https://rettuce.blog/2024/01/11/shibuyasakurastage/))。自分にとっては、複雑なGUIを作るためにNuxtを活用するイメージがまったくできていなかったので、ここまで実現できるのかと驚きました。色の合成についてもCSSで行っているということでWeb技術をフル活用されていたことが嬉しかったです。Vue以外でReact、Svelte、SolidJSも使える!マイクロフロントエンドっぽくやれる…? #vuefes_kickflow
— オオヤマ オクト (@okuto_oyama) October 19, 2024
ちなみに渋谷サクラステージはSchoo本社からも近い場所にあるので、出社した際はデジタルサイネージがどうなっているかを覗きに行ってみようと思います([デジタルサイネージのイメージ動画URL](https://www.youtube.com/watch?v=DJfNFAYwEaU))。 ### Vue 3 と Svelte 5 のランタイムを比較する 〜技術を一段深く理解する〜 SvelteのコアチームメンバーでもあるbaseballyamaさんによるVue 3とSvelte 5、そしてVue Vapor Modeのそれぞれのランタイムを比較した発表です。個人ではSvelteを書いたことがあるのと、コンパイラとして魅力を感じているOSSだったので、Vue.jsとSvelteとでどのようにランタイムが違うのか気になっていました。 ReactやVue.jsでは仮想DOMを用いていますが、Svelteでは仮想DOMを持たないランタイムを持っています。Vue Vapor Modeでも同様に仮想DOMを用いない手法を取り入れているため、どの部分が似ていてどの部分が違うのかを簡略化されたコードで説明してくれました。 それぞれのランタイムについて詳細に見たことがなかったため、今回の発表でSvelteとVue Vapor Modeのそれが、非常に近しいものであることをざっくり理解できました。Web技術をつかっていろんな展開ができる話はわくわくするな〜 #vuefes_mntsq
— オオヤマ オクト (@okuto_oyama) October 19, 2024
Vue Vapor Modeのランタイム、Svelteと似てるんだ #vuefes_mntsq
— オオヤマ オクト (@okuto_oyama) October 19, 2024
ちなみに同日夜よりSvelteにまつわるカンファレンスの[Svelte Summit Fall 2024](https://www.youtube.com/watch?v=fAPFsRP-mbc)が開催され、Svelte 5の正式リリースが発表されていました。新たに搭載された[Rune API](https://svelte.dev/docs/svelte/what-are-runes)もVue.jsの書き方と近しくなってきたと感じるので、いつかプロダクションで導入してみたいなぁという気持ちがあります。 ### 次世代フロントエンドクロストーク  Evan You、OxCクリエイターのBoshen Chen、ESLint Communityコアチームの太田 洋介さん、PrettierメンテナのSosuke Suzukiさん、Biomeコアコントリビューターのunvalleyさんらが集まりフロントエンドツールのこれからについてを語るパネルディスカッションがありました。このメンバーが一度に揃うことはまず無いのでかなり豪華な対談となりました。 もともとJavaScriptはWebブラウザで使われる言語でしたが、サーバーサイドJSが生まれ、UIライブラリ・フレームワークが登場し、そこから複数のフロントエンドツールが生まれてきています。徐々に複雑なアプリケーションや要件が生まれるようになって、JavaScriptだけで解決するには限界が生まれてきています。そんな中、フロントエンドツールを動かすための言語にRustが選択されてきています(ちなみに[esbuild](https://github.com/evanw/esbuild)はGo言語です)。 フロントエンドツールのRust化が進む中で、参入障壁の難易度やエコシステムそのものがどうなっていくかは個人的にも懸念していましたが、Rollupプラグインの後方互換や有名なプラグインはコアとして取り込んでいくなど、不安に思っていた部分に対する回答が聞けました。またVoidZeroの今後の取組みとしてASTの標準化や共通化についても話しており、今後どのような動きが出てくるのかも気になりました。 登壇されたSosuke Suzukiさんの[ブログ記事](https://sosukesuzuki.dev/posts/vuefes-2024-follow-up/)でも語られていましたが、このパネルディスカッションは幅広い聴衆に伝わるような話で展開されていたため、自分も若干の物足りなさがありました。欲を言えば[次世代Webカンファレンス](https://nextwebconf.connpass.com/)のような聴者おいてけぼりにしてしまう議論も聴いてみたいなと感じてしまいました。ざっくりとしたランタイムの紹介だったけどVapor Modeはよりシンプルなコンパイラを目指そうとしてるんだろうなと雑に理解しました #vuefes_mntsq
— オオヤマ オクト (@okuto_oyama) October 19, 2024
### Deep dive into Nuxt Server Components フロントエンドの文脈で「Server Components」というと、Reactの印象が強いかもしれません。実はNuxtにも「[Nuxt Server Components](https://roe.dev/blog/nuxt-server-components)」というものが存在します。今回はその内容についてと実際に最小単位で実装する場合にどのような形となるのかを解説してくれました。 仕組みの解説で必要な構成要素を説明してくれたのですが、その中で個人的な驚きだったのが、[Teleport](https://ja.vuejs.org/guide/built-ins/teleport)を扱っていたことです。モーダルダイアログなどの表示などでDOM階層の外側に移動させる使い方だと思っていたのですが、SSRでのハイドレーションミスマッチを防ぐ(=クライアントとサーバーとでDOM構造を一致させる)ために用いられることは知りませんでした。 まだExperimentalな機能ではありますが、クライアントのバンドルサイズを減らしたりクライアントサイドに情報を残したくないときに活用していけるといいなと思いました。 ### Vue.jsコミュニティにようこそ! Vueエコシステムのコミュニティで活動しているメンバーたちによる、どのようにコミュニティに参加し貢献できるかについてのパネルディスカッションがありました。私は途中から参加しましたが、立ち見が発生するほどの満員で大盛況でした。延長で1時間やってほしい #vuefes_mntsq
— オオヤマ オクト (@okuto_oyama) October 19, 2024
コミュニティに参加・貢献するということ何をもってして証明されるか明確な基準はありません。Vue Fes Japanに参加することだけでもそうかもしれませんし、Vueエコシステムを活用して開発してみることだったり、この参加レポートのような感想記事を書くこともその1つかもしれません。 Vue.jsのコミュニティーガイドには「[あなたができること](https://ja.vuejs.org/about/community-guide#what-you-can-do)」という項目があり詳細にどのようなことができるかの紹介が載っています。貢献してみたい人は自分ができそうなことから始めてみると良いかもしれません。 ちなみに私が始めてVue.js関連で貢献をしたものは[ドキュメントの日本語翻訳にまつわるもの](https://github.com/vuejs-jp/ja.vuejs.org/pull/61)でした。 ## 参加したSchooエンジニアの感想 Schooからは私を含めたエンジニア3名が参加してきました(うち2名は個人スポンサーもさせていただいております)。それぞれが気になるセッションへ参加してきて刺激をもらってくることができました。参加したエンジニアによるVue Fes Japanの感想についても掲載させていただきます。 - Vue周りはコミュニティが本当にいいと再認識! - Vue/Nuxtはあくまでも選択肢の一つのイメージだったが、これからのコミュニティの広がり熱量を感じて自分の中での価値・熱量みたいなものが上がった気がする - どんな形でもいいから自分でも何かしらコミットしたい! - Vue作者の実際の話聞ける場ありがたい。リアルタイム翻訳ありがとう。(笑いどころはずれる) - リファクタ、テスト、パフォーマンスチューニングはみんな困っていそう - AIを用いたリファクタ、テストはやってみても良さそう - 深掘りたいことが増えた! - Vueはいいぞ! ## Vue Fes Japan 2024を終えて 午前からはじまったカンファレンスでしたが夜のアフターパーティが終わるまであっという間に過ぎたと感じるくらい濃密な時間となりました。直接聴けなかった発表がいくつもあったのでアーカイブ動画が公開されるのを心待ちにしております。 全セッション終了後に行われたアフターパーティでは、私と同じくVue 1系から関わっていた人たちと会えたり、過去在籍していた企業の同僚、chibivue関連で新しく繋がった方たちともご挨拶ができました。海外からの参加者も含め、幅広い多様な層が参加していることで、Vue.jsが誕生してから続くコミュニティというものの歴史の長さを感じることができました。 SchooでもVue.jsやNuxtをプロダクト開発に活用させてもらっています。引き続きVueエコシステムを活用しつつ、そこから得られた知見を通じて、コミュニティやOSSへ貢献をしていければと思っています。 #vuefes にサーバー荒らされました (chibivue 鯖) pic.twitter.com/3eHP3Rju9Q
— @ubugeeei.dev 🦋 (@ubugeeei) October 19, 2024
``` 読み上げる要素に`tabindex="-1"`を付与します。この値があることでTabキーで順番に要素へフォーカス移動する際に、その要素だけをスキップできるようになります。 ```diff if (announcer instanceof HTMLElement) { announcer.textContent = title; // title要素のテキストを代入する + announcer.focus(); // 読み上げる要素にフォーカスを当てる } ``` テキストを代入後に`focus()`を使ってフォーカスを当てることができます。これによりSPAでの画面遷移後にはページ上部へとフォーカスが移動して、通常の画面遷移と同様にフォーカス順序が上から始められるようになります。 しかし、フォーカスの挙動としてはこの形で問題ないのですが、Windowsで使用できるスクリーンリーダー「[NVDA](https://www.nvda.jp/)」での読み上げでは「_(ページタイトル)_、警告」というように読み上げられてしまいます。なぜそのように読みあげられてしまうかというと、スクリーンリーダーでは対応するHTMLの名前と役割を取得してくるため、`role="alert"`が付与されていることで「警告」という読み上げになります。 Route Announcer自体はSPAにおけるアクセシビリティ向上させる実装になりますが、あくまでもテクニックとしてのもので、HTMLの中における適切なセマンティクスな役割といったものは存在しません。なので`role`によっては違和感のある読み上げになってしまうこともあります。 それを加味するとセマンティクスな要素にフォーカス移動するのがスクリーンリーダー利用者にとっても理解しやすいのかなと思っています。`
カードの説明文が入ります。
当日の各セッションごとでの様子は [togetter](https://togetter.com/li/1889734) にてまとめられておりますので、併せてご覧ください。 来年以降もまた開催されるのであれば、何らかの成果を出して発表ができればと考えております。 そして、私たちのように社内での取り組みを発表して、次の自信につなげたい企業が増えていけばいいなとも思っております。 手前味噌ですが、各社のアクセシビリティの取り組みについてをまとめているリポジトリを公開しております。 基本的に私が更新していますが「この取り組みを載せてほしい」というのがあれば是非 [@okuto_oyama](https://twitter.com/okuto_oyama) までご連絡ください。 [yamanoku/awesome-japanese-a11y-companies: アクセシビリティに取り組む・推進している日本企業まとめ(随時更新)](https://github.com/yamanoku/awesome-japanese-a11y-companies) また、登壇ほか字幕配信にもご協力いただいた Shamrock Records 株式会社の青木さんに感謝申し上げます。 UD トークを通じてリアルタイム字幕を提供できたほか、自身が開発された[字幕エディター](https://tools.udtalk.jp/jimakueditor)にて、自分の発表動画の字幕編集を簡単に行うことが出来ました。 花王さんの事例のように、各企業の字幕提供も進んでいくといいなと思っております。 【満員御礼】
— GAAD Japan 🇯🇵 (@GAAD_jp) May 20, 2022
昨日開催した「GAAD Japan 2022」は、671名もの皆さんに参加登録をいただきました。本当にありがとうございました!
また、ご協賛いただいた14社、9組のセッション登壇者、8組のLT登壇者の皆さんに感謝申し上げます。
本日よりフォローアップメールをお送りしてまいります!#GAADjp pic.twitter.com/YhYvqT09Ec
製品画像に関する説明についてあれこれ
``` こうかな。WAI-ARIA 使えなかったら詰みっぽいです。 参考:https://www.w3.org/WAI/tutorials/images/complex/#description-containing-textual-informationSee the Pen Intersection Obeserver Test code by Oyama Michinoku (@yamanoku) on CodePen.
[](https://gyazo.com/bebf722e1e507c4b4a1fe9b5c01dd81b) いわゆる「ある程度の表示にきたらヘッダの色を変える」アレです。スクロール量に制御されないので、レスポンシブなどで要素の高さが変わった場合でもこの調整は効きます。 #### サンプルコード(ES6) ```javascript (() => { const clientHeight = document.documentElement.clientHeight; const header = document.querySelector('.header'); let observer = new IntersectionObserver((changes) => { for (const change of changes) { let rect = change.target.getBoundingClientRect(); let h = (0 < rect.top && rect.top < clientHeight) || // 対象の上端は表示領域に入っている (0 < rect.bottom && rect.bottom < clientHeight) || // 対象の下端は表示領域に入っている (0 > rect.top && rect.bottom > clientHeight); // 上端下端も表示されてないがその間が表示されている if (h) { header.classList.remove('scrolled'); } else { header.classList.add('scrolled'); } } }); let target = document.querySelector('.main-middle'); // この要素のから外れたら observer.observe(target); })(); ``` コード内でいうところの target 部分に何を指定するかでどの位置で変化するか制御することが出来ます。 ```javascript let target = document.querySelector('.main-middle'); ``` また`unobserve()`を使用することでその対象の監視を終了させることができるので、1度限りの処理も対応できます。 #### 画像遅延読み込み Intersection Observer を使うと以下制御で実現出来る感じです ```htmlSee the Pen Velocity.js - Pause/Resume animation by William Lindner (@wlindner) on CodePen.
[https://codepen.io/wlindner/pen/ykIzw](https://codepen.io/wlindner/pen/ykIzw) google 日本語検索でもそれに関する記事は見受けられませんでした。 しかし、1人の Contributior の活躍により [2016 年 11 月に一時停止・再生機能が実装されました](https://github.com/julianshapiro/velocity/pull/718)。 ## 実装例 ```js $(function () { $('.hover').velocity( { scale: [1, 0.6], }, { duration: 1500, complete: function () { $(this).velocity( { scale: [0.6, 1], }, { duration: 1500, loop: true, }, ); }, }, ); $('.hover').hover( function () { $(this).velocity('pause'); }, function () { $(this).velocity('resume'); }, ); }); ``` ## デモ [https://jsfiddle.net/g09jkr80/1/](https://jsfiddle.net/g09jkr80/1/)  ## 得られた教訓 **公式ドキュメント、アップデート情報はちゃんと調べてちゃんと読もう!!!!!** 以上学びでした。 ## 余談ですが React 用の velocity.js プラグインがあります [https://github.com/twitter-fabric/velocity-react](https://github.com/twitter-fabric/velocity-react) おっきなとこが管理してるので安心 ☺