Vuetifyを使ってみた話


#vuetifyってなによ？
VuetifyはVueのUIコンポーネントライブラリーです。
シンプルでスタイリッシュなUIが多くあります。
デザイン力が無い自分もそこそこカッコいいページを作ることができるようになるありがたいものです。
[マテリアルデザイン](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が手軽に使えるのでオススメです。

#とりあえず使ってみる
##インストール

```console:console
npm install -g @vue/cli  <-- Vue-cliがすでに入ってる人は飛ばして構いません！
vue create hogehoge      <-- Vueのプロジェクトを作成
vue add vuetify          <-- これをするといい感じに自動でVuetifyを使える環境にしてくれます

npm run serve            <-- サーバー起動！
```

localhost:8080にアクセスするとこんな感じの画面になります！
いかにもスタートページって感じですね。
![FireShot Capture 002 - my-app - localhost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323051/05c74012-ae1a-435c-2db5-1724395814d8.png)

＊フッターとかちょっといじっちゃってますw

これは下のような階層構造の中のコンポーネンツ内のHelloWorldの内容が表示されています。
ヘッダーとかはApp.vueに書いてありますね

<img width="297" alt="スクリーンショット 2019-05-07 14.58.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323051/8e7614f4-c45a-1a8c-c669-3067e0a66e31.png">

```vuejs:HelloWorld.vue
<template>
  <v-container>
    <v-layout
      text-xs-center
      wrap
    >
      <v-flex xs12>
        <v-img
          :src="require('../assets/logo.svg')"
          class="my-3"
          contain
          height="200"
        ></v-img>
      </v-flex>

      <v-flex mb-4>
        <h1 class="display-2 font-weight-bold mb-3">
          Welcome to Vuetify
        </h1>
        <p class="subheading font-weight-regular">
          For help and collaboration with other Vuetify developers,
          <br>please join our online
          <a href="https://community.vuetifyjs.com" target="_blank">Discord Community</a>
        </p>
      </v-flex>

      <v-flex
        mb-5
        xs12
      >
        <h2 class="headline font-weight-bold mb-3">What's next?</h2>

        <v-layout justify-center>
          <a
            v-for="(next, i) in whatsNext"
            :key="i"
            :href="next.href"
            class="subheading mx-3"
            target="_blank"
          >
            {{ next.text }}
          </a>
        </v-layout>
      </v-flex>

      <v-flex
        xs12
        mb-5
      >
        <h2 class="headline font-weight-bold mb-3">Important Links</h2>

        <v-layout justify-center>
          <a
            v-for="(link, i) in importantLinks"
            :key="i"
            :href="link.href"
            class="subheading mx-3"
            target="_blank"
          >
            {{ link.text }}
          </a>
        </v-layout>
      </v-flex>

      <v-flex
        xs12
        mb-5
      >
        <h2 class="headline font-weight-bold mb-3">Ecosystem</h2>

        <v-layout justify-center>
          <a
            v-for="(eco, i) in ecosystem"
            :key="i"
            :href="eco.href"
            class="subheading mx-3"
            target="_blank"
          >
            {{ eco.text }}
          </a>
        </v-layout>
      </v-flex>
    </v-layout>
  </v-container>
</template>

<script>
  export default {
    data: () => ({
      ecosystem: [
        {
          text: 'vuetify-loader',
          href: 'https://github.com/vuetifyjs/vuetify-loader'
        },
        {
          text: 'github',
          href: 'https://github.com/vuetifyjs/vuetify'
        },
        {
          text: 'awesome-vuetify',
          href: 'https://github.com/vuetifyjs/awesome-vuetify'
        }
      ],
      importantLinks: [
        {
          text: 'Documentation',
          href: 'https://vuetifyjs.com'
        },
        {
          text: 'Chat',
          href: 'https://community.vuetifyjs.com'
        },
        {
          text: 'Made with Vuetify',
          href: 'https://madewithvuetifyjs.com'
        },
        {
          text: 'Twitter',
          href: 'https://twitter.com/vuetifyjs'
        },
        {
          text: 'Articles',
          href: 'https://medium.com/vuetify'
        }
      ],
      whatsNext: [
        {
          text: 'Explore components',
          href: 'https://vuetifyjs.com/components/api-explorer'
        },
        {
          text: 'Select a layout',
          href: 'https://vuetifyjs.com/layout/pre-defined'
        },
        {
          text: 'Frequently Asked Questions',
          href: 'https://vuetifyjs.com/getting-started/frequently-asked-questions'
        }

      ]
    })
  }
</script>
```

#Helloworldを変えてみる
Helloworldの内容をVuetifyの公式ページにあるコンポートの紹介のものに書き換えてみます！

```vuejs:HelloWorld.vue
<template>
  <v-carousel hide-controls>
    <v-carousel-item
      v-for="(item,i) in items"
      :key="i"
      :src="item.src"
    ></v-carousel-item>
  </v-carousel>
</template>

<script>
  export default {
    data () {
      return {
        items: [
          {
            src: 'https://cdn.vuetifyjs.com/images/carousel/squirrel.jpg'
          },
          {
            src: 'https://cdn.vuetifyjs.com/images/carousel/sky.jpg'
          },
          {
            src: 'https://cdn.vuetifyjs.com/images/carousel/bird.jpg'
          },
          {
            src: 'https://cdn.vuetifyjs.com/images/carousel/planet.jpg'
          }
        ]
      }
    }
  }
</script>
```

これだけで画像のスライドショーが表示されます。
![vx7nc-8q10z.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323051/42c32f03-5cca-e946-82ec-def5add9014b.gif)

#まとめ
Vuetifyめっちゃ便利です。
もっと色々なUIコンポーネントがあるのでぜひお試しを！

#参考
[Vuetify公式ページ](https://vuetifyjs.com/ja/)
[Vuetifyをインストールして使ってみる@reflet様](https://qiita.com/reflet/items/88dc298c8887ad517845)