Nuxt.jsプロジェクトの内容
create-nuxt-appで生成できるプロジェクトの内容を、以下で説明します。
プロジェクトで利用できるコマンド
生成されたプロジェクトでは、表8のコマンドが利用できます。
No. | コマンド | 内容 |
---|---|---|
1 | npm run dev | 開発用にプロジェクトを実行 |
2 | npm run build | 本番用にプロジェクトをビルド |
3 | npm run start | ビルドされた本番用プロジェクトを実行 |
4 | npm run generate | 静的ファイルを生成する |
No.1は開発用の実行コマンドで、実行中にファイルを変更すると、Webページを更新して変更を反映します。No.2は本番用にビルドするコマンドで、ビルド結果はNo.3のコマンドで実行できます。No.4は静的ファイルを生成するコマンドで、詳細は後述します。
プロジェクトに含まれるファイルやフォルダー
プロジェクトに含まれる、Nuxt.js固有のファイルやフォルダーの概要を表9に示します。詳細は本連載で順次説明していきます。
項目名 | 種類 | 説明 |
---|---|---|
nuxt.config.js | ファイル | Nuxt.jsの設定ファイル |
pages | フォルダー | ページのファイル(*.vue)を配置 |
components | フォルダー | コンポーネントのファイル(*.vue)を配置 |
assets | フォルダー | アセット(CSSや画像ファイルなど)を配置 |
layouts | フォルダー | レイアウト(Webページのテンプレート)を配置 |
middleware | フォルダー | ミドルウェア(ページレンダリング前に実行される処理)を配置 |
plugins | フォルダー | プラグイン(Webページ初期化時に実行される処理)を配置 |
static | フォルダー | 静的ファイル(robots.txt、favicon.icoなど)を配置 |
store | フォルダー | Vuexストア(状態を保持するオブジェクト)を配置 |
デフォルトで生成されるページやコンポーネントの内容
生成されたプロジェクトに含まれるページと、ページの一部分に対応するコンポーネントのファイルについて、以下で説明します。pages/index.vueが、最初に表示されるインデックスページのファイルです。
<template><!-- テンプレート …(1)--> <section class="container"> <div> <logo /><!-- コンポーネント …(1a)--> (略) </div> </section> </template> <script><!-- スクリプト …(2)--> import Logo from '~/components/Logo.vue' // 参照 …(2a) export default { components: { Logo // 公開 …(2b) } } </script> <style><!-- スタイル …(3)--> (略) </style>
*.vueファイルでは、<template>タグ(1)内にテンプレート(表示内容のHTML)、<script>タグ(2)内にスクリプト(JavaScript)、<style>タグ(3)内にスタイル(CSS)を、それぞれ記述します。(1a)の<logo>タグは、ロゴを表示するコンポーネントに対応します。コンポーネントを実装したcomponents/Logo.vueを(2a)で参照して(2b)で利用できるようにしています。
コンポーネントは、ページと同じ形式の*.vueファイルで記述します。ロゴを表示するコンポーネントのファイル(components/Logo.vue)をリスト4に示します。ここでは、ロゴを構成する三角形に対応するdiv要素が<template>に、それらのスタイルやアニメーションの指定が<style>に記述されています。詳細はサンプルコードを参照してください。
<template> <div class="VueToNuxtLogo"> <div class="Triangle Triangle--two" /> <div class="Triangle Triangle--one" /> <div class="Triangle Triangle--three" /> <div class="Triangle Triangle--four" /> </div> </template> <style> (略) </style>
Nuxt.jsのページやコンポーネントの概要をまとめると、以下の通りになります。
- ページやコンポーネントは*.vueファイルに記述する
- ページのファイルはpages、コンポーネントのファイルはcomponentsの各フォルダーに配置する
- *.vueファイルは<template>、<script>、<style>の部分に分かれる
Vue.jsの基本的な実装方法
*.vueファイルの基本的な実装方法を、図4のサンプルで説明します。このサンプルは、テキストボックスに入力した内容をそのまま画面に表示します。テキストボックスの内容を変更すると、リアルタイムで画面に反映されます。
このサンプルのindex.vueは、リスト5の通りです。
<template> <div> <h1>Hello {{name}}!</h1> <!-- nameの表示 …(1) --> <input v-model="name"><!-- nameの入力 …(2)--> </div> </template> <script> export default { data() { // ページに表示するデータの指定 …(3) return { name: 'World' // nameの初期値 …(4) } } } </script>
テンプレートの「{{name}}」(1)は、name変数の内容を表示することを表します。(2)では、<input>タグに「v-model="name"」と指定して、name変数の値とテキストボックスの内容が双方向に同期(バインディング)されるようにしています。「v-model」のように、要素の属性に指定して機能を設定する記述を、ディレクティブと呼びます。
スクリプトでは、「export default」記述で、テンプレートで利用する実装をエクスポートします。このサンプルでは、画面に表示するデータを指定するdata関数(3)で、name変数の初期値を設定します(4)。
より詳細なVue.jsの実装方法は、本連載の次回以降で説明します。