🔖

VueUseの利用事例集めてみました

2024/08/21に公開

はじめに

こんにちは、がんがんです。
皆さんは VueUse を利用してますか?VueUse は汎用性の高い関数群(composables)をまとめたライブラリです。

https://vueuse.org/

マウス操作、クリップボード利用、ブラウザのウィンドウサイズ取得など自前で実装すると地味に面倒な作業を支援してくれる関数がすぐに利用できるライラブリです。

VueUses の利用記事として以下の記事が面白かったです。

https://tech.every.tv/entry/2024/08/16/161322

https://ics.media/entry/230606

https://speakerdeck.com/bengo4com/20240820-cloudsign-vuejs-lt


200 以上の composables が用意されており非常に便利な VueUse ですが、普段 VueUse を利用する方はこのように思ったことありませんか?

「これってどうやって使うねん。利用事例どこかで見れないかな」

それぞれについての簡単な使い方は記載があるものの実際のプロダクトでの利用事例などは特に記述がありません。
そのため、「なんか良さそうだけど利用方法が分からない」となり得やすいです。


そこで本記事では Vue および Nuxt の公式で利用されている VueUse 事例を集めてみました。

そもそも VueUse ってどんなアドオンがあるのか?

VueUse を普段利用されていない方は@xyz/vueuseというライブラリが存在していると思うかもしれません。しかし、VueUse は@vueuse/core@vueuse/headなど多くのアドオンが存在しています。

https://vueuse.org/add-ons.html

https://github.com/vueuse

Nuxt UI

useTimestamp

https://vueuse.org/core/useTimestamp/

https://github.com/nuxt/ui/blob/cff3671c2b4edffdf867bd5d61f8e2fbac34e0c3/src/runtime/composables/useTimer.ts#L7

createSharedComposable

https://vueuse.org/shared/createSharedComposable/

https://github.com/nuxt/ui/blob/cff3671c2b4edffdf867bd5d61f8e2fbac34e0c3/src/runtime/composables/useModal.ts#L64

https://github.com/nuxt/ui/blob/cff3671c2b4edffdf867bd5d61f8e2fbac34e0c3/src/runtime/composables/useSlideover.ts#L64

unrefElement

https://vueuse.org/core/unrefElement/

https://github.com/nuxt/ui/blob/cff3671c2b4edffdf867bd5d61f8e2fbac34e0c3/src/runtime/composables/usePopper.ts#L42-L43

useActiveElement

https://vueuse.org/core/useActiveElement/

https://github.com/nuxt/ui/blob/cff3671c2b4edffdf867bd5d61f8e2fbac34e0c3/src/runtime/composables/useShortcuts.ts#L10

useBreakpoints, breakpointsTailwind

https://vueuse.org/core/useBreakpoints/

https://github.com/nuxt/ui/blob/cff3671c2b4edffdf867bd5d61f8e2fbac34e0c3/docs/components/date-picker/DatePicker.vue#L29

useClipboard

https://vueuse.org/core/useClipboard/

https://github.com/nuxt/ui/blob/cff3671c2b4edffdf867bd5d61f8e2fbac34e0c3/src/runtime/composables/useCopyToClipboard.ts#L6

useResizeObserver

https://vueuse.org/core/useResizeObserver/

https://github.com/nuxt/ui/blob/cff3671c2b4edffdf867bd5d61f8e2fbac34e0c3/src/runtime/components/navigation/Tabs.vue#L157-L159

Shadcn for Vue

useMounted

https://vueuse.org/core/useMounted/

https://github.com/radix-vue/shadcn-vue/blob/1a1dd4a611064c125275565ea171f8b763f49844/apps/www/src/lib/registry/default/ui/chart-line/LineChart.vue#L47

https://github.com/radix-vue/shadcn-vue/blob/1a1dd4a611064c125275565ea171f8b763f49844/apps/www/src/lib/registry/new-york/ui/chart-bar/BarChart.vue#L52

useVModel

https://vueuse.org/core/useVModel/

https://github.com/radix-vue/shadcn-vue/blob/1a1dd4a611064c125275565ea171f8b763f49844/apps/www/src/lib/registry/default/ui/v-calendar/Calendar.vue#L45-L47

https://github.com/radix-vue/shadcn-vue/blob/1a1dd4a611064c125275565ea171f8b763f49844/apps/www/src/lib/registry/default/ui/input/Input.vue#L16-L19

Radix Vue

useResizeObserver

https://vueuse.org/core/useResizeObserver/

https://github.com/radix-vue/radix-vue/blob/0bfc28fd6c64e86550652dbd03896ee32292c5aa/packages/radix-vue/src/Tabs/TabsIndicator.vue#L33

useEventListener

https://vueuse.org/core/useEventListener/

https://github.com/radix-vue/radix-vue/blob/0bfc28fd6c64e86550652dbd03896ee32292c5aa/packages/radix-vue/src/shared/useBodyScrollLock.ts#L74-L86

useStorage

https://vueuse.org/core/useStorage/

https://github.com/radix-vue/radix-vue/blob/0bfc28fd6c64e86550652dbd03896ee32292c5aa/docs/.vitepress/components/ComponentPreview.vue#L12

Nuxt 公式ドキュメント

Nuxt 公式ドキュメントでは@vueuse/coreは導入されていませんでした。しかし、nuxt.config に以下のような記述があります。

https://github.com/nuxt/nuxt.com/blob/1b0b4fe20b7238ffaf861f88f48611bf9d8d6554/nuxt.config.ts#L65

@vueuse/nuxtというモジュールがありそうですね。

https://github.com/vueuse/vueuse/tree/5a4224e269a7786e1748f11f97af6fa2255e7fa9/packages/nuxt

これかな?説明文には以下のような記載があります。

This is an add-on of VueUse, which provides better Nuxt integration auto-import capabilities.

なるほど、Nuxt 用に auto-imports 出来るようになっているモジュールのようです。
対象関数を探してみました。実際にuseCookie composable が Auto-imports で利用されていましたね。

https://github.com/nuxt/nuxt.com/blob/71147bd577363f96eaa5d7ee1f4e86211e7fb9f6/pages/index.vue#L4-L6

おわりに

VueUse の利用事例について集めてみました。
今回の調べてみたものはあくまで 1 事例であり思ったよりも利用されている印象を持ちました。

先週 8/16 には VueUse のv11.0.0がリリースされたばかりです。
今後も進化し続けていく VueUse の動向に目が離せないですね

https://github.com/vueuse/vueuse/releases/tag/v11.0.0

Vue・Nuxt 情報が集まる広場 / Plaza for Vue・Nuxt.

Discussion