HOME  >  Web開発 >  【Vue + Nuxt.js】Nuxt.jsの構造とHello World表示

Web開発

【Vue + Nuxt.js】Nuxt.jsの構造とHello World表示

【Vue + Nuxt.js】Nuxt.jsの構造とHello World表示

目次

  1. Nuxt.jsの構造
    1. pages
    2. components
    3. layout
    4. middleware
    5. store
    6. assets
    7. static
    8. nuxt.config.js
    9. package.json
  2. Hello Worldを表示してみる
  3. まとめ

前回の記事では、Nuxt.jsの概要と環境構築について書きました。

【Vue + Nuxt.js】Nuxt.jsとは?〜環境構築まで
https://www.dailyupblog.com/web_development/860/

今回は、Nuxt.jsのディレクトリ構造の説明と実際に触ってみて、Hello Worldを表示させるところまで、やっていきたいと思います。

それではいきましょう!

Nuxt.jsの構造

まず、Nuxt.jsのディレクトリ構造についてみていきたいと思います。

以下が、全体像です。

※Visual Studio Codeで表示しています。

pages

pagesディレクトリには、アプリケーションのビューとルーティングファイルを格納します。

前回のNuxt.jsのメリットのところでも説明しましたが、Nuxt.jsは普通のVue.jsのようにルーティングの設定を行う必要がありません。

このディレクトリにファイルを追加すれば、そのままページとなります。

デフォルトでは、index.vueとREADME.mdが格納されています。

index.vueにか下記のように記述されており、ブラウザで確認した際、この内容が表示されています。

<template>
  <div class="container">
    <div>
      <Logo />
      <h1 class="title">nuxt-test</h1>
      <div class="links">
        <a
          href="https://nuxtjs.org/"
          target="_blank"
          rel="noopener noreferrer"
          class="button--green"
        >Documentation</a>
        <a
          href="https://github.com/nuxt/nuxt.js"
          target="_blank"
          rel="noopener noreferrer"
          class="button--grey"
        >GitHub</a>
      </div>
    </div>
  </div>
</template>

<script lang="ts">
import Vue from "vue";

export default Vue.extend({});
</script>

<style>
.container {
  margin: 0 auto;
  min-height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  text-align: center;
}

.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;
}

.links {
  padding-top: 15px;
}
</style>

components

componentsディレクトリは、ページにインポートする全てのコンポーネントファイルを格納します。

ヘッダーやサイドメニューなどの部品となるコンポーネントなどです。

デフォルトでは、Logo.vueファイルが格納されています。

先ほど紹介したpagesディレクトリ内のindex.vueでインポートされています。

layout

layoutディレクトリは、アプリケーションのレイアウトファイルを格納するためのディレクトリです。

このディレクトリ内に格納されているdefault.vue内にlayoutのソースを記述します。

デフォルトではdefult.vueには下記のように記述されています。

<template>
  <div>
    <Nuxt />
  </div>
</template>

<style>
html {
  font-family:
    'Source Sans Pro',
    -apple-system,
    BlinkMacSystemFont,
    'Segoe UI',
    Roboto,
    'Helvetica Neue',
    Arial,
    sans-serif;
  font-size: 16px;
  word-spacing: 1px;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
  -moz-osx-font-smoothing: grayscale;
  -webkit-font-smoothing: antialiased;
  box-sizing: border-box;
}

*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
}

.button--green {
  display: inline-block;
  border-radius: 4px;
  border: 1px solid #3b8070;
  color: #3b8070;
  text-decoration: none;
  padding: 10px 30px;
}

.button--green:hover {
  color: #fff;
  background-color: #3b8070;
}

.button--grey {
  display: inline-block;
  border-radius: 4px;
  border: 1px solid #35495e;
  color: #35495e;
  text-decoration: none;
  padding: 10px 30px;
  margin-left: 15px;
}

.button--grey:hover {
  color: #fff;
  background-color: #35495e;
}
</style>

<Nuxt />の部分にpages内のコンポーネントファイルが読み込まれます。

middleware

middlewareディレクトリは、アプリケーションのミドルウェアを格納するディレクトリです。

ミドルウェアとはページレイアウトグループをレンダリングする前などにカスタム関数を実行することを可能にしてくれます。

store

storeディレクトリは、以前紹介しましたvuexのstoreファイルを格納します。

下記記事で、vuexについて解説しているので、ご参照ください。

【Vue + vue-cli】Vuex – Vueの状態管理ライブラリ
https://www.dailyupblog.com/web_development/802/

普通のvue.jsのように他の設定は不要で、この中にindex.jsファイルを追加すると、自動でvuexのstoreのオプションが自動的に有効になります。

assets

assetsディレクトリは、スタイル(cssファイル)や画像ファイルなどを格納します。

とりあえず画像類は全てここに格納します。

グローバルCSSファイル(全体共通のスタイル)などもここに格納してください。

static

staticディレクトリは例えば、favicon(Webサイトのアイコン)ファイルのような、ルートディレクトリに格納しなければならないファイルを格納するためのディレクトリです。

staticディレクトリは直接サーバーのルートディレクトリに配置されます。

nuxt.config.js

nuxt.config.jsファイルはNuxt.jsにおいて設定を行える唯一のファイルです。

追加したモジュールなどで設定を追加した場合などがあった場合はここに記述します。

デフォルトでは下記のように記述されています。

export default {
  // Global page headers: https://go.nuxtjs.dev/config-head
  head: {
    title: 'nuxt-test',
    htmlAttrs: {
      lang: 'en'
    },
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: '' }
    ],
    link: [
      { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
    ]
  },

  // Global CSS: https://go.nuxtjs.dev/config-css
  css: [
    'element-ui/lib/theme-chalk/index.css'
  ],

  // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
  plugins: [
    '@/plugins/element-ui'
  ],

  // Auto import components: https://go.nuxtjs.dev/config-components
  components: true,

  // Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
  buildModules: [
    // https://go.nuxtjs.dev/typescript
    '@nuxt/typescript-build',
  ],

  // Modules: https://go.nuxtjs.dev/config-modules
  modules: [
  ],

  // Build Configuration: https://go.nuxtjs.dev/config-build
  build: {
    transpile: [/^element-ui/],
  }
}

package.json

普通のVue.jsと同様に、インストールしたモジュールの情報が全てここに記述されています。

yarn installコマンドを実行した際に、このファイルに記述してあるモジュールが全て、「node_modules」フォルダにインストールされます。

Hello Worldを表示してみる

ここまで、ざっくりとディレクトリ構造をみてきたので、実際に触ってみましょう。

とりあえず、Hello Worldを画面上に表示させてみましょう。

「pages」フォルダ内のindex.vueを開いて、不要箇所を削除し、h2でHello Worldを記述してください。

ソースは以下になります。

<template>
  <div class="container">
    <div>
      <h2>Hello World!!</h2>
    </div>
  </div>
</template>

<script lang="ts">
import Vue from "vue";

export default Vue.extend({});
</script>

<style>
.container {
  margin: 0 auto;
  min-height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  text-align: center;
}

.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;
}

.links {
  padding-top: 15px;
}
</style>

この状態で、ブラウザでページを確認してみましょう。

すると下記のように表示されるはずです。

このように表示されたら成功です。

Nuxt.jsももちろんホットリロードなので、変更を保存したら、即座に画面に反映されます。

まとめ

いかがでしたでしょうか。

基本のディレクトリ構成を理解して、Nuxt.jsについて理解を深めていきましょう。

それでは今回はここまで!

お疲れ様でした!

下記Nuxt.js公式のディレクトリ構造についてです。
https://ja.nuxtjs.org/docs/2.x/get-started/directory-structure

関連記事

関連記事