Nuxt3でお世話になっているモジュールたち

私が仕事や個人開発の中で使ったことのあるNuxt3のモジュールについて記載しています。順不同

:::note info
[Nuxt公式のモジュール一覧](https://nuxt.com/modules)の方でより詳しい内容を確認できます。
検索機能がついてるので「こんなことしたいけどあるかな？」ってとき、最初に調べると余計な回り道をせずに済んだりするかもしれません。
:::

## @vueuse/nuxt
https://nuxt.com/modules/vueuse

- Vue.js向けに「標準ではないけどあると嬉しい」な機能を多数盛り込んだ[VueUse](https://vueuse.org/)プラグインをNuxt向けに導入するためのモジュール
- 導入することによってVueUseに含まれるコンポーザブルが自動インポートされimportの宣言無しで使えるようになる

## @pinia/nuxt
https://nuxt.com/modules/pinia

- Vue.js向けの状態管理のライブラリこと[Pinia](https://pinia.vuejs.org/)をNuxt向けに導入するためのモジュール
- 最近のバージョンではstoresディレクトリをPiniaのストアファイルの格納場所として解釈し、自動インポートしてくれたりする（別のディレクトリを設定することもできた気がする）

## @pinia-plugin-persistedstate/nuxt
https://nuxt.com/modules/pinia-plugin-persistedstate

- Piniaのストアの保管先としてローカルストレージを使えるようにする[pinia-plugin-persistedstate](https://prazdevs.github.io/pinia-plugin-persistedstate/)プラグインをNuxt向けに導入するためのモジュール
- 実はVueUse側にもローカルストレージを管理するための[useLocalStorageコンポーザブル](https://vueuse.org/core/useLocalStorage/)があるので「状態管理はすべてPiniaで管理する！」といったこだわりがなければインストールしなくても何とかなったりする

## @nuxtjs/supabase
https://nuxt.com/modules/supabase

- セルフホスト可能でバックエンドとしてPostgreSQLを使っているBaaSこと[Supabase](https://supabase.com/)をNuxt向けに導入するためのモジュール

## @nuxt/devtools

- 最近はNuxt3の新規プロジェクトを立ち上げるとデフォルトで入っている気がするモジュール
- Vueコンポーネントのインスペクタとして以外にも色々できるみたい（よくわかっていない）
  - 後述するnuxt-mongooseはこのツールのGUIから新規のコレクションやドキュメントの登録、編集ができた:hugging:

## nuxt-primevue
https://nuxt.com/modules/primevue

- 高機能なVue向けのUIフレームワークこと[PrimeVue](https://primevue.org/)をNuxt向けに導入するためのモジュール

## nuxt-mongoose
https://nuxt.com/modules/nuxt-mongoose

- MongoDBをjs環境で扱いやすくするmongooseプラグインをNuxt向けに導入するためのモジュール
- devtool内からNuxtのserver/apiを活用したBREAD(Browse,Read,Edit,Add,Delete)のAPIを生成できる
  - `※私自身がMongoDBとmongooseについて勉強中なので機能を発揮しきれてない部分があるかも。。`

## @vee-validate/nuxt
https://nuxt.com/modules/vee-validate

- Vue.js向けのバリデーションライブラリこと[VeeValidate](https://vee-validate.logaretm.com/v4/)をNuxt向けに導入するためのモジュール

## nuxt-icon
https://nuxt.com/modules/icon

- 導入することでIconという名前のコンポーネントを経由して複数のフォントの複数のアイコンを自由に表示できるようになるモジュール

## 備考
いずれのモジュールも導入することで自動インポートの辺りを上手いこと解決してくれるようです。
また、規模の大きいモジュールは`nuxt.config.ts`内でTypeScriptの型のサポートが効く状態でオプションを弄れるたりもします。

---
開発中のアプリケーションの中でモジュールとして分離できるコードがある場合、プロジェクト内にオレオレモジュールとして作っていくのもアリかなと考えています。
1つのモジュールとして作成していくことで以下のようなメリットがあるかと思います。

- 他所のNuxt3プロジェクトへのコピペがしやすくなる
  - Gitのサブモジュールとして扱うと尚良いかも？
- 1つの機能のためのコンポーネント、コンポーザブル、プラグイン等について`modules/[モジュール名]`以下にまとめて管理できる

具体的には個人開発のプロジェクトの中で以下のような使い方をしています
- PrimeVue向きのロケールファイルを含む[primelocale](https://github.com/primefaces/primelocale)プラグインについて日本語のロケール設定を行う
- ローカルストレージで管理する設定（ライト/ダーク、フォントサイズ、テーマcss等のGUIに関する内容）についてVueUseを使ったローカルストレージの宣言を行う

など

---
以下はこの記事を書いてる際にたまたま開いていた`cors-anywhere`パッケージを使用したプロキシサーバーをNuxtのフックから起動するオレオレモジュールの例になります。
```typescript:modules/base/index.ts
import { defineNuxtModule } from "@nuxt/kit";
// @ts-ignore
import * as corsProxy from 'cors-anywhere';

export default defineNuxtModule({
  meta: {
    configKey: "base",
  },
  setup(_options, nuxt) {
    nuxt.hook("build:done", () => {
      const host = '0.0.0.0';
      const port = 8080;

      corsProxy.createServer().listen(port, host, () => {
        console.log(`Running CORS Anywhere on ${host}:${port}`);
      });
    });
  },
});
```

## 参考サイト:bow::bow::bow:
- [Nuxt Modules](https://nuxt.com/modules/)
  - 参考サイトというかNuxtの公式サイト内のコンテンツ
  - モジュールをカテゴリ別に検索出来て便利です
  - この記事書いてる最中にもTiptap用のNuxtモジュールがあることを知りました。。(使わずにNuxtに導入していた)
  - Vue.jsで使用可能＆著名なOSSであればおおよそNuxt向けに導入するモジュールがあると見てよさそう？
- [Module Author Guide](https://nuxt.com/docs/guide/going-further/modules)
  - こちらもNuxt公式サイト内のページ
  - 公開を想定する「ちゃんとした」モジュール開発を行う場合には読んでおいた方が良いと思う
- [Nuxt3のモジュールを作るために、Module Author Guideをみてみた - くらげになりたい。](https://www.memory-lovers.blog/entry/2023/07/10/093305)
  - ↑のModule Author Guideの内容について実践された内容が日本語でまとめられているブログ