【VueとNuxt】環境構築とcomponents, layoutsの使い方紹介
今回は Vue と Nuxt についてです。React や JavaScript を調べているとよく目にするので調べてみました。
先に感想をいうと、非常に簡単で使いやすかったです。
パッとフロントを作りたいならとりあえず Nuxt を検討するのはありだと思います。
Vue と Nuxt は公式ドキュメントが日本語で丁寧に書いてあるので、わからないことは公式で調べられるのがいいです!
こちらの書籍も参考にさせていただきました。
※ 情報は 2019/1/18 のものです
環境構築
最低限必要なものは以下です。
- Node.js のインストール
Node.js のインストールが済めば npm というパッケージマネージャーが使えます。 npm コマンドで Vue CLI と cli-service-global をインストールします。
npm install -g @vue/cli @vue/cli-service-global
これで Vue を使うための最低限の準備は完了です。
Vue CLI がインストールされていれば、もうちょっと本格的に Vue を始められるプロジェクト作成のコマンドを使用できます。
vue create <project-name>
こちらを実行するとプロジェクトフォルダが作成され、なかに必要なものがたいがい揃っています。
Nuxt の場合は以下のコマンドで Nuxt を使うために基本的に必要なものが揃ったプロジェクトを作成できます。
npx create-nuxt-app <project-name>
こちらのコマンドでも vue create コマンド同様に必要なものがたいがい揃います
上記以外で個人的に入れておくとおすすめなのは以下になります。
- Vue.js devtool
- vue を chrome ブラウザでデバックするためのもの
- Vue.js devtool
- anyenv
- pyenv や nodenv などの言語のバージョン管理を行う〇〇 env 系を管理するもの
- anyenv の GitHub
- nodenv
- Node.js のバージョン管理を行うもの
- nodenv の GitHub
- Visual Studio Code
- エディタとしておすすめ。便利なプラグインがたくさんある。
- Visual Studio Code 公式
- yarn
- npm と同じパッケージマネージャー。npm より早い
- yarn 公式
これらは Mac であれば homebrew でだいたいそろいます。
Vue と Nuxt の違い
違いについてはNuxt JS 公式に書いてあります。
Nuxt は Vue に基づいたフレームワークです。.vue
で記述でき、SSR やルーティングといったよく使う機能があらかじめそろえられています。Vue をより強力にしたものという認識でいいと思います。
Nuxt を使った web ページには有名なところだとnoteがあります。
Nuxt でページ作成
Nuxt で簡単な web ページを作ってみます。
まずは、適当なフォルダでnpx create-nuxt-app <project-name>
を実行します。
コマンドを入力するといろいろ聞かれますがデフォルトのままで進みます。
インストールが終わったら、作ったプロジェクトフォルダに移動してyarn dev
を入力(パッケージマネージャーに npm を選択した人はnpm
コマンドを使う)。
ブラウザでlocalhost:3000
にアクセスすると以下のような画面が表示されます。
これをカスタマイズしていきます。
表示されている内容はプロジェクトフォルダ内の pages 配下のindex.vue
なので、こちらを開いて編集します。
とりあえずロゴやリンクを消してシンプルなページにしてみます。コードは以下の通りです。
<template>
<div>
<h1 class="title">テストページ</h1>
<h2 class="subtitle">Nuxtお試し中</h2>
</div>
</template>
<script>
export default {}
</script>
<style>
.title {
font-family: 'Quicksand', 'Source Sans Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
'Helvetica Neue', Arial, sans-serif;
display: block;
font-weight: 300;
font-size: 100px;
color: #35495e;
letter-spacing: 1px;
}
.subtitle {
font-weight: 300;
font-size: 42px;
color: #526488;
word-spacing: 5px;
padding-bottom: 15px;
}
</style>
そうするとブラウザはこんな感じになってると思います。
ちなみにyarn dev
実行中はホットリロードが行われていて、変更がリアルタイムに反映されます。
次はページを追加します。
ページを追加するにはプロジェクトフォルダ内の pages 配下に新しく拡張子.vue
のファイルを追加します。名前はなんでもいいです。今回はnext.vue
にしました。
next.vue
にはindex.vue
の内容をコピーして title 部分などを書き換えておきます。
次はindex.vue
にもどって新しいページへのリンクを書きます。
<template>
<div>
<h1 class="title">テストページ</h1>
<h2 class="subtitle">Nuxtお試し中</h2>
<!-- 次ページへのリンク -->
<nuxt-link to="/next">次ページへ</nuxt-link>
</div>
</template>
<!--以下省略-->
<nuxt-link to="/next">次ページへ</nuxt-link>
で to=の部分に拡張子なしのファイル名を記述するだけで次ページへのリンクになります。
次ページへリンクをクリックすると先ほど作成したページが以下のように表示されるはずです。
components の使い方
次はコンポーネントを使ってみます。
まず、コンポーネントとはその名通り部品です。いろんなページで共通して使われるものはコンポーネントとして書いておくと何度も同じことを書かずにすむので便利です。
さっきのページにヘッダーをコンポーネントとして追加します。
プロジェクト内のcomponents
フォルダにHeader.vue
を追加します。
内容はこんな感じで単純なものにしました。
<template>
<div class="header">
<h1>ヘッダー</h1>
</div>
</template>
<script>
export default {}
</script>
<style>
.header {
background-color: antiquewhite;
}
</style>
次は、index.vue
に Header コンポーネントを組み込みます。
<template>
<div>
<!-- ヘッダーコンポーネント -->
<header />
<h1 class="title">テストページ</h1>
<h2 class="subtitle">Nuxtお試し中</h2>
<nuxt-link to="/next">次ページへ</nuxt-link>
</div>
</template>
<script>
import Header from '../components/Header'
export default {
components: {
Header,
},
}
</script>
ポイントは<script>
タグ内にcomponents/Header
のインポートするのと、export default
内にあるように使用するコンポーネントを書くことです。
こうすると以下のようにヘッダーが追加されます。
layouts の使い方
ヘッダーのようにどのページでも共通するものは、layouts/default.vue
に記述することで全ページに適用されます。
今の状態だとnext.vue
のページにはヘッダーは反映されていないと思うので、layouts/default.vue
を使うことで全ページに適用されるか確かめていきます。
まずは前項でindex.vue
に追加した Header コンポーネントを削除して、追加前の状態にします。
次はlayouts/default.vue
に Header コンポーネントを追加します。コンポーネントの追加は上に記載したのと同じ方法です。
<template>
<div>
<Header />
<nuxt />
</div>
</template>
<script>
import Header from "../components/Header";
export default {
components: {
Header
}
};
</script>
<!--以下のstyleは省略>
これで両方のページにヘッダーが追加されているはずです。
ちゃんと反映されてますね!
まとめ
本記事では、Vue と Nuxt の始め方や components、layouts について紹介しました。
Vue と Nuxt はわかりやすくて楽しいです!
本当は v-on やら v-model についても書いていたのですが、記事が長くなりすぎたのでわけました笑
今回はページ遷移くらいしかやってないので、面白いのは次の記事です!