microCMS

vue-awesome-swiper × microCMSでNuxtにスライドショーを実装する

しょうみゆ

この記事は公開後、1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、しょうみゆです。

今回はmicroCMSを使用して、Nuxt.jsにスライドショーを実装する方法を解説します。
完成時のイメージはこちらです。


スライドショーにはvue-awesome-swiperモジュールを使用していきます。

管理画面からスライドショー用のAPIを作成する


はじめにmicroCMSの管理画面からスライドショー用のAPIを作成します。

API名に「スライドショー」、エンドポイントに「slide」とします。
microCMSでAPIを作成する
APIの型はリスト形式を選択します。

続いてAPIスキーマの設定を行います。
今回は画像と代替テキストのみ作成しますが、こちらも要件に合わせてお好きに変更してください。

以下のような画面になればAPIの設定は完了になります。
『追加』ボタンから画像を追加していきましょう。

画像と任意のalt属性用のテキストをセットし、『公開』を押すことでフロント側から使用できるようになります。

続けて投稿し、最終的に6枚の画像を登録しました。
枚数はお好みで設定してください。

これでmicroCMSでの設定は完了です。

Nuxtプロジェクトを作成する


土台となるNuxtプロジェクトを作成していきましょう。

インストール


Nuxtアプリをインストールします。
今回は microcms-nuxt-carousel というプロジェクト名で作成しました。

$ npx create-nuxt-app microcms-nuxt-carousel

プロジェクト作成時の設定項目は下記のようにしましたが、プロジェクトによって随時変更してください。

開発環境を立ち上げる


Nuxtアプリが作成できたら、下記のコマンドで立ち上がります。

$ cd microcms-nuxt-carousel/
$ npm run dev


localhost:3000 にアクセスすると下記のように表示されます。

スライドショーのHTMLを作成する


今回はswiperを使用するので、swiper 本体と Nuxt で swiper を使用するための vue-awesome-swiper をインストールしましょう。

Swiper
vue-awesome-swiper

Swiper本体のバージョンは6系以上だと正常に作動しないため、5系でのインストールを推奨します。
(執筆時のNuxt.jsのバージョンは2.15.7です。)

$ npm install swiper@5.x vue-awesome-swiper --save


Swiperをプラグインとして登録する


プラグインとして登録しておくことで、毎回importせずにSwiperを使うことができるようになります。

Nuxtのプロジェクトルートにpluginsというディレクトリを作成して、その中にswiper.jsというファイルを作成します。
作成したファイルの中で下記のようにvue-awesome-swiperを呼び出す処理を書きましょう。

// plugins/swiper.js

import Vue from "vue";
import VueAwesomeSwiper from "vue-awesome-swiper";
import "swiper/css/swiper.css";

Vue.use(VueAwesomeSwiper);


ファイルを作成したら、nuxt.config.jsのpluginsのセクションにswiper.jsを追加します。

export default {
  // 略
  plugins: [
    { src: "~/plugins/swiper", mode: "client" },
  ],
}


Nuxtを立ち上げている場合は一度再起動しましょう。

スライドショーのHTMLを作成


プラグインの登録ができたら、実際にswiperが動作するかHTMLを書きつつ試してみましょう。
pages/index.vue に下記のように記載します。

<template>
  <div>
    <client-only>
      <swiper :options="swiperOption">
        <swiper-slide>Slide 1</swiper-slide>
        <swiper-slide>Slide 2</swiper-slide>
        <swiper-slide>Slide 3</swiper-slide>
      </swiper>
    </client-only>
    <div slot="pagination" class="swiper-pagination" />
    <div slot="button-prev" class="swiper-button-prev" />
    <div slot="button-next" class="swiper-button-next" />
  </div>
</template>


<script>
export default {
  data() {
    return {
      swiperOption: {
        autoplay: {
          delay: 2500,
          disableOnInteraction: false
        },
        slidesPerView: 1,
        loop: true,
        pagination: {
          el: ".swiper-pagination",
          clickable: true
        },
        navigation: {
          nextEl: ".swiper-button-next",
          prevEl: ".swiper-button-prev"
        }
      }
    };
  }
};
</script>


localhost:3000にアクセスして、スライドショーが正常に動作していることを確認してみてください。

microCMSと連携させる


スライドショーのベースはできたので、ここにmicroCMSで投稿した画像を連携させていきましょう。

nuxt-microcms-moduleのインストール


nuxt-microcms-module を使用するとAPIの取得が楽になります。
設定内容や詳細はこちらの記事で紹介しているので、詳しく知りたい方はぜひ読んでみてください。
microCMSのNuxt.js用モジュールを公開しました

それではモジュールをインストールしましょう。

$ npm install nuxt-microcms-module


インストールができたら、nuxt.config.jsに下記のように追記します。

export default {
  // 略
  buildModules: ["nuxt-microcms-module"],
  microcms: {
    options: {
      serviceDomain: process.env.SERVICE_DOMAIN,
      apiKey: process.env.API_KEY
    },
    mode: process.env.NODE_ENV === "production" ? "server" : "all"
  },
}


プロジェクトルートに.envのファイルを作成して、API_KEYとSERVICE_DOMAINの環境変数を作成します。

// .env

API_KEY=xxxxxxxxxxxx
SERVICE_DOMAIN=xxxxxxxxxxxxx


API_KEYとSERVICE_DOMAINはどちらもmicroCMSの管理画面から取得できます。

API_KEY

サイドバー上部・歯車のマーク > API_KEY > X-API-KEY

SERVICE_DOMAIN

microCMSの管理画面のURLが下記の場合、xxxxの部分がSERVICE_DOMAINとなります。

https://xxxx.microcms.io/apis/slide


.envの設定ができたらmicroCMSとの連携は完了です。
Nuxtプロジェクトが立ち上がっている場合は、念の為再起動しておきましょう。

APIを取得して画像データを表示させる


いよいよAPIを取得していきます。
pages/index.vueのscriptタグに下記のように追記します。
endpointに管理画面で作成したエンドポイントを設定します。

export default {
  async asyncData({ $microcms }) {
    const slide = await $microcms.get({
      endpoint: "slide"
    });

    return slide;
  },
  // 略
}


これでcontentsという配列のデータが取得できるようになりました!
(以下はGoogle Chrome 拡張機能 Vue.js devtools を使用して確認しています。)


続けてスライドショーのHTML部分を書き換えていきます。
asyncDataで取得したデータは配列で取得したので、v-forを使用して<swiper-slide></swiper-slide>にデータを反映させます。

<template>
  <div>
    <client-only>
      <swiper :options="swiperOption">
        <swiper-slide v-for="(slide, index) in contents" :key="index">
          <img
            :src="slide.image.url"
            :alt="slide.alt"
          />
        </swiper-slide>
      </swiper>
    </client-only>
    <div slot="pagination" class="swiper-pagination" />
    <div slot="button-prev" class="swiper-button-prev" />
    <div slot="button-next" class="swiper-button-next" />
  </div>
</template>


これで画像のスライドショーが実装できました。
あとはスタイルを調整して、好みのスライドショーを実装してみてください。

pages/index.vueの最終的なコードは下記のようになります。

<template>
  <div>
    <client-only>
      <swiper :options="swiperOption">
        <swiper-slide v-for="(slide, index) in contents" :key="index">
          <img
            :src="slide.image.url"
            :alt="slide.alt"
          />
        </swiper-slide>
      </swiper>
    </client-only>
    <div slot="pagination" class="swiper-pagination" />
    <div slot="button-prev" class="swiper-button-prev" />
    <div slot="button-next" class="swiper-button-next" />
  </div>
</template>

<script>
export default {
  async asyncData({ $microcms }) {
    const slide = await $microcms.get({
      endpoint: "slide"
    });

    return slide;
  },

  data() {
    return {
      swiperOption: {
        autoplay: {
          delay: 2500,
          disableOnInteraction: false
        },
        slidesPerView: 1,
        loop: true,
        pagination: {
          el: ".swiper-pagination",
          clickable: true
        },
        navigation: {
          nextEl: ".swiper-button-next",
          prevEl: ".swiper-button-prev"
        }
      }
    };
  }
};
</script>


環境

本記事は下記のバージョンに基づき執筆しました。

  • Nuxt.js 2.15.7
  • nuxt-microcms-module 1.0.1
  • swiper 5.4.5
  • vue-awesome-swiper 4.1.1


終わりに


今回はNuxtプロジェクトでmicroCMSを使用したスライドショーを実装する方法を解説しました。
microCMSの管理画面からスライドショーの投稿を公開・非公開にして表示枚数を調整することもできますし、リンク用のAPIスキーマを追加してバナーとして応用したりすることもできますので、要件に合わせて様々なスライドショーを作成してみてください。
少しでもこの記事が参考になれば幸いです。

まずは、無料で試してみましょう。

APIベースの日本製ヘッドレスCMS「microCMS」を使えば、 ものの数分でAPIの作成ができます。

microCMSを無料で始める

microCMSについてお問い合わせ

初期費用無料・14日間の無料トライアル付き。ご不明な点はお気軽にお問い合わせください。

お問い合わせ

microCMS公式アカウント

microCMSは各公式アカウントで最新情報をお届けしています。
フォローよろしくお願いします。

  • X
  • Discord
  • github

ABOUT ME

しょうみゆ
Web広告運用、インフラ・フロントエンドエンジニアの経験があり、現在はフリーランスとしてWeb制作やフロントエンド開発をメインに活動中。microCMSとNuxtのJAMstack構成での開発が得意。