🎉

nuxtのpluginsとcomposablesの使い方の違い

2024/10/02に公開

Nuxt.jsにおけるプラグイン(plugins)とコンポーザブル(composables)は、それぞれ異なる目的と使い方があります。以下にその違いを詳しく説明します。

1. プラグイン(Plugins)

概要

プラグインは、Nuxt.jsアプリケーションに追加機能を提供するためのファイルです。グローバルな機能や外部ライブラリを設定する際に使用します。

主な特徴

  • グローバル登録: プラグインで定義した機能は、アプリ全体で利用可能です。
  • 初期化処理: アプリケーションの起動時に実行されるコード(例えば、外部ライブラリの初期化など)を含めることができます。
  • 提供機能: プラグイン内で provide を使うことで、コンポーネントから利用できるカスタムメソッドやデータを提供できます。

2. コンポーザブル(Composables)

概要

コンポーザブルは、Vue 3のComposition APIを利用して、再利用可能なロジックを定義するための関数です。状態管理やロジックの分離に役立ちます。

主な特徴

  • 局所的な利用: コンポーザブルは、特定のコンポーネント内で利用されることが一般的です。
  • 状態管理: 状態を持たせることができ、リアクティブなデータを返すことができます。
  • 柔軟性: 他のコンポーザブルやVueの機能と組み合わせて、複雑なロジックを構築できます。

使い方の違い

特徴 プラグイン コンポーザブル
用途 グローバルな機能や外部ライブラリの設定 再利用可能なロジックや状態の管理
利用範囲 アプリ全体で利用可能 特定のコンポーネント内で利用
初期化処理 アプリ起動時に実行 コンポーネントのライフサイクルに依存
データの提供方法 provideを使ってグローバルに提供 戻り値として返す

使用例

定義

// plugins/myPlugin.js
export default defineNuxtPlugin((nuxtApp) => {
// グローバルに提供する関数
nuxtApp.provide('myFunction', () => {
console.log("This is a global function!");
});
});

コンポーネントでの使用

このプラグインを使うには、任意のコンポーネント内で以下のようにします。

<template>
<button @click="callGlobalFunction">Call Global Function</button>
</template>

<script setup>
const { $myFunction } = useNuxtApp();

const callGlobalFunction = () => {
$myFunction(); // プラグインで定義した関数を呼び出す
};
</script>

コンポーザブルの使用例

定義

// composables/useCounter.js
import { ref } from 'vue';

export const useCounter = () => {
const count = ref(0);

const increment = () => {
count.value++;
};

const reset = () => {
count.value = 0;
};

return {
count,
increment,
reset,
};
};

コンポーネントでの使用

このコンポーザブルを使うには、以下のようにコンポーネント内で呼び出します。

<template>
<div>
<p>Count: {{ count }}</p>
<button @click="increment">Increment</button>
<button @click="reset">Reset</button>
</div>
</template>

<script setup>
import { useCounter } from '~/composables/useCounter';

const { count, increment, reset } = useCounter(); // コンポーザブルを呼び出す
</script>

まとめ

プラグインでは、アプリ全体で使える関数を定義し、どのコンポーネントからでもアクセス可能にします。
コンポーザブルでは、特定のロジックや状態を持たせるための関数を定義し、そのロジックをコンポーネント内で使います。
これにより、Nuxt.jsアプリケーションの構造を整理し、再利用性を高めることができます。

Discussion