Vuetifyに入門する

# Vuetifyとは？

Vue.jsのUIライブラリーです。Googleが提唱した[マテリアルデザイン](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%86%E3%83%AA%E3%82%A2%E3%83%AB%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3)にのっとっており、直感的で使いやすいコンポーネントを利用することができます。

デザインの知識が全く無くても、簡単にUIを作れちゃいます🤗

# プロジェクトを作成
まずはいつもどおりに`vue create`でプロジェクトを作成します。

```
vue create vuetify-project
```

今回はデフォルトでプロジェクトを作成します。

```
Vue CLI v4.2.2
? Please pick a preset: default (babel, eslint)
```

```
🎉  Successfully created project vuetify-project.
👉  Get started with the following commands:

 $ cd vuetify-project
 $ npm run serve
```

# vuetifyをインストール

プロジェクトの作成が完了したら、プロジェクトのディレクトリに移動して、`vuetify`をインストールします。

```
cd vuetify-project
```

```
vue add vuetify
```
プリセットの選択を聞かれますが、ここもデフォルトを選択します。

```
? Choose a preset: (Use arrow keys)
❯ Default (recommended) 
  Prototype (rapid development) 
  Configure (advanced) 
```

```
✔  Successfully invoked generator for plugin: vue-cli-plugin-vuetify
 vuetify  Discord community: https://community.vuetifyjs.com
 vuetify  Github: https://github.com/vuetifyjs/vuetify
 vuetify  Support Vuetify: https://github.com/sponsors/johnleider
```

インストールが完了しました👏
サーバーを起動してみましょう。

```
npm run serve
```

いつもと違う感じの表示になりましたね🥰

<img width="1428" alt="スクリーンショット 2020-02-22 19.11.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496565/46cbfd7c-43f5-2221-2070-c69fc8b0225f.png">

# 実際に使ってみる

インストールが完了したので、実際に使ってみましょう！
基本的な使い方は、`v-`という前置詞がついたコンポーネントを組み合わせていきます。

使用可能なコンポーネントはすべて[公式ドキュメント](https://vuetifyjs.com/ja)から確認することができます。
驚くほど種類が多いです。😮

とりあえずカルーセルを設置してみましょう！

まずは公式ドキュメントからカルーセルのページを見つけてきます。

<img width="714" alt="スクリーンショット 2020-02-22 20.21.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496565/86ad07a0-02ef-2d49-e0e6-270455454237.png">

左側のサイドメニューから探すこともできますし、ページを検索することもできます。
各コンポーネントのページから、イメージや使い方を確認することができます。

コンポーネントを実装する一番手っ取り早い方法はコピペですね！(笑）
公式のサンプルの右上のソースコードのアイコンをクリックすると、コードが表示されるのでそれをコピペしたら完成です！

<img width="714" alt="スクリーンショット 2020-02-22 20.29.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496565/e4a1f884-8201-3e45-0939-70c288b8a34c.png">
<img width="714" alt="スクリーンショット 2020-02-22 20.29.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496565/1b23ff0d-85b2-bdec-7870-37c3d1059888.png">

![vvv.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496565/6543170c-5a09-74ae-2c78-34fee3ad16a0.gif)

あとはAPIをみてpropsを自分好みに調整したり、コンポーネントを組み合わせたりすれば誰でも簡単にスタイリッシュな画面が作れます🎉

## とりあえずこんな感じに

<img width="714" alt="スクリーンショット 2020-02-22 21.14.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496565/01758a7b-75c4-ec22-1554-82f7b7b265e7.png">

```App.vue
<template>
  <v-app>
    <v-app-bar
      app
      color="primary"
      dark
    />
    <v-card
      max-width="400"
      class="mx-auto my-auto"
      hover
    >
      <v-carousel
        cycle
        height="400"
        hide-delimiter-background
        show-arrows-on-hover
      >
        <v-carousel-item
          v-for="(slide, i) in slides"
          :key="i"
        >
          <v-sheet
            :color="colors[i]"
            height="100%"
          >
            <v-row
              class="fill-height"
              align="center"
              justify="center"
            >
              <div class="display-3">{{ slide }} Slide</div>
            </v-row>
          </v-sheet>
        </v-carousel-item>
      </v-carousel>
      <v-card-title>My Carousel</v-card-title>
      <v-card-subtitle class="font-italic font-weight-black">John</v-card-subtitle>
      <v-avatar class="mx-6">
        <img
          src="https://cdn.vuetifyjs.com/images/john.jpg"
          alt="John"
        >
      </v-avatar>
      <v-card-text>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</v-card-text>
    </v-card>
  </v-app>
</template>

<script>
  export default {
    data () {
      return {
        colors: [
          'indigo',
          'warning',
          'pink darken-2',
          'red lighten-1',
          'deep-purple accent-4',
        ],
        slides: [
          'First',
          'Second',
          'Third',
          'Fourth',
          'Fifth',
        ],
      }
    },
  }
</script>
```